문제

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

올바른 솔루션이 없습니다

다른 팁

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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top