1

StackoverflowとWSO2ESBのドキュメントを何日も調べてきましたが、まだ明確な答えはありません。

私のアプリケーションはJavaScriptであり、Dojoフレームワークを使用しています。理想的には、すべてのWebサービス呼び出しはRESTに対して行われ、JSONを返す必要があります。この例440のために、SOAP xmlをJSONとして返す方法を知っています: " http // wso2.org / project / esb / java / 4.0.3 / docs / samples / Advancesd_mediation_samples.html#Sample440 "私は見ましたこのブログに投稿されたサンプルでも: " http //vvratha.blogspot.ca/2011/11/invoking-restful-service-via-wso2esb.html"soapUIなどのツールからプロキシサービスを呼び出すことができるようです結果をJSONで取得します。したがって、ESBが正しく機能しているとしか想定できませんが、dojo.xhrGetまたはdojo.io.script.getを使用してESBを呼び出そうとすると、データは常にNULLとして返されます!!!

ESBプロキシサービスを呼び出すことになっているRESTのメソッドは何ですか?サービスのwsdlを見ると、操作は「仲介」と呼ばれているように見えますが、それ以上はわかりませんでした。例800: " http // wso2.org / project / esb / java / 4.0.3 / docs / samples / rest_api_samples.html#Sample800 "を見てきましたが、これをどこで使用するかわかりません。

注:これらのhttpリンクについては、httpの後に「:」を追加してください。ハイパーリンクの割り当てが不足しているようです。

Rathaからの助けの後の詳細情報:1。これがプロキシサービスを呼び出す方法です:(後でさらにクエリ文字列パラメータがあります)http // loh7:8280 / services / TestRestProxy?address = 1460%20nicholson%20road

  1. このメディエーションメッセージトラッカーダンプからのクエリ文字列はnullです。

    13:10:10,803 [-] [HttpServerWorker-16] INFOプロキシサービスTestRestProxyが次の場所から新しいメッセージを受信しました:192.168.7.143
    13:10:10,803 [-] [HttpServerWorker-16] INFOメッセージの宛先:/ services / TestRestProxy?address = 1460%20nicholson%20road
    13:10:10,803 [-] [HttpServerWorker-16] INFO SOAPAction:null
    13:10:10,803 [-] [HttpServerWorker-16] INFO WSA-アクション:null
    13:10:10,803 [-] [ HttpServerWorker-16] INFOメディエーションにプロキシサービスの匿名のシーケンスを使用
    13:10:10,804 [-] [HttpServerWorker-16] INFO開始:シーケンス
    13:10:10,804 [-] [HttpServerWorker-16] INFOシーケンス: :mediate()
    13:10:10,804 [-] [HttpServerWorker-16] INFO開始:ログ​​メディエーター
    13:10:10,805 [-] [HttpServerWorker-16] INFO querystring = null
    13:10:10,805 [-] [HttpServerWorker-16] INFO終了:ログメディエーター
    13:10:10,806 [-] [HttpServerWorker-16] INFO開始:ログ​​メディエーター
    13:10:10,806 [-] [HttpServerWorker-16] INFO終了:ログメディエーター
    13:10:10,806 [-] [HttpServerWorker-16] INFO開始:メディエーターの送信
    13:10:10,806 [-] [HttpServerWorker-16] INFOエンドポイントを介したメッセージの送信:EsriNA10がアドレスに解決=

プロキシは次のようになります。注:「address」値を抽出して、requestsoapメッセージの$1に入れたいと思いました。

<proxy xmlns="http://ws.apache.org/ns/synapse" name="TestRestProxy" transports="https,http" statistics="disable" trace="enable" startOnLoad="true">
   <target>
      <inSequence>
         <log level="custom">
            <property name="querystring" expression="get-property('REST_URL_POSTFIX')" />
         </log>
         <payloadFactory>
            <format>
               <GeocodeAddress xmlns="http://www.esri.com/schemas/ArcGIS/10.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                  <Address xmlns="">
                     <PropertyArray>
                        <PropertySetProperty>
                           <Key>Street</Key>
                           <Value>$1</Value>
                        </PropertySetProperty>
                        <PropertySetProperty>
                           <Key>City</Key>
                           <Value>Newmarket</Value>
                        </PropertySetProperty>
                        <PropertySetProperty>
                           <Key>State</Key>
                           <Value>ON</Value>
                        </PropertySetProperty>
                        <PropertySetProperty>
                           <Key>Zip</Key>
                           <Value>L3Y 9C3</Value>
                        </PropertySetProperty>
                        <PropertySetProperty>
                           <Key>Country</Key>
                           <Value>CANADA</Value>
                        </PropertySetProperty>
                     </PropertyArray>
                  </Address>
                  <PropMods xmlns="">
                     <PropertyArray>
                        <PropertySetProperty>
                           <Key>OutputSpatialReference</Key>
                           <Value xmlns:q2="http://www.esri.com/schemas/ArcGIS/10.0" xsi:type="q2:ProjectedCoordinateSystem">
                              <WKID>102100</WKID>
                           </Value>
                        </PropertySetProperty>
                     </PropertyArray>
                  </PropMods>
               </GeocodeAddress>
            </format>
            <args>
               <arg expression="$ctx:querystring" />
            </args>
         </payloadFactory>
         <log level="full" category="TRACE" separator="," />
         <send>
            <endpoint key="EsriNA10" />
         </send>
      </inSequence>
      <outSequence>
         <log level="full" separator="," />
         <xslt key="out_transform" />
         <property name="messageType" value="application/json" scope="axis2" type="STRING" />
         <send />
      </outSequence>
   </target>
</proxy>
4

2 に答える 2

1

サンプル 800 では、RESTAPI を直接呼び出す方法を説明しています。たとえば、REST サービス エンドポイントがそれをサービス エンドポイントとしてポイントしている場合。次の構成に注意してください。

<api name="StockQuoteAPI" context="/stockquote">
   <resource uri-template="/view/{symbol}" methods="GET">

RESTAPI を定義する場所は、stockquoteAPI を呼び出して context と uritemplate を定義します。したがって、上記の API を実行しようとする場合は、curl または他の REST クライアントを使用して、次のように実行します。

curl -v http://127.0.0.1:8280/stockquote/view/IBM

ここでは、コンテキストと uri テンプレートを提供していることがわかります。そこからシンボル呼び出し IBM を選択し、stcokquote サービスに送信します。ただし、これはロジックであり、シーケンスで独自のロジックを定義できます。

編集

ブラウザからこのようにしてみてください。

http://localhost:8280/services/yourProxy/<Operation>?param1=21312&param2=wqeqw

ここで、「操作」は、呼び出そうとする操作 (バックエンド REST サービスに存在する) です。

「仲介」はデフォルトの操作です。実際のバックエンド サービス操作を実行する場合は、上記のようにその操作を提供します。

プロキシを定義するときは、ブログの私のサンプルに従ってください..

<proxy name="yourProxy" transports="https http" startOnLoad="true" trace="disable">
        <target>   
            <endpoint>
              <address uri="Your REST SERVICE ENDPOINT URL"/>
            </endpoint>  
           <inSequenc>
               <log level ="custom">
                 <property name="querystrings" expression=get-property('REST_URL_POSTFIX')/>
               </log>
          </inSequnece>           
            <outSequence>
                <send/>
            </outSequence>
        </target>
    </proxy>

プロキシの上で試して、「クエリ文字列」からログに記録するものを確認してください

于 2012-08-28T10:13:08.380 に答える
0

REST API を使用して、これらのすべてのhttp動詞を呼び出すことができます。実行したい動詞のタイプを定義するだけで、リクエストをサービス エンドポイントにルーティングできます。 /vvratha.blogspot.com/2012/09/rest-support-in-wso2esb-introduction.html

于 2012-09-14T18:41:59.757 に答える