2017-07-12 1 views
1

私は3つの別々のMVNプロジェクトに私のクライアントサーバーGWTプロジェクトを分割することにしました:RPCエラーを修正するには複数プロジェクトのGWTセットアップでIncompatibleRemoteServiceExceptionが発生しましたか?

  • クライアント
  • 共有
  • サーバー

共有コンポーネントは、すべてのモデルクラス、サービスが含まれていますインターフェイス、およびServiceAsyncインターフェイスを提供します。このプロジェクトは、サーバーとクライアント両方のgwtプロジェクトの依存関係として宣言されています。すべてがコンパイルされ、クライアントアプリケーションは正しく動作します。 また、クライアントは正しいRPC要求を行い、サーバーはで応答:

com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException/3936916533","Type name elision in RPC payloads is only supported if the RPC whitelist file is used." 

問題は何をすることができますか?私は私のサーブレットの実装で何か異なった設定をするべきですか?

+0

あなたのアプリをどのように実行(および/またはパッケージ化および/またはデプロイ)していますか? –

+0

私はmavenをpackage/deployに使用します。 – Mabedan

答えて

1

何らかの理由で*.gwt.rpcファイルを読み込めない(つまり、存在しないか、予想されるURLからアクセスできないなど)ことを意味します。これはおそらく、分割後に自分の位置が間違っていることを意味します。

受け取ったエラーは、com.google.gwt.user.server.rpc.impl.LegacySerializationPolicyというクラスにのみ存在し、通常のポリシーファイルで何かが発生した場合に読み込まれます。 javadocから:

GWT 1.3.3 RPCと互換性のあるシリアル化ポリシー。シリアライゼーションポリシーファイルが存在しない場合は が使用されます。同じクラスで

、我々は持っている:

private static final String ELISION_ERROR = "Type name elision in RPC " 
     + "payloads is only supported if the RPC whitelist file is used."; 

...ともようなもの:これは意図的なもののようなエラーメッセージが皮肉ではあるが

/** 
    * Implemented to fail with a useful error message. 
    */ 
    public final String getClassNameForTypeId(String id) 
     throws SerializationException { 
    throw new SerializationException(ELISION_ERROR); 
    } 

は、だから、見えますそれほど役に立たない。

RemoteServiceServlet#loadSerializationPolicyからデバッガを実行し、期待するポリシーファイルがロードされない理由を確認できます。

+0

あなたは正しいです、私はポリシーファイル(.rpc)がありません。それらは私のサーバープロジェクトには存在しますが、クライアント側には存在しません。これを処理する通常の方法は何ですか? web.xmlを使用してクライアントプロジェクトを再生成するか、何らかの方法でサーバーから再利用しますか? – Mabedan

+0

1つは、パッケージング時に適切な場所に置いてください。別々に生成できるかどうかは分かりません。しかし、問題は何ですか、クライアント/サーバーモジュールを別のサーバーに展開していますか? – Andrei

+0

私は上記のようにクライアントとサーバーは別々に構築された2つの完全に別個のプロジェクト/リポジトリです。すべてのモデルとサービスは、クライアントとサーバサイドの両方のmvn/gwt依存関係としてマークされているさらに別のプロジェクトに含まれています。 – Mabedan

0

ブラウザが.nochache.jsファイルをキャッシュしている可能性があります。

編集:

私はこれが起こった時を覚えています。これはあいまいな記憶です...サーブレットは正しいパスにありますか?クライアントが正しいURLをリクエストしていますか?

モジュールのサービスModAは、deploy/ModA/rpcPolicyManifest/manifestsを検索します。サーブレットは/ ModA/serviceにマップする必要があります。クライアントはhttp://example.com/webapp/ModA/serviceにリクエストする必要があります。

+0

を確認しました。キャッシングは不要です。 – Mabedan

関連する問題