当前位置: 首页 > 知识库问答 >
问题:

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

公孙琛
2023-03-14

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

{“idNumber”:“8008185218088”,“lastName”:null}

然后调用initiate a clone mediator序列,它将这个有效负载转发到两个不同的RESTendpoint。来自endpoint的json响应是不同的:

endpoint1响应:

{“name”:“daniel”,“number”:“12345678”}

endpoint2响应:

{
   "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个答案

呼延升
2023-03-14

您将无法聚合这样的消息。一个解决方案是使用“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来构建响应消息。

 类似资料:
  • 我在MongoDB有一个收藏。模型是: 任何时候货币变化的官方汇率都会将文件记录在该集合中。 我得到了一个时间戳,我需要获取当时所有可用货币的汇率。因此,首先我需要过滤所有需要时间$lte的文档,然后我只需要获取那些具有最大时间戳的文档。每种货币。

  • 我有两个jms消费者,每个都在不同的流中。我想使用另一个流来聚合这两条消息的消息。并且还需要保留相关ID,因为我需要分割有效负载并发送回消息。 我尝试将分散收集与两个入站 VM 一起使用,但收到以下错误: 由以下原因导致:组织.xml.sax.SAXParse 异常:cvc-complex-type.2.4.a:发现以元素“vm:入站终结点”开头的无效内容。“{”http://www.muleso

  • 在我的用例中,最简单的集成组件安排是什么: 接收来自多个来源和多种格式的消息(所有消息都是JSON序列化对象)。 将消息存储在缓冲区中最多10秒(聚合) 通过不同的类属性getter(例如class1.someId(),class2.otherId(),...) 释放所有分组的消息并转换为新的聚合消息。 到目前为止(第1点和第2点),我正在使用聚合器,但不知道3)处的问题是否有现成的解决方案或者我

  • 我们有一个登录后显示的用户仪表板。仪表板由多个小部件组成。每个小部件从单独的restful服务中提取内容。例如:新闻/邮件/问题/警报。每个小部件在加载到页面上后调用服务。这样就有多个webservice调用。 有没有办法减少多次通话。 它的工作方式是当第一次加载页面时,服务应该在单个调用中返回所有小部件的聚合数据。 每个服务也应该独立可用,以便可以用于刷新单个小部件和其他系统集成。 注意:小部件

  • 我有一个用例,我必须合并来自2个表(位于不同的数据源中)的数据。考虑到每个表都有员工数据(名字、姓氏、phoneNumber)。对于每个员工,我必须合并来自两个表的phoneNumber数据,其他数据将与表1中的相同 如果表1和表2中都有员工数据,则电话号码数据将合并为逗号分隔的值,其他数据将来自表1 这些表每个表大约有40行缺少数据。接近5GB。在Java中实现这一点的最佳方法是什么?我担心的是

  • 我有以下方案的数据: 我想从这些数据中计算出几个聚合字段,并具有以下模式: 在RDD的快乐日子里,我可以使用,定义{ip-的映射 在Dataset/Dataframe聚合中不再可用,而是可以使用UDAF,不幸的是,从我使用UDAF的经验来看,它们是不可变的,这意味着它们不能使用(必须在每次映射更新时创建一个新实例)示例解释在这里 一方面,从技术上讲,我可以将数据集转换为RDD、聚合等,然后返回数据