繁体   English   中英

WSO2 ESB聚合介体无法正常工作

[英]WSO2 ESB aggregate mediator not working properly

即时通讯使用wso2ESB 4.8.0,我在此网址中跟踪了示例:

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

编写此代理服务:

<?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>

在收件人列表中,有两个服务器使用xml字符串进行应答。 第一个服务器回答

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

第二台服务器具有:

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

在聚合介体之后,我应该期望合并所有这2条消息的结果...但是在代理服务的响应中,我仅获得第二个服务器答复或第一个服务器答复。 如果我在onComplete标记之后突然放了一个日志中介器,那么esb会打印出带有两个响应的整个合并的消息,但是似乎在发送中介器上有些东西丢失了。 为什么会这样?

另一个问题是:为什么xpath表达式像

$ body / broadcast // result不能正常运行此异常吗?

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.

我意识到,如果我定义一个名称空间和一个prfix附加到payloadfactory中,例如:

<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>

表达式:$ body / m0:broadcast可以正常工作...那么名称空间定义是否是强制性的?

有什么我想念的吗? 谢谢

如果XML元素位于名称空间中,那么您XPath必须定义和使用名称空间前缀,或者在路径步骤中指定任何名称空间,如下所示:

$body/*:broadcast

我在这里找到了答案: wso2 ESB:拆分/聚集模式-单个响应

我解决了使用丰富的调解人。 但是我认为总体调解人没有真正正确的行为……也许应该检查一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM