1

JSOPRequestBuilderを使用してGWTからRestfulWSを呼び出そうとしています。リンクで報告された同様の問題があります

http://groups.google.com/group/google-web-toolkit/browse_thread/thread/ef93383aca7a3dfc/d4dc5bad1a9110ea

しかし、私は解決策を理解できませんでした。早めに助けてください。

サーバーからのJAX-WSリソースコードスニペット

 @GET
   @Produces(MediaType.APPLICATION_JSON)
   public DealerAddress getDealerAddress(@QueryParam("dealerId") String sDealerId) {

       DealerAddress dlrAd = new DealerAddress("test", "test", "test", "test", 10, new Date(), new Date());
       return dlrAd;
   }

JerseyはDealerAddressのJSONオブジェクトを返します。

これで、残りのURL "https://127.0.0.1:8181/application/rest/OrderManagementResource?alt=json-in-script&dealerId=DLR1"は、ブラウザーでリクエストを試みたときに完全に正常に機能します。

GWTのRequestBuilderアプローチでも機能しますが、JSONPRequestBuilderアプローチでは機能しません。

JSONPRequestBuilderを使用してGWTからWSを呼び出すコードスニペット

JsonpRequestBuilder jsonPReqBuilder = new JsonpRequestBuilder();        
jsonPReqBuilder.setTimeout(100000);
        jsonPReqBuilder.setCallbackParam("callback");
        jsonPReqBuilder.requestObject("https://127.0.0.1:8181/application/rest/OrderManagementResource?alt=json-in-script&dealerId=DLR1" , new       AsyncCallback<DealerAddressJSON>() {

            @Override
            public void onFailure(Throwable caught) {
                // TODO Auto-generated method stub
                caught.printStackTrace();
                Window.alert("Inside error"+caught.getLocalizedMessage());          
            }

            @Override
            public void onSuccess(DealerAddressJSON result) {
                // TODO Auto-generated method stub
                Window.alert("Inside success"+result);
            }

        });

一方、DealerAddressJSONはJavaScriptObject型クラスです。

JAX Restリソースが呼び出され、サーバーから戻ると言っていることがわかりました。

また、Firebugでは、応答はブラウザに表示されますが、「不明なトークン:」という例外で失敗することがわかりました。最後に、常にタイムアウト例外が発生します。JAX-RSリソースからJSONを返す方法がサーバーで問題なのか、JSONPRequestBuilder呼び出しプロシージャが問題なのか、大きな疑問があります。一部のリンクがこの問題について説明しているコールバックの変更を理解できませんでした。

親切に私を助けてください。

4

1 に答える 1

2

JSONPRequestBuilder が JSONP を期待している間に、おそらく JSON を送り返しています。これらは同じものではありません。

JSON はそのままのデータです。AJAX (つまり RequestBuilder) を使用してリクエストを作成すると、コンテンツを直接読み取ることができます。これらのリクエストは、同じサーバーに対してのみ行うことができます。JSON データの例:

{"response":"success", "items":[{"id":1}, {"id":2}]}

対照的に、JSONP はクロスオリジン リクエスト用に設計されているため、データを含むだけでなく、JavaScript でデータをラップします。JSON サービスは js 関数呼び出しで応答をラップしていないため、これは機能していません。JSONP データの例:

callback_1({"response":"success", "items":[{"id":1}, {"id":2}]})

コールバックはリクエストごとに変わるため、サーバーはクライアントが毎回リクエストした内容に基づいてそのコールバック関数を変更することになっています。

于 2012-05-16T13:40:55.717 に答える