如何解决现有的 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。