2017-05-29 10 views
1

現在、SyncProxyライブラリを使用してJMeterで負荷テストを行うために、自分のアプリケーションのサービスをテストしようとしています。アプリケーションは正常に動作し、私はlocalhost上でそれを実行しています。SyncProxyを使用してサービスをテストする:「RPC応答を受信中のIOException」

JUnitテストでSyncProxyを使用しようとすると、問題が発生します。

ここ

は、JUnitテストで使用されるコードの一部です:

ThemeServiceAsync themeServiceAsync = (ThemeServiceAsync) SyncProxy 
      .newProxyInstance(ThemeServiceAsync.class, MODULE_BASE_URL, GET_THEMES_SERVICE_NAME); 

themeServiceAsync.getListTheme(codeEfs, codeSI, noStr, statut, new AsyncCallback<List<Theme>>(){ 

    @Override 
    public void onFailure(Throwable arg0) { 
     // TODO Auto-generated method stub 
     System.out.println(arg0); 
    } 


    @Override 
    public void onSuccess(List<Theme> result) { 
     // TODO Auto-generated method stub 
     System.out.println(result); 

    } 

}); 

私は、次のエラーを取得しています:IOException while receiving RPC response

私はどこに問題がから来ていた見つけるために、デバッグモードを使用していました。サーバー側では、結果がクライアントに返されるまですべてが正常に処理されます。結果はデー​​タベースにありますが、私は不思議な500エラーがあります。

掘り後、私は、この例外が(AbstractRemoteServiceServletで)スローされることがわかった:

com.google.gwt.user.client.rpc.SerializationException: Type 'net.gicm.ector.shared.beans.Theme' was not assignable to 'com.google.gwt.user.client.rpc.IsSerializable' and did not have a custom field serializer. 
For security purposes, this type will not be serialized.: instance = [email protected] 

私はあなたのクラスが「isSerializable」を実装する必要があるという事実について話したスレッドの多くを見つけましたが、どのようなI私が実際にlocalhostで自分のアプリケーションを実行していて、さまざまなサービスを含め、すべてが正常に動作しているということです。

しかし、私のJUnitを実行するとき、私はそれらのエラーがあります。

+1

基本を確認してください:あなたのクラス 'Theme'はSerializableを実装していますか?引数なしのコンストラクタはありますか?あなたは何gwtバージョンを使用していますか? – Andrei

+0

私のクラス 'Theme'はSerializableを実装しています。それには引数なしのコンストラクタがあり、gwtのバージョンは2.6 – krakig

答えて

0

パスやクラスパスのリソースが混乱しているように見えます。 GWT-RPCは、ポリシーと呼ばれるいくつかの生成されたファイルを使用して、何らかのセキュリティメカニズムを実装しています(つまり、特定のタイプなどを禁止します)。 あなたのケースでは、テスト中にそれらのファイルがクラスパス上に正しく配置されていないかのように見えます。

この場合、私は通常RemoteServiceServlet#getSerializationPolicy(GWT 2.8.1では2.6ではないが、この部分はあまり変更されていないと思われます)を通してデバッグします。 最終的にはRemoteServiceServlet#loadSerializationPolicyになり、いくつかのファイルを読み込もうとしますが、どのパスでそのファイルを読み込もうとしているのか、そのファイルが見つからない理由がわかります。

+0

です。私はそこにブレークポイントを追加しました。アプリケーションからのリクエストをテストすると、strongnameは "E52F7D678A782A8A4B2A35A157692026"のようになりますが、JUnitからサービスを試してみるとstrongNameはnullになります。無視されます。これらのポリシーは、私のアプリとテストの両方からそれらを見つける方法を教えてください。 – krakig

+0

私は強い名前がヌルであるとは思わないと思います。ファイルについて心配する前にまずこれをチェックしてください。 クライアントの要求から厳密な名前が読み取られています( 'ServerSerializationStreamReader.prepareToRead'を参照)。それがnullの場合、クライアントが不正なリクエストを送信しているか、プロキシが異常な動作をしている可能性があります。その強力な名前がどこにヌルとして来るかを調べてみてください(おそらくあなたのプロキシは許可しません、またはx-gwt-rpcコンテンツタイプを使ってリクエストをしますか?) – Andrei

+0

SyncProxyを使って、サーバ側に送られた次のヘッダはnullです: 'X -GWT-パーミュテーション」。そして、 'RemoteServiceServlet'では、' serializationpolicyFilePath'は "/ector/null.gwt.rpc"と等しいので、なぜ私の 'strongname'ヌルが見つかるか調べなければなりません。 – krakig

関連する問題