0
votes

i have a simple flow like this--

<sub-flow name="myFlow">
     <set-payload value="{&quot;p_SuccessInd&quot;:&quot;Y&quot;}" doc:name="Set Payload"/>
        <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>
        <logger message="&gt;&gt;&gt;&gt;&gt;&gt;&gt;My payload is&gt;&gt;&gt;&gt;#[payload]" level="INFO" doc:name="Logger"/>
    </sub-flow>

when i run this i get an exception -- Message               : Failed to transform from "json" to "java.util.HashMap" Exception stack is: 1. Can not instantiate value of type [map type; class java.util.HashMap, [simple type, class java.lang.Object] -> [simple type, class java.lang.Object]] from JSON String; no single-String constructor/factory method (org.codehaus.jackson.map.JsonMappingException)   org.codehaus.jackson.map.deser.std.StdValueInstantiator:379 (null)

if i run it without the transformer the payload is printed as -- {"p_SuccessInd":"Y"}

can someone help me to figure what am i doing wrong.

2
<http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/> <logger level="INFO" doc:name="Logger"/> <set-payload value="{&quot;p_SuccessInd&quot;:&quot;Y&quot;}" doc:name="Set Payload"/> <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/> <logger message="&gt;&gt;&gt;&gt;&gt;&gt;&gt;My payload is&gt;&gt;&gt;&gt;#[payload]" level="INFO" doc:name="Logger"/> Above code from your question is perfectly working for me - Naveen Raj
I ran it in a sub flow as well and I get this printed {p_SuccessInd=Y} when I give #[payload] in logger - Naveen Raj

2 Answers

0
votes

This is quite expected since your JSON is {"p_SuccessInd":"Y"}
Try using <json:json-to-object-transformer returnClass="java.util.Map" doc:name="JSON to Object"/> or <json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object" /> to extract the value of p_SuccessInd and print it in log...
after the extraction use <json:object-to-json-transformer doc:name="Object to JSON" /> to transform it back to json..
Then you can use logger to print #[message.payload] which will rint your JSON payload in log
Check the following reference :-

<sub-flow name="myFlow">
   <set-payload value="{&quot;p_SuccessInd&quot;:&quot;Y&quot;}" doc:name="Set Payload"/>
   <json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object" />
   <logger message="Extracted Value :- #[message.payload.p_SuccessInd]" level="INFO" doc:name="Logger"/>
   <json:object-to-json-transformer doc:name="Object to JSON" />
   <logger message="My payload is :-#[message.payload]" level="INFO" doc:name="Logger"/>
 </sub-flow>
-2
votes

Pleas find the mule flow below:

<flow name="test">
        <http:listener config-ref="HTTP_Listener_Configuration" doc:name="HTTP" path="/test" />  
<set-payload value="{&quot;p_SuccessInd&quot;:&quot;Y&quot;}" doc:name="Set Payload"/>
        <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>
        <logger message="&gt;&gt;&gt;&gt;&gt;&gt;&gt;My payload is&gt;&gt;&gt;&gt;#[payload]" level="INFO" doc:name="Logger"/>
 </flow>