2
votes

I have a requirement to invoke a backend service endpoint which accepts requests of type application/json. It is a pass through API with no logic implemented before invocation. I have a request payload in JSON with 2000 lines for POST method.

Once, I invoke the API, it doesn't call the backend service but tries to convert payload from JSON to XML and then failed.

Is it the expected behavior of API Manager where it converts all incoming requests in JSON to XML during processing before invoking back-end service.

Also, after failure API is moving into suspended state.

Any suggestions would be helpful.

Error below.

TID: [-1234] [] [2018-02-13 07:25:30,999]  WARN {org.apache.synapse.endpoints.EndpointContext} -  Suspending endpoint : AnonymousEndpoint with address http://localhost:{uri.var.portnum}/savepolicy/1.0 - current suspend duration is : 30000ms - Next retry after : Tue Feb 13 07:26:00 EET 2018 {org.apache.synapse.endpoints.EndpointContext}
TID: [-1234] [] [2018-02-13 07:25:30,999]  INFO {org.apache.synapse.mediators.builtin.LogMediator} -  STATUS = Executing default 'fault' sequence, ERROR_CODE = 101507, ERROR_MESSAGE = Error in Sender {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1234] [] [2018-02-13 07:25:31,000] 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-02-13 07:25:31,000] ERROR {org.apache.synapse.transport.passthru.util.DeferredMessageBuilder} -  Error building message {org.apache.synapse.transport.passthru.util.DeferredMessageBuilder}
org.apache.axis2.AxisFault: Could not convert JSON Stream to XML. Cannot handle JSON input.
        at org.apache.synapse.commons.json.JsonUtil.toXml(JsonUtil.java:298)
        at org.apache.synapse.commons.json.JsonBuilder.processDocument(JsonBuilder.java:35)
        at org.apache.synapse.transport.passthru.util.DeferredMessageBuilder.getDocument(DeferredMessageBuilder.java:148)
        at org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUtils.java:136)
        at org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:99)
        at org.apache.synapse.mediators.AbstractListMediator.buildMessage(AbstractListMediator.java:140)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:83)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:59)
        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:97)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:59)
        at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
        at org.apache.synapse.mediators.MediatorFaultHandler.onFault(MediatorFaultHandler.java:95)
        at org.apache.synapse.FaultHandler.handleFault(FaultHandler.java:53)
        at org.apache.synapse.endpoints.AbstractEndpoint.invokeNextFaultHandler(AbstractEndpoint.java:691)
        at org.apache.synapse.endpoints.AbstractEndpoint.onFault(AbstractEndpoint.java:530)
        at org.apache.synapse.endpoints.HTTPEndpoint.onFault(HTTPEndpoint.java:66)
        at org.apache.synapse.FaultHandler.handleFault(FaultHandler.java:101)
        at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:285)
        at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:188)
        at org.apache.synapse.transport.passthru.TargetErrorHandler$1.run(TargetErrorHandler.java:139)
        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:745)
Caused by: javax.xml.stream.XMLStreamException
        at org.apache.synapse.commons.staxon.core.base.AbstractXMLStreamReader.initialize(AbstractXMLStreamReader.java:245)
        at org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.<init>(JsonXMLStreamReader.java:66)
        at org.apache.synapse.commons.staxon.core.json.JsonXMLInputFactory.createXMLStreamReader(JsonXMLInputFactory.java:165)
        at org.apache.synapse.commons.json.JsonUtil.getReader(JsonUtil.java:333)
        at org.apache.synapse.commons.json.JsonUtil.getReader(JsonUtil.java:315)
        at org.apache.synapse.commons.json.JsonUtil.toXml(JsonUtil.java:294)
        ... 25 more
1
No, you must be having some content aware mediator in the middle. Do you have any custom sequences attached to the API? - Bee
I don't have any custom sequences attached in the middle. API is just pass through with no logic at all. - AbhishekM
Please post the error logs. - Bee
I have added the error in the main query. - AbhishekM
Also, I have noticed that after enabling http headers and wire logging, JSON payload is getting trimmed before invocation of backend service and 'null' json is sent to backend service. - AbhishekM

1 Answers

0
votes

Can you try changing the default JSON builder and formatter pair in < APIM_HOME >/repository/conf/axis2/axis2.xml file to following:

<messageBuilder contentType="application/json" class="org.apache.axis2.json.JSONStreamBuilder>
<messageFormatter contentType="application/json" class="org.apache.axis2.json.JSONStreamFormatterā€/>

Restart the server after changing. https://docs.wso2.com/display/AM210/Transforming+API+Message+Payload#TransformingAPIMessagePayload-JSONmessagebuildersandformatters