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

时间:2015-01-12 05:04:25

标签: rest api wso2 wso2esb wso2dss

我正在为WSO2数据服务服务器资源创建一个RESTful传递代理。

我想将以下请求发送给ESB ......

PUT /crm/contacts/267

......有了数据......

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

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

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

以下是我的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输出的请求bin。

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

如果有指示,你可以给我这个工作,非常感谢!

谢谢,

Strainy

1 个答案:

答案 0 :(得分:1)

我在使用NIO http传输的ESB 4.8.1中尝试过它。

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

soapui conf

我在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实例和主机“requestb.in”之间使用tcpmon(请参阅ESB_HOME / bin)?