非常简单的例子。请求:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<T>
<m1>bysy</m1>
<m1>momo</m1>
<m1>gigi</m1>
</T>
</soapenv:Body>
</soapenv:Envelope>
我想迭代并记录标签m1中的每个元素。
代理代码:
<proxy xmlns="http://ws.apache.org/ns/synapse" name="Loopback" transports="https,http"
<target>
<inSequence>
<property name="OUT_ONLY" value="true" scope="axis2"/>
<iterate expression="//T/m1">
<target>
<sequence>
<property name="OUT_ONLY" value="true" scope="axis2"/>
<log level="custom">
<property name="M1" expression="//text()"/>
</log>
<drop/>
</sequence>
</target>
</iterate>
</inSequence>
</target>
</proxy>
按预期工作并记录所有值。但WSO2ESB服务器并没有关闭连接,直到它超时。 (我使用SOAPUI进行测试)
我试图将属性OUT_ONLY RESPOND NO_KEEPALIVE放在代理的不同部分,但它没有帮助,我尝试使用,但结果相同。
看起来像 iterate 中介中的问题,它不会让inSequence终止并向客户端发送响应。删除后,代理会立即断开状态代码&#39; 202&#39;接受消息。
答案 0 :(得分:1)
这是因为,默认情况下,使用iterate mediator将属性“continueParent”设置为false:更改为<iterate continueParent="true" expression="//T/m1">
您应该在inSequence中明确发送202,设置此属性:<property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>