Question

i m using the wso2ESB 4.8.0 and i followed the sample at this url:

https://docs.wso2.org/display/ESB480/Sample+62:+Routing+a+Message+to+a+Dynamic+List+of+Recipients+and+Aggregating+Responses

writing this proxy service:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="adminBroadcastEndpoint"
       transports="https,http"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <inSequence>
         <send>
            <endpoint>
               <recipientlist>
                  <endpoint>
                     <address uri="http://127.0.0.1:8080/RestService/rest/servizio/"/>
                  </endpoint>
                  <endpoint>
                     <address uri="http://127.0.0.1:8081/RestService/rest/servizio/"/>
                  </endpoint>
           </recipientlist>
        </endpoint>
         </send>
         <drop/>
      </inSequence>
      <outSequence>

         <payloadFactory media-type="xml">
            <format>
                <broadcast>
                $1
               </broadcast>
            </format>
            <args>
               <arg evaluator="xml" expression="$body/root"/>
            </args>
        </payloadFactory>

        <aggregate>
           <completeCondition>
               <messageCount/>
            </completeCondition>
           <onComplete xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" expression="/">
               <send/>
         </onComplete>
       </aggregate>

      </outSequence>
   </target>
   <description/>
</proxy>

in the recipient list there are two servers who answer with an xml string. The first server answer with

<root>
    <codice>0</codice>
    <messaggio>MESSAGE1</messaggio>
    <result><name>CorreggiPecJob1</name><group>POSTA1</group></result>
    <result><name>SchedulaIndiceJob1</name><group>INDICE1</group></result>
</root>

and the second server with:

 <root>
    <codice>0</codice>
    <messaggio>MESSAGE2</messaggio>
    <result><name>CorreggiPecJob2</name><group>POSTA2</group></result>
    <result><name>SchedulaIndiceJob2</name><group>INDICE2</group></result>
</root>

After the aggregate mediator i should expect a result with all those 2 message merged... but in the response from the proxy service i get just the second server answer or the first one randomly. If i put a log mediator suddenly after the onComplete tag hawever i the esb prints the whole merged message with the two response, but it seems that on the send mediator something goes lost. Why does this happen?

Another question is: why xpath expressions like

$body/broadcast//result don't work rising this exception?

2014-03-02 17:37:32,021] ERROR - AggregateMediator Error evaluating expression:  $body/broadcast//result
org.apache.synapse.SynapseException: Could not find matching elements to aggregate.

I realize that if i define a namespace and a prfix to append in the payloadfactory like:

<payloadFactory xmlns:m0="my.namespace" media-type="xml">
            <m0:format>
                <m0:broadcast>
                $1
               </m0:broadcast>
            </m0:format>
            <args>
               <arg evaluator="xml" expression="$body/root"/>
            </args>
 </payloadFactory>

the expression: $body/m0:broadcast work fine... so is it the namespace definition mandatory?

Is it there anything i'm missing? thanks

No correct solution

OTHER TIPS

If the XML elements are in namespaces, than you're XPath must either define and use namespace prefixes, or specify any namespace in the path steps, like this:

$body/*:broadcast

i found the answer here: wso2 ESB : Split / Gather Pattern - Single Response

i solved using the enrich mediator. But i think that the aggregate mediator has not a really correct behaviour... maybe should be checked.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top