Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Dataweave中使用多个Json输入时出现意外字符错误_Java_Json_Mule_Anypoint Studio_Dataweave - Fatal编程技术网

Java 在Dataweave中使用多个Json输入时出现意外字符错误

Java 在Dataweave中使用多个Json输入时出现意外字符错误,java,json,mule,anypoint-studio,dataweave,Java,Json,Mule,Anypoint Studio,Dataweave,我有一个Json负载和Json流变量。我正在使用Products Json flowVar填充Stores Json负载中的Products数组,但我看到以下错误: INFO 2017-01-15 23:06:32,559 [[test].test-httpListenerConfig.worker.01] org.mule.api.processor.LoggerMessageProcessor: **** Stores JSON Payload: {"storeId":"1234"} IN

我有一个Json负载和Json流变量。我正在使用Products Json flowVar填充Stores Json负载中的Products数组,但我看到以下错误:

INFO  2017-01-15 23:06:32,559 [[test].test-httpListenerConfig.worker.01] org.mule.api.processor.LoggerMessageProcessor: **** Stores JSON Payload: {"storeId":"1234"}
INFO  2017-01-15 23:06:32,574 [[test].test-httpListenerConfig.worker.01] org.mule.api.processor.LoggerMessageProcessor: *** Products JSON flowvar{"products": [{   "product": "phone",   "price": "499.99"  }]}
ERROR 2017-01-15 23:06:34,489 [[test].test-httpListenerConfig.worker.01] org.mule.exception.DefaultMessagingExceptionStrategy: 
********************************************************************************
Message               : Exception while executing: 
{stores={storeId=1234}, products=[]}
 ^
Unexpected character 's' at index 1 (line 1, position 2), expected '"'.
Payload               : {"storeId":"1234"}
Payload Type          : java.lang.String
Element               : /getFlow/processors/3/3 @ test:testcsv.xml:22 (Transform Message)
Element XML           : <dw:transform-message metadata:id="43b88f1f-032a-442f-94f7-09fbc853390b" doc:name="Transform Message">
                        <dw:input-payload mimeType="application/json"></dw:input-payload>
                        <dw:input-variable mimeType="application/json" variableName="varTest"></dw:input-variable>
                        <dw:set-payload>%dw 1.0%input payload application/json%output application/json---{products: flowVars.varTest.products map ((product , indexOfProduct) -> {product: product.product,price: product.price})}</dw:set-payload>
                        </dw:transform-message>
--------------------------------------------------------------------------------
Root Exception stack trace:
com.mulesoft.weave.mule.exception.WeaveExecutionException: Exception while executing: 
{stores={storeId=1234}, products=[]}
 ^
Unexpected character 's' at index 1 (line 1, position 2), expected '"'.
    at com.mulesoft.weave.mule.exception.WeaveExecutionException$.apply(WeaveExecutionException.scala:12)
    at com.mulesoft.weave.mule.WeaveMessageProcessor.execute(WeaveMessageProcessor.scala:121)
    at com.mulesoft.weave.mule.WeaveMessageProcessor.process(WeaveMessageProcessor.scala:67)
XML流:

    <?xml version="1.0" encoding="UTF-8"?>

    <mule xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:mongo="http://www.mulesoft.org/schema/mule/mongo" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
        xmlns:spring="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
    http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
    http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd
    http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
    http://www.mulesoft.org/schema/mule/mongo http://www.mulesoft.org/schema/mule/mongo/current/mule-mongo.xsd
    http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd
    http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd">
        <flow name="getFlow">
            <http:listener config-ref="testdata-httpListenerConfig" path="/test" doc:name="HTTP"/>
        <set-variable variableName="varTest" value="{ &quot;products&quot;: [{      &quot;product&quot;: &quot;phone&quot;,         &quot;price&quot;: &quot;499.99&quot;   }]}" mimeType="application/json" doc:name="Variable"/>
        <set-payload value="[{  &quot;stores&quot;: {   &quot;storeId&quot;: &quot;1234&quot;  } }]" mimeType="application/json" doc:name="Set Payload"/>
        <json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/>
        <foreach doc:name="For Each" collection="#[payload]">
            <json:object-to-json-transformer mimeType="application/json" doc:name="Object to JSON"/>
            <logger message="#['**** Stores JSON Payload: ' + payload]" level="INFO" doc:name="Logger"/>
            <logger message="#['*** Products JSON flowvar' + flowVars.varTest]" level="INFO" doc:name="Logger"/>
            <dw:transform-message metadata:id="43b88f1f-032a-442f-94f7-09fbc853390b" doc:name="Transform Message">
                <dw:input-payload mimeType="application/json" doc:sample="C:\getStores.json"/>
                <dw:input-variable mimeType="application/json" variableName="varTest" doc:sample="sample_data\list_json_15.json"/>
                <dw:set-payload><![CDATA[%dw 1.0
%input payload application/json
%input in1 application/json
%output application/json
---
{
    stores: {
        storeId: payload.stores.storeId
    },
    products: flowVars.varTest.products map ((product , indexOfProduct) -> {
        product: product.product,
        price: product.price
    })
}]]></dw:set-payload>
            </dw:transform-message>                
            <logger message="#[payload]" level="INFO" doc:name="Logger"/>
            </foreach>
        </flow>
    </mule>
{
    "stores": {
        "storeId": "1234"
    },
    "products": []
}
产品

{
    "products": [{
        "product": "phone",
        "price": "499.99"
    }]
}
预期结果

{
    "stores": {
        "storeId": "1234"
    },
    "products": [{
        "product": "phone",
        "price": "499.99"
    }]
}

谢谢你看这个。我找到了解决办法

当我更新我的foreach集合以指定json:而不是payload
时,我发现它成功地完成了,并且可以在循环中迭代,而无需将其转换为hashmap的Java列表


我仍然有点困惑为什么会这样做,因为即使我转换为Java来迭代列表,我还是使用Object to JSON transformer将负载转换回JSON,但在这个实例中它看起来并没有真正转换,流仍然将其视为Java。

您能给我发送预期的JSON响应吗??我假设上面提到的“存储JSON有效负载”和“产品JSON”是输入有效负载的。考虑到Mule最初将JSON对象存储为字符串,您的
有效负载当前不可编辑。如果在每个
(可能在“
JSON-to-Object
”转换器上)的
前面放置一个断点并逐步执行,您将看到循环从未被触发。您还应该在控制台中看到以下消息:
org.mule.routing.expressionspliter:Splitter未返回任何结果。如果这不是预期的,请检查拆分表达式
。如果是这种情况,则首先将有效负载转换为iterable。这是因为“
有效负载.stores
”将返回为
null
,因此如果没有值(或至少没有
可以使用的值),则它将永远不会进入循环。您应该将该语句更改为
payload[0]。stores
以显式调用对象中的第一个元素。但是,为了真正帮助您,您需要告诉我们您期望的实际有效负载:是否需要一个包含所有商店(ID)和该商店内产品的列表?
{
    "stores": {
        "storeId": "1234"
    },
    "products": [{
        "product": "phone",
        "price": "499.99"
    }]
}