简体   繁体   中英

Existing json payload is malformed

Integration Studio 7.2.0 Micro Integrator 1.1.0

my ESB is receiving "malformed json" which can be logged and returned as a response. It is marked as valid json by the jsonformatter online. I suspect that the problem in the json lies in the following array of strings: { "m_myObject":["{hit}SomeText{/hit}"] }

{hit} that is automatically added by the senders system. I tried removing it but any changes that are applied to the current payload ($) will resolve in the following error:

[2021-07-13 11:03:54,865]  INFO {org.apache.synapse.mediators.builtin.LogMediator} - To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:5f892cb8-9c88-499b-a941-e80ed5d6a4ae, Direction: request, MESSAGE = An unexpected error occured, message = Existing json payload is malformed. MessageID : urn:uuid:5f892cb8-9c88-499b-a941-e80ed5d6a4ae, message = 0, message = org.apache.synapse.SynapseException: Existing json payload is malformed. MessageID : urn:uuid:5f892cb8-9c88-499b-a941-e80ed5d6a4ae
        at org.apache.synapse.mediators.AbstractMediator.handleException(AbstractMediator.java:367)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:139)
        at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:260)
        at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.mediateFromContinuationStateStack(Axis2SynapseEnvironment.java:805)
        at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:303)
        at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:578)
        at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:195)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
        at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:284)
        at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.synapse.commons.SynapseCommonsException: Existing json payload is malformed. MessageID : urn:uuid:5f892cb8-9c88-499b-a941-e80ed5d6a4ae
        at org.apache.synapse.commons.json.JsonUtil.removeChildrenFromPayloadBody(JsonUtil.java:795)
        at org.apache.synapse.commons.json.JsonUtil.getNewJsonPayload(JsonUtil.java:769)
        at org.apache.synapse.commons.json.JsonUtil.getNewJsonPayload(JsonUtil.java:881)
        at org.apache.synapse.mediators.transform.PayloadFactoryMediator.mediate(PayloadFactoryMediator.java:184)
        at org.apache.synapse.mediators.transform.PayloadFactoryMediator.mediate(PayloadFactoryMediator.java:117)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109)
        ... 11 more
Caused by: java.lang.IllegalStateException: Expected attribute value
        at org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.consumeName(JsonXMLStreamReader.java:139)
        at org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.consume(JsonXMLStreamReader.java:153)
        at org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.consume(JsonXMLStreamReader.java:154)
        at org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.consume(JsonXMLStreamReader.java:184)
        at org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.consume(JsonXMLStreamReader.java:171)
        at org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.consume(JsonXMLStreamReader.java:154)
        at org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.consume(JsonXMLStreamReader.java:213)
        at org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.consume(JsonXMLStreamReader.java:154)
        at org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.consume(JsonXMLStreamReader.java:184)
        at org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.consume(JsonXMLStreamReader.java:154)
        at org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.consume(JsonXMLStreamReader.java:184)
        at org.apache.synapse.commons.staxon.core.base.AbstractXMLStreamReader.initialize(AbstractXMLStreamReader.java:243)
        at org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.<init>(JsonXMLStreamReader.java:88)
        at org.apache.synapse.commons.staxon.core.json.JsonXMLInputFactory.createXMLStreamReader(JsonXMLInputFactory.java:170)
        at org.apache.synapse.commons.json.JsonUtil.getReader(JsonUtil.java:353)
        at org.apache.synapse.commons.json.JsonDataSource.getReader(JsonDataSource.java:154)
        at org.apache.axiom.om.impl.llom.OMSourcedElementImpl.getDirectReader(OMSourcedElementImpl.java:224)
        at org.apache.axiom.om.impl.llom.OMSourcedElementImpl.forceExpand(OMSourcedElementImpl.java:253)
        at org.apache.axiom.om.impl.llom.OMSourcedElementImpl.getChildren(OMSourcedElementImpl.java:862)
        at org.apache.synapse.commons.json.JsonUtil.removeIndentations(JsonUtil.java:524)
        at org.apache.synapse.commons.json.JsonUtil.removeIndentations(JsonUtil.java:532)
        at org.apache.synapse.commons.json.JsonUtil.removeChildrenFromPayloadBody(JsonUtil.java:790)
        ... 16 more

In order to find a solution I tried editing the current payload or deleting it using EnrichEditor, PayloadFactory and Javascript. I also tried changing the ContentType and Stringifying the payload but once the changes are applied over current payload ($) the error is returned again.

Any suggestions on how to solve the problem would be really appreciated. If you need any additional information please let me know. Thanks!

I used the { "m_myObject":["{hit}SomeText{/hit}"] } as a backend respond, but did not face any issues while building the message. You can check the payload received by the backend system by enabling wire logs in the server. Refer to the documentation [1], [2] to learn more about the wire logs.

If your payload is malformed, you will not be able to modify the payload from the MI server.

[1]-https://ei.docs.wso2.com/en/7.2.0/micro-integrator/develop/using-wire-logs/

[2]-https://medium.com/api-integration-essentials/how-to-read-and-understand-wire-logs-in-wso2-products-c384af0b8ea5

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM