WSO2 ESB数组缺少单个元素json到json转换括号

时间:2016-07-05 11:58:26

标签: json wso2esb

我正在使用wso2 esb 4.9并使用payloadFactory元素创建一个代理并用REST调用它来启动我的BPMN进程,但问题是esb无法转换单个元素的json数组,而esb会丢弃json数组的括号。这是我的代理人:

<?xml version="1.0" encoding="UTF-8"?>


   <proxy xmlns="http://ws.apache.org/ns/synapse"
       name="InformationIncome"
       transports="https,http"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <inSequence>
         <log level="full"/>
         <property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
         <property name="OUT_ONLY" value="true"/>
         <payloadFactory media-type="json">
            <format>
                {
               "processDefinitionId":"myProcess:6:25188",
               "variables": [
                  {
                    "name":"text",
                    "value":"$1"
                  }
               ]
            } 
            </format>
            <args>
               <arg evaluator="json" expression="$.text"/>
            </args>
         </payloadFactory>
         <header name="Authorization"
                 scope="transport"
                 expression="fn:concat('Basic ', base64Encode('admin:admin'))"/>
         <log level="full"/>
         <store messageStore="InformationIncomeMS"/>
      </inSequence>
   </target>
   <description/>
</proxy>

以下是来自soapUI的请求的内容:

{
    "text" : "Hello"
}

我发现我的json在payloadFactory之后就变成了这样:

{
    "processDefinitionId":"myProcess:6:25188",
    "variables": {
        {
            "name":"text",
            "value":"Hello"
        }
    }  
}
似乎esb json转换器使用单个元素删除数组的括号。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我使用Postman测试了以上场景,并且它正常工作。请按以下步骤找到步骤;

  • 添加代理并删除邮件存储。 (因为向邮件存储添加空消息会产生以下错误)

    [2016-07-11 13:46:53,291]错误 - NativeWorkerPool未捕获异常 java.lang.Error:错误:无法匹配输入 at org.apache.synapse.commons.staxon.core.json.stream.impl.JsonScanner.zzScanError(JsonScanner.java:530) 在org.apache.synapse.commons.staxon.core.json.stream.impl.JsonScanner.yylex(JsonScanner.java:941) 在org.apache.synapse.commons.staxon.core.json.stream.impl.JsonScanner.nextSymbol(JsonScanner.java:310) 在org.apache.synapse.commons.staxon.core.json.stream.impl.JsonStreamSourceImpl.next(JsonStreamSourceImpl.java:149) 在org.apache.synapse.commons.staxon.core.json.stream.impl.JsonStreamSourceImpl.peek(JsonStreamSourceImpl.java:272) 在org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.consume(JsonXMLStreamReader.java:129) 在org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.consume(JsonXMLStreamReader.java:132) at org.apache.synapse.commons.staxon.core.base.AbstractXMLStreamReader.hasNext(AbstractXMLStreamReader.java:446) at org.apache.synapse.commons.staxon.core.base.AbstractXMLStreamReader.next(AbstractXMLStreamReader.java:456) 在javax.xml.stream.util.StreamReaderDelegate.next(StreamReaderDelegate.java:88) 在org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:681) 在org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:214) at org.apache.axiom.om.impl.llom.OMElementImpl.getNextOMSibling(OMElementImpl.java:336) 在org.apache.axiom.om.impl.OMNavigator._getFirstChild(OMNavigator.java:199) 在org.apache.axiom.om.impl.OMNavigator.updateNextNode(OMNavigator.java:140) at org.apache.axiom.om.impl.OMNavigator.getNext(OMNavigator.java:112) 在org.apache.axiom.om.impl.SwitchingWrapper.updateNextNode(SwitchingWrapper.java:1113) 在org.apache.axiom.om.impl.SwitchingWrapper。(SwitchingWrapper.java:235) 在org.apache.axiom.om.impl.OMStAXWrapper。(OMStAXWrapper.java:74) 在org.apache.axiom.om.impl.llom.OMStAXWrapper。(OMStAXWrapper.java:52) 在org.apache.axiom.om.impl.llom.OMContainerHelper.getXMLStreamReader(OMContainerHelper.java:51) 在org.apache.axiom.om.impl.llom.OMElementImpl.getXMLStreamReader(OMElementImpl.java

  • 使用Postman并使用“POST”命令调用代理服务

将json内容添加到正文

Snapshot of POSTMAN

  • 发送。 ESB将使用括号正确打印消息。

答案 1 :(得分:1)

DilshaniS说: 看起来这是WSO2 ESB 4.9.0中的一个错误,并报告了一个jira this link