JsonペイロードとJson flowVarsがあります。私は、製品のJSON flowVarで店舗JSONペイロード内の製品の配列を移入していますが、私は次のエラー見ている:Dataweaveで複数のJson入力を使用すると、予期しない文字エラーが発生する
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)
ロガーは、ペイロードとflowVarはJSON形式であることを示していますが、エラーがそれのように見えるがこれをハッシュマップとして読み取っています。エラーの原因は何ですか?
テストURL:
http://localhost:8083/api/test
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="{ "products": [{ "product": "phone", "price": "499.99" }]}" mimeType="application/json" doc:name="Variable"/>
<set-payload value="[{ "stores": { "storeId": "1234" } }]" 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>
店舗JSONペイロード:
{
"stores": {
"storeId": "1234"
},
"products": []
}
の製品
{
"products": [{
"product": "phone",
"price": "499.99"
}]
}
期待される結果
{
"stores": {
"storeId": "1234"
},
"products": [{
"product": "phone",
"price": "499.99"
}]
}
おかげ
あなたは私に期待されるJSON応答を送ることができますか?上記の「JSONペイロードを格納する」と「Products json」が入力ペイロードであると仮定します。 –
MuleがあなたのJsonオブジェクトを最初に文字列として格納すると、あなたの 'payload'は現在反復可能ではありません。 'for-each'の前にブレークポイントを置いて(おそらく' 'JSON to Object'"変圧器に)、ステップスルーすると、あなたのループは決して解雇されないことがわかります。コンソールに次のメッセージも表示されます。 'org.mule.routing.ExpressionSplitter:Splitterは結果を返しませんでした。これが期待されない場合は、スプリット式を確認してください。この場合、ペイロードを最初に反復可能なものに変換します。 –
これは、 '' payload.stores' "が" null "として返されるため、値がない場合(少なくとも' for-each'が使用できるものでない場合)、ループに入ることはありません。その文を 'payload [0] .stores'に変更して、オブジェクトの最初の要素を明示的に呼び出す必要があります。 –