Few days ago we switched to the WSO2 Enterprise Integrator version 6.1.1-update24 and services that have input payload a JSON with array now are getting the following error:
TID: [-1234] [] [2018-10-22 15:45:11,954] ERROR {org.apache.synapse.commons.json.JsonUtil} - #toXml. Could not convert JSON Stream to XML. Cannot handle JSON input. Error>>> null {org.apache.synapse.commons.json.JsonUtil} TID: [-1234] [] [2018-10-22 15:45:11,954] ERROR {org.apache.synapse.mediators.transform.PayloadFactoryMediator} - Error converting JSON to XML, please check your JSON Path expressions return valid JSON: {org.apache.synapse.mediators.transform.PayloadFactoryMediator} TID: [-1234] [] [2018-10-22 15:45:11,954] ERROR {API_LOGGER.UtilityAPI} - Error converting JSON to XML, please check your JSON Path expressions return valid JSON: {API_LOGGER.UtilityAPI} TID: [-1234] [] [2018-10-22 15:45:11,974] ERROR {org.apache.synapse.mediators.builtin.LogMediator} - To: /utility/testjsonarray,MessageID: urn:uuid:7bebe318-ff20-4126-8c1b-99600b6c276e,Direction: request,sequence = genericAPIFault,error_message = Error converting JSON to XML, please check your JSON Path expressions return valid JSON: ,error_code = 0,error_detail = org.apache.synapse.SynapseException: Error converting JSON to XML, please check your JSON Path expressions return valid JSON: at org.apache.synapse.mediators.AbstractMediator.handleException(AbstractMediator.java:327) at org.apache.synapse.mediators.transform.PayloadFactoryMediator.replace(PayloadFactoryMediator.java:293) at org.apache.synapse.mediators.transform.PayloadFactoryMediator.regexTransform(PayloadFactoryMediator.java:212) at org.apache.synapse.mediators.transform.PayloadFactoryMediator.mediate(PayloadFactoryMediator.java:154) at org.apache.synapse.mediators.transform.PayloadFactoryMediator.mediate(PayloadFactoryMediator.java:104) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:108) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:70) at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158) at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:214) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:108) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:70) at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158) at org.apache.synapse.rest.Resource.process(Resource.java:351) at org.apache.synapse.rest.API.process(API.java:399) at org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.java:123) at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:101) at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:69) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:303) at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:92) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:331) at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:377) at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:149) at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748)
To reproduce this error, from the carbon console create a REST API with following APIresource:
<?xml version="1.0" encoding="UTF-8"?>
<api context="/utility" name="UtilityAPI" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="POST" url-mapping="/testjsonarray">
<inSequence>
<sequence key="inTestJsonArraySeq"/>
</inSequence>
<outSequence/>
<faultSequence/>
</resource>
</api>
then add the following inSequence:
<?xml version="1.0" encoding="UTF-8"?>
<sequence name="inTestJsonArraySeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
<log description="logInTest">
<property name="sequence" value="inTestJsonArraySeq"/>
</log>
<payloadFactory description="pfJsonArrary" media-type="xml">
<format>
<myPayload xmlns="">$1</myPayload>
</format>
<args>
<arg evaluator="json" expression="$.myArray"/>
</args>
</payloadFactory>
<respond description="respOut"/>
</sequence>
Call the REST API with the following JSON payload:
{
"myArray" : ["element1", "element2", "element3"]
}
NOTE1: With WSO2 Enterprise Integrator v6.1.1 (no update) we do not experience this error, the response from the endpoint for the above payload is as expected:
<myPayload>
<jsonElement>element1</jsonElement>
<jsonElement>element2</jsonElement>
<jsonElement>element3</jsonElement>
</myPayload>
Investigating the class that throws the error we noticed a version change for the synapse-commons library, from synapse-commons_2.1.7.wso2v15.jar (of WSO2EI v6.1.1) to synapse-commons_2.1.7.wso2v44.jar (of WSO2 v6.1.1-update24) under {WSO2EI_HOME}/wso2/components/plugins/. This could be a clue for you guys from WSO2.