0

我创建了一个代理,其请求为:

<body>
 <p:GetPersonDataOperation xmlns:p="http://tempuri.org">
  <!--1 or more occurrences-->
  <xs:ID xmlns:xs="http://tempuri.org">1</xs:ID>
  <xs:ID xmlns:xs="http://tempuri.org">2</xs:ID>
 </p:GetPersonDataOperation>
</body>

现在在 InSequence 中,我将迭代器用作:

<sequence xmlns="http://ws.apache.org/ns/synapse" name="GetPersonDataOperationSeq">
   <iterate xmlns:xs="http://tempuri.org" xmlns:ns="http://org.apache.synapse/xsd" xmlns:p="http://tempuri.org" preservePayload="true" attachPath="//p:GetPersonData" expression="//p:GetPersonData/xs:ID" id="IteratorForPersonData">
      <target>
         <sequence>
            <property name="ID" expression="//xs:ID" scope="default" type="String"/>
            <filter xpath="count(//xs:ID)>0">
               <then>
                  <log level="custom">
                     <property name="sequence" value="with id"/>
                  </log>
                  <payloadFactory>
                     <format>
                        <p:GetPersonDataOperation>$1</p:GetPersonDataOperation>
                     </format>
                     <args>
                        <arg expression="get-property('ID')"/>
                     </args>
                  </payloadFactory>
                  <send>
                     <endpoint key="GetPersonDataEP"/>
                  </send>
               </then>
               <else/>
            </filter>
         </sequence>
      </target>
   </iterate>
</sequence>

当我用上述请求点击我的代理时,我能够获得输出,但不是两个 ID,而是 ID = 2。我想同时得到响应,即 ID=1 和 ID=2。我知道这可以使用 XSLT Mediator 来完成,但我对 XSLT 转换一无所知。如何通过使用 xslt 调解器合并 ID=1 和 2 的响应来创建自定义响应。我可以使用聚合调解器解决这个问题吗?非常需要帮助。在此先感谢

4

1 回答 1

0

您可以在输出序列中使用聚合中介来合并来自迭代中介的响应。另请参阅聚合器 EIP

您可以按顺序使用以下内容。

<outSequence>
         <aggregate>
            <completeCondition>
               <messageCount min="-1" max="-1" />
            </completeCondition>
            <onComplete xmlns:p="http://tempuri.org" expression="//p:GetPersonDataResponse">
               <log level="full" />
               <send />
            </onComplete>
         </aggregate>
</outSequence>

这篇博文有一个类似的例子。

于 2013-07-15T06:27:20.087 回答