[英]Mule if flowVar used in Dataweave Transformer payload converted to Map
I have an issue with a Mule Dataweave Transformer getting an error, this only occurs if :- 我遇到了一个Mule Dataweave Transformer出现错误的问题,这仅在以下情况下发生:-
An enricher is present wrapping a json:json-to-object-transformer 目前有一个richer包装了一个json:json-to-object-transformer
<enricher target="#[flowVars.myVar]" doc:name="Message Enricher"> <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/> </enricher>
A flowVar is involved in the Dataweave Transformer DataVave变压器中包含flowVar
The exception occurs on the 2nd dataweave :- 该异常发生在第二个dataweave上:
ERROR 2017-08-15 09:09:52,239 [amqpReceiver.02] org.mule.exception.RollbackMessagingExceptionStrategy:
********************************************************************************
Message : Exception while executing:
{bar=1, foo=0}
^
Unexpected character 'b' at index 1 (line 1, position 2), expected '"'
Payload : com.mulesoft.weave.reader.ByteArraySeekableStream@39e7a0d3
Element : /subscribe-to-changeFlow4/processors/4 @ voa-009-mule-authorisation-search-api:test3.xml:58 (Transform Message)
Element XML : <dw:transform-message doc:name="Transform Message">
<dw:input-payload mimeType="application/json"></dw:input-payload>
<dw:set-payload>%dw 1.0%output application/json---{field1: payload.foo,field2: payload.bar,field3: flowVars.myFlowVar}</dw:set-payload>
</dw:transform-message>
--------------------------------------------------------------------------------
Root Exception stack trace:
com.mulesoft.weave.reader.json.JsonReaderException: Unexpected character 'b' at index 1 (line 1, position 2), expected '"'
at com.mulesoft.weave.reader.json.JsonTokenizer.fail(JsonTokenizer.scala:193)
at com.mulesoft.weave.reader.json.JsonTokenizer.require(JsonTokenizer.scala:190)
at com.mulesoft.weave.reader.json.JsonTokenizer.readString(JsonTokenizer.scala:74)
at com.mulesoft.weave.reader.json.JsonTokenizer.readObjectMembers(JsonTokenizer.scala:146)
at com.mulesoft.weave.reader.json.JsonTokenizer.com$mulesoft$weave$reader$json$JsonTokenizer$$readObject(JsonTokenizer.scala:140)
at com.mulesoft.weave.reader.json.JsonTokenizer$$anonfun$readValue$1.apply$mcV$sp(JsonTokenizer.scala:37)
What happens is as soon as a flowVar is added into the 2nd data weave, then the payload seems to show as a Map rather than JSON. 发生的情况是,将flowVar添加到第二数据编织中后,有效负载似乎显示为Map而不是JSON。
Test Case 测试用例
<flow name="subscribe-to-changeFlow4" processingStrategy="synchronous">
<amqp:inbound-endpoint numberOfChannels="1" ref="authorisationChangeQueueDef4" responseTimeout="10000" doc:name="authorisation-change-consumer" />
<dw:transform-message doc:name="Transform Message">
<dw:set-payload>
<![CDATA[%dw 1.0
%output application/json
---
{
foo:0,
bar:1
}]]>
</dw:set-payload>
</dw:transform-message>
<enricher target="#[flowVars.myVar]" doc:name="Message Enricher">
<json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>
</enricher>
<expression-component doc:name="Expression">
<![CDATA[payload.seek(0);]]>
</expression-component>
<set-variable variableName="myFlowVar" value="1234" doc:name="Variable" />
<dw:transform-message doc:name="Transform Message">
<dw:input-payload mimeType="application/json"/>
<dw:set-payload>
<![CDATA[%dw 1.0
%output application/json
---
{
field1: payload.foo,
field2: payload.bar,
field3: flowVars.myFlowVar
}
]]>
</dw:set-payload>
</dw:transform-message>
<logger level="INFO" message="#[message.payloadAs(java.lang.String)]" doc:name="Logger all "/>
</flow>
This is probably a bug in Mule and you can raise it in Mule jira 这可能是Mule中的错误 ,您可以在Mule jira中提出
Which Mule runtime version are you using? 您正在使用哪个Mule运行时版本?
I tested locally and found this issue with Mule runtime 3.8.0 and Mule runtime 3.8.1 : 我在本地进行了测试, 发现 Mule 运行时3.8.0和Mule 运行时3.8.1 存在此问题 :
but worked fine with Mule runtime 3.8.2 and Mule 3.8.5 但可以在Mule 运行时3.8.2和Mule 3.8.5上正常工作
Also tested with Mule 3.7.3 locally and it worked fine as below:- 还对Mule 3.7.3进行了本地测试,它的工作原理如下:
I had similar problem, the DW processor messes up the payload. 我有类似的问题,DW处理器弄乱了有效负载。 So I added an Object-to-String before DW transformer and that worked fine. 因此,我在DW转换器之前添加了“对象到字符串”,并且效果很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.