WSO2 ESB - 将克隆介体与REST端点一起使用时,解析JSON时出错

时间:2016-08-23 07:54:17

标签: json rest wso2 wso2esb

我有两个REST服务返回一些简单的JSON。我使用克隆中介来调用每个服务,然后将聚合的消息返回给客户端。

问题在于,每当我调用API时,我在ESB输出上都会出现以下错误:

ERROR - OMSourcedElementImpl Could not get parser from data source for element jsonObject

我已经单独测试了相同的REST服务,没有克隆介体,并且它没有问题。

以下是API序列:

<api xmlns="http://ws.apache.org/ns/synapse" name="PolicyQuery" context="/policy/query">
   <resource methods="POST">
      <inSequence>
         <property name="ROOT" scope="default">
            <root:rootelement xmlns:root="www.wso2esb.com"/>
         </property>
         <log level="full"/>
         <clone continueParent="true" id="test" sequential="true">
            <target>
               <sequence>
                  <send>
                     <endpoint>
                        <address uri="http://ip.jsontest.com/" format="rest"/>
                     </endpoint>
                  </send>
               </sequence>
            </target>
            <target>
               <sequence>
                  <send>
                     <endpoint>
                        <address uri="http://ip.jsontest.com/" format="rest"/>
                     </endpoint>
                  </send>
               </sequence>
            </target>
         </clone>
      </inSequence>
      <outSequence>
         <log level="full"/>
         <aggregate>
            <completeCondition>
               <messageCount min="-1" max="-1"/>
            </completeCondition>
            <onComplete expression="//return" enclosingElementProperty="ROOT">
               <property name="messageType" value="application/json" scope="axis2" type="STRING"/>
               <send/>
            </onComplete>
         </aggregate>
      </outSequence>
   </resource>
</api>

我做错了吗?我使用的是WSO2 5.0.0(我还用4.9.0测试过,我也遇到了同样的问题)。

我发送的请求有效负载是:

{ 
    IdNumber : "8008185315088", 
    LastName : null
}

1 个答案:

答案 0 :(得分:1)

在更新了这样的序列后,这对我来说很好。你能试试吗?

  <outSequence>
     <log level="full"/>
     <aggregate>
        <completeCondition>
           <messageCount min="2" max="2"/>
        </completeCondition>
        <onComplete expression="//ip" enclosingElementProperty="ROOT">
           <property name="messageType" value="application/json" scope="axis2" type="STRING"/>
           <send/>
        </onComplete>
     </aggregate>
  </outSequence>

注意:如果您获得的json格式错误,则可能会出现错误。但是有了这个样本,我没有看到这样的问题。

修改

问题在于json格式。它应该像这样修复。

{ 
    "IdNumber" : "8008185315088", 
    "LastName" : null
}