WSO2 - 转换和聚合来自多个端点的不同JSON数据

时间:2016-08-24 09:00:44

标签: json rest wso2 wso2esb

我在WSO2 Carbon(5.0)中创建了一个API,我将有效负载发布到:

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

然后我调用启动克隆中介序列,该序列将此有效负载转发到两个不同的REST端点。来自端点的json响应是不同的:

端点1响应:

{ "Name" : "Daniel", "Number" : "12345678" }

端点2响应:

{ "Name": "Bob", "Address": "200 Bob Street", "Code": "123" }

我想根据上述内容创建的API响应:

{
   "Endpoint 1 Response" : {
        "Name" : "Daniel",
        "Number" : "12345678"
   },

   "Endpoint 2 Response" : {
        "Name": "Bob",
        "Address": "200 Bob Street",
        "Code": "123"
   }
}

我需要配置outSequence上的哪些调解员才能实现此目的?我如何查询单个json响应字段并将它们组合成客户端的自定义格式化json消息?

我看过聚合调解员,但我不认为这对于格式不同的消息是正确的。

这是我的inSequence供参考:

   <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://192.168.1.1/api/service/person" format="rest"/>
                     </endpoint>
                  </send>
               </sequence>
            </target>
            <target>
               <sequence>
                  <send>
                     <endpoint>
                        <address uri="http://192.168.1.1/api2/query" format="rest"/>
                     </endpoint>
                  </send>
               </sequence>
            </target>
         </clone>
      </inSequence>

1 个答案:

答案 0 :(得分:2)

您将无法汇总此类邮件。解决方案是使用'call'介体,将第一个响应(或值)存储在属性中,然后调用第二个服务。

这样的事情:

<call>
   <endpoint>
       <address uri="http://192.168.1.1/api/service/person" format="rest"/>
   </endpoint>
</call>
<property name="Name1" expression="//Name" />
<property name="Number1" expression="//Number" />
<send>
   <endpoint>
       <address uri="http://192.168.1.1/api2/query" format="rest"/>
   </endpoint>
</send>
<outSequence>
-- build message using payloadfactory
</outSequence>

您可以在outSequence中使用payloadFactory来构建响应消息。