Mule if flowVar used in Dataweave Transformer payload converted to Map -
i have issue mule dataweave transformer getting error, occurs if :-
an enricher present wrapping 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 object"/> </enricher>
a flowvar involved in dataweave transformer
the exception occurs on 2nd 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' @ 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' @ index 1 (line 1, position 2), expected '"' @ com.mulesoft.weave.reader.json.jsontokenizer.fail(jsontokenizer.scala:193) @ com.mulesoft.weave.reader.json.jsontokenizer.require(jsontokenizer.scala:190) @ com.mulesoft.weave.reader.json.jsontokenizer.readstring(jsontokenizer.scala:74) @ com.mulesoft.weave.reader.json.jsontokenizer.readobjectmembers(jsontokenizer.scala:146) @ com.mulesoft.weave.reader.json.jsontokenizer.com$mulesoft$weave$reader$json$jsontokenizer$$readobject(jsontokenizer.scala:140) @ com.mulesoft.weave.reader.json.jsontokenizer$$anonfun$readvalue$1.apply$mcv$sp(jsontokenizer.scala:37)
what happens flowvar added 2nd data weave, payload seems show map rather json.
- the enricher nested json-to-object-transformer required take payload , allow json accessed. if enricher removed works fine
- the seek(0) required reset stream after json-to-object-transformer answered in last question
- if flowvar removed 2nd dataweave works fine
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 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 "/> </flow>
this bug in mule , can raise in mule jira
which mule runtime version using?
i tested locally , found issue mule runtime 3.8.0 , mule runtime 3.8.1:
but worked fine mule runtime 3.8.2 , mule 3.8.5
tested mule 3.7.3 locally , worked fine below:-
Comments
Post a Comment