现有的 json 负载格式不正确

问题描述

集成工作室 7.2.0 微积分器 1.1.0

我的 ESB 正在接收“格式错误的 json”,它可以被记录并作为响应返回。它被jsonformatter在线标记为有效的json。我怀疑json中的问题在于以下字符串数组: { "m_myObject":["{hit}SomeText{/hit}"] }

{hit} 由发件人系统自动添加。我尝试删除它,但应用于当前有效负载 ($) 的任何更改都将解决以下错误

[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

为了找到解决方案,我尝试使用 EnrichEditor、PayloadFactory 和 Javascript 编辑当前有效负载或将其删除。我还尝试更改 ContentType 并字符串化有效负载,但是一旦将更改应用于当前有效负载 ($),错误将再次返回。

任何有关如何解决问题的建议将不胜感激。如果您需要任何其他信息,请告诉我。谢谢!

解决方法

我使用 { "m_myObject":["{hit}SomeText{/hit}"] } 作为后端响应,但在构建消息时没有遇到任何问题。您可以通过在服务器中启用有线日志来检查后端系统接收到的有效负载。请参阅文档 [1]、[2] 以了解有关电线日志的更多信息。

如果您的负载格式不正确,您将无法从 MI 服务器修改负载。

[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