我一直在忙着重构我的序列和代理(参见WSO2 Aggregate Mediator premature/incomplete/unknown completion)。在按照之前的问题让它工作之后,它产生了一些不必要的行为。我只更改了序列的名称,没有别的。
现在我的第二个聚合器之后:
<sequence xmlns="http://ws.apache.org/ns/synapse">
<log level="custom">
<property name="pocSearchRsHandlerSeq reached" value="++++++++++++++=========Aggregating now========+++++++++++++++++=="></property>
</log>
<aggregate id="iT">
<completeCondition>
<messageCount min="-1" max="-1"></messageCount>
</completeCondition>
<onComplete xmlns:ns="http://org.apache.synapse/xsd" expression="//productDetails">
<log level="custom" separator=",">
<property name="::::" value="======================= Formatting the Aggregated Responses. ==============="></property>
</log>
<log level="full"></log>
</onComplete>
</aggregate>
<aggregate>
<completeCondition>
<messageCount min="-1" max="-1"></messageCount>
</completeCondition>
<onComplete xmlns:ns="http://org.apache.synapse/xsd" expression="//productDetails">
<payloadFactory media-type="xml">
<format>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:prod="http://za.co.pepkor/product_service/">
<soapenv:Body>
<prod:productSearchResp> $1 </prod:productSearchResp>
</soapenv:Body>
</soapenv:Envelope>
</format>
<args>
<arg expression="//productDetails" evaluator="xml"></arg>
</args>
</payloadFactory>
<respond></respond>
</onComplete>
</aggregate>
</sequence>
现在,它正在丢弃(或遗忘)聚合消息(例如之前看起来像这样):
?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<productDetails>
<productID>1452168</productID>
<productName>PUMPS</productName>
<productSize>7</productSize>
<productColour>ORANGE</productColour>
<productType>SHOE</productType>
<sourceID>SHC</sourceID>
</productDetails>
<productDetails>
<productID>1124596</productID>
<productName>REEBOK_SNEAKERS</productName>
<productSize>7</productSize>
<productColour>BROWN</productColour>
<productType>SHOES</productType>
<sourceID>SHC</sourceID>
</productDetails>
<productDetails>
<productID>1123456</productID>
<productName>NIKE_SHIRTS</productName>
<productSize>7</productSize>
<productColour>RED</productColour>
<productType>SHIRT</productType>
<sourceID>SHC</sourceID>
</productDetails>
</soapenv:Body>
</soapenv:Envelope>
然后将其发送到第二次聚合:
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body></soapenv:Body></soapenv:Envelope>
由于某种原因,我将很多这些空消息带回了我的代理outSequence:
TID: [0] [ESB] [2015-02-25 16:22:01,023] DEBUG {org.apache.synapse.core.axis2.SynapseCallbackReceiver} - Synapse received an asynchronous response message {org.apache.synapse.core.axis2.SynapseCallbackReceiver}
TID: [0] [ESB] [2015-02-25 16:22:01,023] DEBUG {org.apache.synapse.mediators.base.SequenceMediator} - Start : Sequence <ackServiceSearchSeqRs> {org.apache.synapse.mediators.base.SequenceMediator}
TID: [0] [ESB] [2015-02-25 16:22:01,023] DEBUG {org.apache.synapse.core.axis2.SynapseCallbackReceiver} - Received To: null {org.apache.synapse.core.axis2.SynapseCallbackReceiver}
TID: [0] [ESB] [2015-02-25 16:22:01,024] DEBUG {org.apache.synapse.mediators.base.SequenceMediator} - Sequence <SequenceMediator> :: mediate() {org.apache.synapse.mediators.base.SequenceMediator}
TID: [0] [ESB] [2015-02-25 16:22:01,024] DEBUG {org.apache.synapse.core.axis2.SynapseCallbackReceiver} - SOAPAction: {org.apache.synapse.core.axis2.SynapseCallbackReceiver}
TID: [0] [ESB] [2015-02-25 16:22:01,024] DEBUG {org.apache.synapse.mediators.base.SequenceMediator} - Mediation started from mediator position : 0 {org.apache.synapse.mediators.base.SequenceMediator}
TID: [0] [ESB] [2015-02-25 16:22:01,024] DEBUG {org.apache.synapse.core.axis2.SynapseCallbackReceiver} - WSA-Action: {org.apache.synapse.core.axis2.SynapseCallbackReceiver}
TID: [0] [ESB] [2015-02-25 16:22:01,025] DEBUG {org.apache.synapse.core.axis2.SynapseCallbackReceiver} - Body :
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body></soapenv:Body></soapenv:Envelope> {org.apache.synapse.core.axis2.SynapseCallbackReceiver}
每次至少2次。我已经禁用了continueParent。
修改
查看WSO2 ESB : Aggregate node droppping message after aggregation了解更多背景信息
答案 0 :(得分:0)
在<aggregate id="iT">
的onComplete中,您将获得聚合
product详细信息如下
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:prod="http://za.co.pepkor/product_service/">
<soapenv:Body>
<productDetails>
----
</productDetails>
<productDetails>
----
</productDetails>
</soapenv:Body>
</soapenv:Envelope>
因此您可以将根元素<prod:productSearchResp>
添加到具有有效负载工厂介体的soap主体。
<payloadFactory media-type="xml">
<format>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:prod="http://za.co.pepkor/product_service/">
<soapenv:Body>
<prod:productSearchResp> $1 </prod:productSearchResp>
</soapenv:Body>
</soapenv:Envelope>
</format>
<args>
<arg xmlns:ns="http://org.apache.synapse/xsd" evaluator="xml" expression="//productDetails"/>
</args>
</payloadFactory>
不需要第二个聚合并且在其中有负载工厂中介。