发送中介忽略 HTTP 请求数据(仅发送 headers!)

Send Mediator Ignores HTTP Request Data (Only sends headers!)

我实际上是在为 WSO2 数据服务服务器资源创建 RESTful 通过代理。

我想向 ESB 发送以下请求...

PUT /crm/contacts/267

...有了数据...

<contacts>
<firstname>John</firstname>
</contacts>

...以便更新联系人 267 的名字。

我使用脚本中介获取联系人 ID 并将其添加到 InSequence 中介流中的 XML 请求(因为这是 Data Services Server 需要格式化的方式)。然后,我尝试使用 HTTP 端点将请求发送到数据服务服务器。

这里是我的API配置作为参考:

<api xmlns="http://ws.apache.org/ns/synapse" name="CRM" context="/crm">
   <resource methods="PUT" uri-template="/contacts/{cid}">
      <inSequence>
         <script language="js"><![CDATA[ var request= mc.getPayloadXML(); var id = mc.getProperty('uri.var.cid'); var child = <id>{id}</id>; request.appendChild(child);mc.setPayloadXML(request); ]]></script>
         <property name="messageType" value="application/xml" scope="axis2"/>
         <property name="REST_URL_POSTFIX" scope="axis2" action="remove"/>
         <send>
           <endpoint>
              <http method="put" uri-template="http://requestb.in/1h6werc1" />
           </endpoint>
         </send>
         <log level="full" xmlns="http://ws.apache.org/ns/synapse"/>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
   </resource>
</api>

注意:此处指定的端点不是我的 DSS 端点,它只是我用来测试 API. 输出的请求箱

所以这里的主要问题是,当我检查 Request Bin 时,我收到了请求,但没有请求 body。如果我将请求 bin URL 更改为 DSS 端点,则数据源不会更新。我可以直接使用 DSS 资源更新数据源,所以工作正常。

如果您能给我一些指导,我将不胜感激!

谢谢,

紧张

我已经在 ESB 4.8.1 中使用 NIO http 传输进行了尝试。

我已使用 SOAP UI 向此 API 发送请求:

我在 ESB 和端点之间使用了 TCPMON,这是 ESB 发送的请求:

PUT /MockJSP.jsp HTTP/1.1
Content-Type: application/xml; charset=UTF-8
Accept-Encoding: gzip,deflate
Transfer-Encoding: chunked
Host: 127.0.0.1:8087
Connection: Keep-Alive
User-Agent: Synapse-HttpComponents-NIO

3e
<contacts>
<firstname>John</firstname>
<id>267</id></contacts>
0

XML 数据已发送,我看不出有任何问题:尝试在您的 ESB 实例和主机之间使用 tcpmon(请参阅 ESB_HOME/bin)"requestb.in" ?