0
votes

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.

1

1 Answers

0
votes

Your aim is to convert json array to xml..so you should use property mediator for that For Example,

  <property name="messageType" scope="axis2" type="STRING" value="application/xml"/>

Hope this help.