【发布时间】:2014-04-04 22:00:34
【问题描述】:
我正在使用 wso2ESB 4.8.0,我在这个 url 上关注了示例:
编写此代理服务:
<?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/广播//结果 不处理这个异常?
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.
我意识到,如果我定义一个命名空间和一个前缀以附加到 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 工作正常...所以命名空间定义是强制性的吗?
我有什么遗漏吗?谢谢
【问题讨论】:
标签: xpath wso2 aggregate wso2esb