0

Guava 14.0 を GWT RPC 2.5.1-rc1 で使用し、Guava ライブラリと GWTで説明されているように Maven でビルド

Guava コレクションの逆シリアル化は正常に機能しているようです。ただし、Optional.Present を含む応答 DTO を逆シリアル化しようとすると、SerializationException が発生しました。

Caused by: com.google.gwt.user.client.rpc.SerializationException: com.google.common.base.Present/3434853995
at    com.google.gwt.user.client.rpc.impl.SerializerBase.getTypeHandler(SerializerBase.java:153)

SerializerBase.java:146 を見ると、methodToJava マップには以下が含まれていません。

com.google.common.base.Present/3434853995

ただし、次の CustomFieldSerializer が含まれています。

com.google.common.base.Present/3491224270

では、/3434853995 マッピングはどうなっているでしょうか。

これは、サーバー側の型がクライアント側の型と同じであることを確認するために SerializerBase が使用するハッシュ (コンパイル時に計算される) のようです。guava-gwt とサーバー側の guava Optional.Present を見ると、これらは一致しません。また、Present はサーバー側でインスタンス化されるため、そのハッシュはクライアント側の Present と一致しませんか?

4

1 に答える 1

1

うーん。内部テストでは、サーバーで作成されたGWTを正常にシリアル化できますOptionalが、公開Guavaリリースが内部GWTの動作と一致しなかったのはこれが初めてではありません。

あなたが提供したリンクから、私が提案する最初の2つのことをすでに行ったようです:クライアント側とサーバー側のライブラリが両方とも依存していることを確認し、GWTモジュールでguava-gwt依存関係を宣言します。com.google.common.base.Base

私が現時点で持っているもう1つのアイデアは、DTOがどのように見えるかを尋ねることです。GWTは、シリアル化するために準備する必要のあるクラスを特定するのに問題がある場合があります。本当に、それがここでの問題だとは思えません。GWTには明らかに、シリアル化する必要があるかもしれないというインクがありPresentます。とにかく、これらの問題は通常、finalフィールドでのみ発生し、おそらくより根本的な問題を引き起こします。

また、何らかの方法でGuavaの別のバージョンを推移的にプルしていないことを確認することもできます。それが真のMaven推移的依存関係である場合、Mavenはエラーになると思いますが、依存関係の1つがGuavaクラスを直接jarにバンドルしている場合、Mavenはおそらく気付かないでしょう。これもありそうもないようですが、私はストローを握っています。

それがすべて失敗した場合、ローカルで実行できるテストケースをまとめることができれば、さらに調査することができます。

于 2013-03-08T16:48:44.017 に答える