我创建了一个代理请求:
<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 mediator合并ID = 1和2的响应来创建自定义响应。我可以使用Aggregate Mediator解决此问题吗? 在这方面需要帮助。谢谢提前
答案 0 :(得分:0)
您可以在out序列中使用Aggregate mediator来合并来自iterate mediator的响应。请参阅Aggregator 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>
This blog post有一个类似的例子。