我有一个简单的RESTful服务,我希望使用WSO2 ESB作为基于SOAP的Web服务公开。
我可以像http://<<my system>>:8080/myapp/person/read
一样调用我的简单RESTful服务
作为回复,我获得了Person实体的JSON
数据。
问题:我无法将参数传递给RESTful服务。我要从SOAP输入中删除param值,但不知道如何将它传递给我的RESTful;使用ESB的服务。
我在 WSO2 ESB
中配置了以下内容<proxy xmlns="http://ws.apache.org/ns/synapse" name="PersonProxy" transports="https,http" statistics="enable" trace="enable" startOnLoad="true">
<target>
<inSequence>
<property xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" name="PERSON_ID" expression="//soapenv:Body/person/id"/>
<log level="full">
<property name="PERSON_ID" expression="get-property('PERSON_ID')"/>
</log>
<filter xpath="//person">
<then>
<property name="REST_URL_POSTFIX" value="read" scope="axis2" type="STRING"/>
<property name="HTTP_METHOD" value="POST" scope="axis2" type="STRING"/>
<property name="id" expression="get-property('PERSON_ID')" scope="axis2" type="STRING"/>
<property name="ContentType" value="application/x-www-form-urlencoded" scope="axis2" type="STRING"/>
</then>
<else/>
</filter>
<send>
<endpoint>
<address uri="http://<<my system>>:8080/myapp/person" format="rest"/>
</endpoint>
</send>
</inSequence>
<outSequence>
<send/>
</outSequence>
</target>
<description></description>
</proxy>
我的SOAP请求如下所示
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<person>
<id>3</id>
</person>
</soapenv:Body>
</soapenv:Envelope>
我有另一个RESTful服务,GET
方法和id作为URL本身的一部分,并且工作正常。 ESB配置看起来像
<property name="REST_URL_POSTFIX" expression="get-property('PERSON_ID')" scope="axis2" type="STRING"/>
<property name="HTTP_METHOD" value="GET" scope="axis2" type="STRING"/>
<endpoint>
<address uri="http://<<my system>>:8080/cfs/person" format="rest"/>
</endpoint>
感谢任何指示或帮助。
答案 0 :(得分:2)
如果您的服务可以作为http://<<my system>>:8080/myapp/person/id
调用,您可以从SOAP请求中读取ID并使用“REST_URL_POSTFIX”属性发送它,如下所示。
<property name="REST_URL_POSTFIX" expression="//person/id" scope="axis2" type="STRING"/>
查看实现类似情况的this example。
答案 1 :(得分:1)
您也可以尝试使用ESB 4.7.0中新增的HTTP Endpoint。您可以像在REST API中一样定义URI模板。填充模板变量是通过属性介体完成的 - 因此,您可以使用属性介体执行的任何操作都可以在中介运行时定义端点URL。