使用方法POST从WSO2 ESB调用RESTful服务

时间:2013-06-22 12:08:05

标签: wso2 wso2esb

我有一个简单的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>

感谢任何指示或帮助。

2 个答案:

答案 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。