Enrich Mediatior 抛出 json 格式错误

Enrich Mediatior throwing json malformed Error

WSO2 中的 Enrich mediator 总是失败,json 来自突触公地 JSONUtil class 的畸形预期 JSON : {"Topic":"demo","MessageKey":"demo","Header":{"continuum.message.dc.timestamp":["2020-08-06 00:10:14.866313839 +0000 UTC"],"continuum.message.transaction.id":["34ee58ae-288b-4338-bcbc-8971beadebbb"],"continuum.message.source":["demo"],"continuum.message.target":["demo"]},"Message":[{"backupServerName":"","billableSpace":"","client":{"id":1},"cpuSpeed":"","deviceID":"123","deviceName":"MSMA","deviceType":"backups","failedBackupCount":0,"friendlyName":"Ubuntu Server","installationDate":null,"ipAddress":"","isActive":false,"lastSuccessfulBackup":"2018-12-05T05:59:28.83Z","localHardDrives":"","manufacturer":"","modelNumber":"","numberOfProcessors":0,"osName":"","osVersion":"","partnerID":123,"physicalMemory":"","protectedDeviceName":"","psaRoleType":"","purchaseDate":null,"serialNumber":"","successfulBackupCount":0},{"backupServerName":"","billableSpace":"","client":{"id":123},"cpuSpeed":"","deviceID":"123","deviceName":"MSMA","deviceType":"backups","failedBackupCount":0,"friendlyName":"Ubuntu Server","installationDate":null,"ipAddress":"","isActive":false,"lastSuccessfulBackup":"2018-12-05T05:59:28.83Z","localHardDrives":"","manufacturer":"","modelNumber":"","numberOfProcessors":0,"osName":"","osVersion":"","partnerID":123,"physicalMemory":"","protectedDeviceName":"","psaRoleType":"","purchaseDate":null,"serialNumber":"","successfulBackupCount":0},{"backupServerName":"","billableSpace":"","client":{"id":123},"cpuSpeed":"","deviceID":"123","deviceName":"MSMA","deviceType":"backups","failedBackupCount":0,"friendlyName":"Ubuntu Server","installationDate":null,"ipAddress":"","isActive":false,"lastSuccessfulBackup":"2018-12-05T05:59:28.83Z","localHardDrives":"","manufacturer":"","modelNumber":"","numberOfProcessors":0,"osName":"","osVersion":"","partnerID":123,"physicalMemory":"","protectedDeviceName":"","psaRoleType":"","purchaseDate":null,"serialNumber":"","successfulBackupCount":0}]}

按顺序丰富代码:

<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
<enrich>
    <source clone="false" property="OriginalMessage" type="property"/>
    <target type="body"/>
</enrich>

堆栈跟踪:[2020-08-06 20:12:56,974] [-1234] [] [Thread-35] ERROR {org.apache.synapse.mediators.filters.FilterMediator} - Existing json payload is malformed. MessageID : ID:RMM-LT-998-65522-1596608596560-4:9:1:1:3 org.apache.synapse.commons.SynapseCommonsException: Existing json payload is malformed. MessageID : ID:RMM-LT-998-65522-1596608596560-4:9:1:1:3 at org.apache.synapse.commons.json.JsonUtil.removeChildrenFromPayloadBody(JsonUtil.java:701) at org.apache.synapse.commons.json.JsonUtil.getNewJsonPayload(JsonUtil.java:675) at org.apache.synapse.commons.json.JsonUtil.getNewJsonPayload(JsonUtil.java:787) at org.apache.synapse.mediators.elementary.Target.insertJson(Target.java:399) at org.apache.synapse.mediators.elementary.EnrichMediator.mediate(EnrichMediator.java:148) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71) at org.apache.synapse.mediators.filters.FilterMediator.mediate(FilterMediator.java:169) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71) 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:109) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71) at org.apache.synapse.config.xml.AnonymousListMediator.mediate(AnonymousListMediator.java:37) at org.apache.synapse.config.xml.SwitchCase.mediate(SwitchCase.java:69) at org.apache.synapse.mediators.filters.SwitchMediator.mediate(SwitchMediator.java:134) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71) 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:109) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71) at org.apache.synapse.config.xml.AnonymousListMediator.mediate(AnonymousListMediator.java:37) at org.apache.synapse.config.xml.SwitchCase.mediate(SwitchCase.java:69) at org.apache.synapse.mediators.filters.SwitchMediator.mediate(SwitchMediator.java:134) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71) at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectInbound(Axis2SynapseEnvironment.java:467) at org.wso2.carbon.inbound.endpoint.protocol.jms.JMSInjectHandler.invoke(JMSInjectHandler.java:255) at org.wso2.carbon.inbound.endpoint.protocol.jms.JMSPollingConsumer.poll(JMSPollingConsumer.java:297) at org.wso2.carbon.inbound.endpoint.protocol.jms.JMSPollingConsumer.execute(JMSPollingConsumer.java:204) at org.wso2.carbon.inbound.endpoint.protocol.jms.JMSTask.taskExecute(JMSTask.java:47) at org.wso2.carbon.inbound.endpoint.common.InboundRunner.run(InboundRunner.java:108) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NullPointerException 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:458) at org.apache.synapse.commons.json.JsonUtil.removeIndentations(JsonUtil.java:466) at org.apache.synapse.commons.json.JsonUtil.removeIndentations(JsonUtil.java:466) at org.apache.synapse.commons.json.JsonUtil.removeChildrenFromPayloadBody(JsonUtil.java:696) ... 35 more

我已使用以下代理服务尝试重现您观察到的问题。在这里,我将您在描述中附加的 JSON 有效载荷发送到代理服务。然后 JSON 有效负载存储在 属性 OriginalMessage 中。然后调用后端。在使用 enrich mediator 调用后端后,原始有效负载将被丰富到正文中。

   <?xml version="1.0" encoding="UTF-8"?>
    <proxy xmlns="http://ws.apache.org/ns/synapse"
           name="sampleProxy"
           startOnLoad="true"
           statistics="disable"
           trace="disable"
           transports="http,https">
       <target>
          <inSequence>
             <log>
                <property expression="json-eval($)" name="OriginalMessage"/>
             </log>
             <property expression="json-eval($)" name="OriginalMessage"/>
             <call>
               <endpoint>
                 <address uri="http://localhost:8280/services/file_upload"/>
               </endpoint>
              </call>
             <log level="full"/>
             <property name="messageType"
                       scope="axis2"
                       type="STRING"
                       value="application/json"/>
             <enrich>
                <source clone="false" property="OriginalMessage" type="property"/>
                <target type="body"/>
             </enrich>
             <respond/>
          </inSequence>
       </target>
       <description/>
    </proxy>
                            

在这里我没有观察到这个调解有任何问题。这按预期工作。

  • 您使用的 EI 版本是多少?
  • 您是如何将 JSON 有效负载存储到 属性 中介的?