2012-12-21 15 views
5

SOAPを使用してRESTful Webサービスをプロキシする必要があります。WSO2でSOAPを使用してRESTfulサービスをプロキシするESB

RESTサービスはGETメソッドを使用し、クエリパラメータを使用して入力を受け入れます。アプリケーション/ csvタイプのリソースを生成します。

WSO2 ESB/Synapseはこのようなシナリオをサポートしていますか?その例がありますか?

例リクエスト

SOAPプロキシ要求:

<request> 
    <fromDate>2012-01-01</fromDate> 
    <toDate>2012-12-31</toDate> 
</request> 

RESTエンドポイントの要求:

http://localhost/person?fromDate=2012-01-01&toDate=2012-12-31 

例レスポンス

REST Endpo int型の応答

"Name","Age","Sex" 
"Geoff","22","Male" 

SOAP代理応答

<person> 
    <name>Geoff</name> 
    <age>22</age> 
    <sex>Male</sex> 
<person> 

感謝します。

答えて

5

私が正しく理解していれば、SOAPクライアントがESBを通じてRESTサービスにアクセスできるように、RESTサービスをSOAPサービスとして公開したいのですか?

その場合は、それは可能です:)あなたは、これらのサンプル152をチェックアウトする必要があります:http://docs.wso2.org/wiki/display/ESB451/Proxy+Service+Samples

それはあなたがSOAPリクエストを取るとRESTのバックエンドに渡し方法について説明し、次に変換しますSOAP応答へのREST応答。

編集:ここでは、コメントで尋ねたものを行う方法についての設定例は、だうまくいけば、それはあなたが:)

<proxy xmlns="http://ws.apache.org/ns/synapse" name="RESTProxy" transports="https,http" statistics="disable" trace="disable" startOnLoad="true"> 
    <target> 
     <inSequence> 

     <!-- We set the HTTP Method we want to use to make the REST request here --> 
     <property name="HTTP_METHOD" value="GET" scope="axis2"/> 

     <!-- This is where the magic happens, for what you want i.e. mapping SOAP "params" to REST query param's --> 
     <property name="messageType" value="application/x-www-form-urlencoded" scope="axis2"/> 

     <send> 
      <endpoint> 
       <!-- This is the RESTful URL we are going to query, like the one in the ESB example 152 --> 
       <address uri="http://localhost/person" /> 
      </endpoint> 
     </send> 

     </inSequence> 

     <outSequence> 
     <log level="full"/> 
     <property name="messageType" value="text/xml" scope="axis2"/> 
     <send/> 
     </outSequence> 
    </target> 
    <description></description> 
</proxy> 

を始めるでしょう、あなたはESBに作るSOAPリクエストのようなものでなければなりません。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
    <person> 
     <fromDate>2012-01-01</fromDate> 
     <toDate>2012-12-31</toDate> 
    </person> 
    </soapenv:Body> 
</soapenv:Envelope> 

あなたはXPATHを使用してSOAPパラメータを抽出するために、クラスメディエータを使用することができます:)

+0

この例は非常に役に立ちます。しかし、私たちはまだ疑問に思っています。SOAP xmlパラメータをREST呼び出しのクエリパラメータに変換するにはどうすればいいですか?手伝ってくれますか? –

0

に役立ちます願っています。 REST URLを作成してINシーケンスフローに戻してください。

0

1.

2.ローカル変数に格納する必要があります

3。あなたは、あなたがSOAP形式

SOAPリクエストがなるまでRESTサービスからの応答をフォーマットする必要がクエリパラメータ

4.を使用してRESTサービスに値を渡す必要が

<request> <fromDate>2012-01-01</fromDate> <toDate>2012-12-31</toDate> </request>

あなたは

<proxy xmlns="http://ws.apache.org/ns/synapse" name="RESTProxy" transports="https,http" statistics="disable" trace="disable" startOnLoad="true><target> 
    <inSequence> 
     <property name="fromDate" expression="//fromDate" scope="default" type="STRING"/> 
     <property name="toDate" expression="//toDate" scope="default" type="STRING"/> 
、としてSOAPプロキシリクエストから値を格納することができます0

そして、あなたがそうプロキシの応答は、

になります、あなたは PayloadFactory仲介者、

<outSequence> 
<payloadFactory media-type="xml">  
     <format> 
       <person> 
         <Name>$1</Name> 
         <Age>$2</Age> 
         <Sex>$3</Sex> 
       </person> 
     </format> 
       <args> 
        <arg evaluator="json" expression="$.Name"/> 
        <arg evaluator="json" expression="$.Age"/> 
        <arg evaluator="json" expression="$.Sex"/> 
       </args> 
</payloadFactory> 
    <send/> 
    </outSequence> 
    </target> 
    <description/> 
    </proxy> 

を使用して応答をフォーマットすることができます

<send> 
    <endpoint> 
      <http method="GET" uri-template="http://localhost/person?fromDate=={get-property('fromDate')}&amp;toDate={get-property('toDate')}"/> 
    </endpoint> 
</send> 
</inSequence> 

でRESTサービスに値を渡すことができます

<person> 
    <name>Geoff</name> 
    <age>22</age> 
    <sex>Male</sex> 
<person> 
関連する問題