5

SOAP を使用して RESTful Web サービスをプロキシしたいと考えています。

REST サービスは GET メソッドを使用し、クエリ パラメーターを介して入力を受け入れます。タイプ application/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 エンドポイントの応答

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

SOAP プロキシ応答

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

どうもありがとう。

4

4 に答える 4

5

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

その場合は、可能です:) 次のサンプル 152 をチェックしてください: http://docs.wso2.org/wiki/display/ESB451/Proxy+Service+Samples

SOAP 要求を取得して REST バックエンドに渡し、REST 応答を SOAP 応答に変換する方法について説明します。

編集: これは、コメントで質問したことを実行する方法のサンプル構成です。うまくいけば、開始することができます:)

<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>

それが役立つことを願っています:)

于 2012-12-23T18:38:44.340 に答える
1

これがSOAPクライアントとRESTサービスの通信を理解するのに非常に役立つことを願っています

http://docs.wso2.org/display/ESB460/Using+REST+with+a+Proxy+Service#UsingRESTwithaProxyService-SOAPClientandRESTService

于 2013-11-21T03:36:57.347 に答える
0

クラスメディエーターを使用して、XPATH を使用して SOAP パラメーターを抽出できます。REST URL を作成し、IN シーケンス フローに送り返します。

于 2013-11-20T19:58:16.437 に答える
0

1. SOAP PROXY から値を取得する必要がある

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

3.クエリ パラメータを使用して値を REST サービスに渡す必要があります。

4. REST サービスからの応答を SOAP 形式にフォーマットする必要があります。

SOAP リクエストは、

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

SOAP PROXY 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"/>

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

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

次に、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>

したがって、プロキシの応答は次のようになります。

<person>
  <name>Geoff</name>
  <age>22</age>
  <sex>Male</sex>
<person>
于 2016-01-05T11:59:18.353 に答える