使用聚合中介合并 xml 个文件
Merge xml files using Aggregate mediator
我们将收到大量小 xml 文件,我们希望在处理之前将所有这些文件合并为一个 xml 文件。
我们尝试使用聚合中介来做到这一点,但它不起作用,因为我们没有使用迭代或克隆中介。
这是一个使用代理轮询目录的示例。当代理消费 3 条消息时,聚合器正确合并消息,但我们永远不会进入 onComplete。日志消息 "inside onComplete" 未出现且序列 "TestAggregateSend" 未执行。
<proxy name="TestAggregateProxyService" startOnLoad="false" transports="https http vfs" xmlns="http://ws.apache.org/ns/synapse">
<target>
<inSequence>
<log level="full">
<property name="DEBUG" value="start inSequence"/>
</log>
<aggregate id="sa">
<correlateOn expression="//ABC"/>
<completeCondition timeout="60">
<messageCount max="3" min="-1"/>
</completeCondition>
<onComplete expression="//ABC" sequence="TestAggregateSend">
<log level="full">
<property name="DEBUG" value="inside onComplete"/>
</log>
</onComplete>
</aggregate>
<log level="full">
<property name="DEBUG" value="end inSequence"/>
</log>
</inSequence>
<outSequence>
<log level="full">
<property name="DEBUG" value="inside outSequence"/>
</log>
<sequence key="TestAggregateSend"/>
</outSequence>
<faultSequence/>
</target>
<parameter name="transport.PollInterval">5</parameter>
<parameter name="transport.vfs.FileURI">file:///var/wso2/test/in</parameter>
<parameter name="transport.vfs.ContentType">text/xml;charset=UTF-8</parameter>
<parameter name="transport.vfs.FileProcessInterval">1000</parameter>
<parameter name="transport.vfs.FileNamePattern">.*.xml</parameter>
根据日志,合并有效,但无法在 onCompete 中执行任何操作
DEBUG {org.apache.synapse.mediators.eip.aggregator.AggregateMediator}
- Merged result :
<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body>
<ABC>
<DEF>1</DEF>
<GHI>2</GHI>
</ABC>
<ABC>
<PQR>5</PQR>
<STU>6</STU></ABC>
<ABC>
<JKL>3</JKL>
<MNO>4</MNO></ABC>
是否可以使用聚合中介合并多个文件?还有其他方法可以使用 WSO ESB 合并 xml 文件吗?
在 EI 6.1.1 中,当 correlateOn 不为空时聚合中介不起作用。问题已在 v2.1.7-wso2v16
中修复
我们将收到大量小 xml 文件,我们希望在处理之前将所有这些文件合并为一个 xml 文件。
我们尝试使用聚合中介来做到这一点,但它不起作用,因为我们没有使用迭代或克隆中介。
这是一个使用代理轮询目录的示例。当代理消费 3 条消息时,聚合器正确合并消息,但我们永远不会进入 onComplete。日志消息 "inside onComplete" 未出现且序列 "TestAggregateSend" 未执行。
<proxy name="TestAggregateProxyService" startOnLoad="false" transports="https http vfs" xmlns="http://ws.apache.org/ns/synapse">
<target>
<inSequence>
<log level="full">
<property name="DEBUG" value="start inSequence"/>
</log>
<aggregate id="sa">
<correlateOn expression="//ABC"/>
<completeCondition timeout="60">
<messageCount max="3" min="-1"/>
</completeCondition>
<onComplete expression="//ABC" sequence="TestAggregateSend">
<log level="full">
<property name="DEBUG" value="inside onComplete"/>
</log>
</onComplete>
</aggregate>
<log level="full">
<property name="DEBUG" value="end inSequence"/>
</log>
</inSequence>
<outSequence>
<log level="full">
<property name="DEBUG" value="inside outSequence"/>
</log>
<sequence key="TestAggregateSend"/>
</outSequence>
<faultSequence/>
</target>
<parameter name="transport.PollInterval">5</parameter>
<parameter name="transport.vfs.FileURI">file:///var/wso2/test/in</parameter>
<parameter name="transport.vfs.ContentType">text/xml;charset=UTF-8</parameter>
<parameter name="transport.vfs.FileProcessInterval">1000</parameter>
<parameter name="transport.vfs.FileNamePattern">.*.xml</parameter>
根据日志,合并有效,但无法在 onCompete 中执行任何操作
DEBUG {org.apache.synapse.mediators.eip.aggregator.AggregateMediator} - Merged result :
<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body>
<ABC>
<DEF>1</DEF>
<GHI>2</GHI>
</ABC>
<ABC>
<PQR>5</PQR>
<STU>6</STU></ABC>
<ABC>
<JKL>3</JKL>
<MNO>4</MNO></ABC>
是否可以使用聚合中介合并多个文件?还有其他方法可以使用 WSO ESB 合并 xml 文件吗?
在 EI 6.1.1 中,当 correlateOn 不为空时聚合中介不起作用。问题已在 v2.1.7-wso2v16
中修复