我有一个肥皂服务,我想转身并将消息发布到外部服务器。
我能够通过curl这样做:
curl --data-urlencode "filename=data.txt" --data-urlencode "filedir=/home/myfile/in"
--data-urlencode "busproc=MyBP" --data-urlencode "serverip=192.168.1.4"
--data-urlencode"uid=myuserid" --data-urlencode "pwd=mypwd"
http://somelocation.com:8833/webservice/inbound/here
但我无法让它正常工作。这是我的代理服务:
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="ExampleHTTPPostWithFormData"
transports="http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<log/>
<property name="messageType"
value="application/x-www-form-urlencoded"
scope="axis2"
type="STRING"/>
<property name="HTTP_METHOD" value="post" scope="axis2" type="STRING"/>
<send>
<endpoint>
<address uri="http://somelocation.com:8833/webservice/inbound/here"
format="pox"/>
<property name="uid" value="user"/>
<property name="pwd" value="password"/>
<property name="filedir" value="/home/myfile/in"/>
<property name="busproc" value="myBP"/>
<property name="serverip" value="192.168.1.4"/>
<property name="filename" value="data.txt"/>
</endpoint>
</send>
<log level="full"/>
</inSequence>
</target>
<description/>
</proxy>
终端服务似乎只看到我发布到URL(但不是传入的数据属性)。
答案 0 :(得分:2)
属性不是构建消息内容的方式。我发现这样做的最好方法是使用payloadFactory
。您需要构建的消息有一个根XML元素,每个表单字段有一个子节点,然后似乎Axis2通过以适当的格式序列化来处理messageType
application/x-www-form-urlencoded
。因此,对代理的最小更改将是:
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="ExampleHTTPPostWithFormData"
transports="http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<log/>
<property name="messageType"
value="application/x-www-form-urlencoded"
scope="axis2"
type="STRING"/>
<payloadFactory media-type="xml">
<format>
<params xmlns="">
<uid>user</uid>
<pwd>password</pwd>
<filedir>/home/myfile/in</filedir>
<busproc>myBP</busproc>
<serverip>192.168.1.4</serverip>
<filename>data.txt</filename>
</params>
</format>
</payloadFactory>
<send>
<endpoint>
<address uri="http://somelocation.com:8833/webservice/inbound/here"
format="rest"/>
</endpoint>
</send>
<log level="full"/>
</inSequence>
</target>
<description/>
</proxy>
根据您的REST服务是否处理HTTP / 1.1,添加<property name="FORCE_HTTP_1.0" value="true" scope="axis2" type="STRING"/>
也可能很方便。
如果您需要参数,那么您可以使用XPath extensions将参数传递给payloadFactory
。 E.g。
<payloadFactory media-type="xml">
<format>
<params xmlns="">
<uid>user</uid>
<pwd>password</pwd>
<filedir>/home/myfile/in</filedir>
<busproc>myBP</busproc>
<serverip>192.168.1.4</serverip>
<filename>$1</filename>
</params>
</format>
<args>
<arg evaluator="xml" expression="$ctx:filename"/>
</args>
</payloadFactory>
答案 1 :(得分:0)
如果您在文件中发送SOAP有效负载,则需要使用VFS传输。有关如何使用VFS传输解决问题的信息,请参阅以下示例
http://docs.wso2.org/pages/viewpage.action?pageId=26838852
或者,您可以使用SOAPUI或任何SOAP客户端将有效负载直接发送到ESB代理端点