简单的 WEB 代理没有响应

Simple WSOESB Proxy doen't response

非常简单的例子。要求:

<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 终止并向客户端发送响应。一旦我删除它,代理立即断开连接,状态代码为“202”已接受消息

这是因为,默认情况下,属性 "continueParent" 设置为 false 迭代调解器:更改为 <iterate continueParent="true" expression="//T/m1">

并且你应该在你的 inSequence 中明确发送一个 202,设置这个 属性 : <property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>