我正在为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
答案 0 :(得分:1)
我在使用NIO http传输的ESB 4.8.1中尝试过它。
我使用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实例和主机“requestb.in”之间使用tcpmon(请参阅ESB_HOME / bin)?