1

非常に基本的なアプリケーションを作成しました。サービス クラスは 1 つだけで、対応する Async クラスには Java 型のみが含まれ、カスタム クラスは含まれません。しかし、それでもシリアライゼーション例外が発生します。

私のサービスクラスは次のようになります。

public interface MyService extends RemoteService {
  public String getName();
  public Object getAdditionalDetials(ArrayList<String> ids);
  public Date getJoiningDate();
}

私の非同期インターフェースは次のようになります

public interface MyServiceAsync {
  public void getName(AsyncCallback<String> callback);
  public void getAdditionalDetials(ArrayList<String> ids, AsyncCallback<Object> callback);
  public void getJoiningDate(AsyncCallback<Date> callback);
}

私は愚かな間違いを犯していることを知っています。

4

2 に答える 2

1

私は gwt rpc とシリアライゼーション メカニズムにナイーブですが、あなたの質問に答えようとします。

RPC を含むクラスを作成するたびに、GWT はSerialization Policy File. シリアル化ポリシー ファイルには、シリアル化できる許可された型のホワイトリストが含まれています。

Service メソッドでは、言及および参照するすべてのタイプが実装されている場合、このリストに自動的に追加されIsSerializableます。あなたの場合、次の2つの方法を使用しました。

public String getName();
public Date getJoiningDate();

ここでは、戻り値の型としてStringandを使用しているDateため、 に追加されますSerialization Policy File。しかし、以下の方法では、それらの嘘が問題であり、

public Object getAdditionalDetials(Arraylist<String> ids);

ここで使用ArrayList and Stringしたのは問題ではなく、ホワイトリストに追加されますが、問題は戻り値の型をObject. ここで、GWT Compiler は追加する型を認識していないwhitelist or Serialization Policyため、RPC 呼び出しを渡しません。IsSerializable解決策は、 type の戻り値の型に言及する代わりに、実装するクラスに言及することObjectです。

于 2013-01-13T12:12:52.803 に答える
0

FWIW、私はこの問題を抱えていましたが、「オブジェクト」タイプは生成されたクラスの背後に隠されていました。

したがって、rpc メソッドの 1 つにクラスが含まれる場合:

class Xxx<T> implements IsSerializable {...

次のように変更する必要があります。

class Xxx<T extends IsSerializable> implements IsSerializable {...
于 2013-05-22T05:10:04.547 に答える