私がGWTを行って久しぶりに、何か小さなことをすばやく行う必要がありました。私は物事をセットアップし、今必要なRPCがありますが、失敗します。
RPCは私にArrayListを提供することになっており、Vacancyは#projectname#.client.modelにあります。呼び出しは#projectname#.client.modelで行われます。
サービスのインターフェイスは#project#name.client.Serviceにあります。
最後に、もちろん、呼び出しは#projectname#.serverに行きます。
VacancyはIsSerializableを実装しています。 RPCの実行で発生する例外は次のとおりです。
Starting Jetty on port 8888
[WARN] Exception while dispatching incoming RPC call
com.google.gwt.user.client.rpc.SerializationException: Type 'firsteight.client.model.Vacancy' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = firsteight.client.model.Vacancy@15fdd2f
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.Java:619)
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.Java:126)
at com.google.gwt.user.client.rpc.core.Java.util.Collection_CustomFieldSerializerBase.serialize(Collection_CustomFieldSerializerBase.Java:44)
at com.google.gwt.user.client.rpc.core.Java.util.ArrayList_CustomFieldSerializer.serialize(ArrayList_CustomFieldSerializer.Java:39)
at com.google.gwt.user.client.rpc.core.Java.util.ArrayList_CustomFieldSerializer.serializeInstance(ArrayList_CustomFieldSerializer.Java:51)
at com.google.gwt.user.client.rpc.core.Java.util.ArrayList_CustomFieldSerializer.serializeInstance(ArrayList_CustomFieldSerializer.Java:28)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.Java:740)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.Java:621)
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.Java:126)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.Java:153)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.Java:539)
at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.Java:616)
at com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.Java:474)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.Java:571)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.Java:208)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.Java:248)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.Java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.Java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.Java:362)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.Java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.Java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.Java:729)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.Java:405)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.Java:152)
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.Java:49)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.Java:152)
at org.mortbay.jetty.Server.handle(Server.Java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.Java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.Java:843)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.Java:647)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.Java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.Java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.Java:395)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.Java:488)
私が作成するRPCは次のとおりです。
void getVacs() {
try {
homeService.getVacancies(new AsyncCallback<ArrayList<Vacancy>>() {
public void onFailure(Throwable caught)
{
RootPanel.get("grayblock").add(new HTML("Failed:" + caught.getMessage()));
}
public void onSuccess(ArrayList<Vacancy> result)
{
RootPanel.get("grayblock").add(new HTML(result.get(0).getTitle()));
}
});
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
私は、VacancyをSerializableにするために必要なすべてを実行したと思いました。RPCの戻り型としてのVacancyのArrayListは、戻り型としてVacancyを持っていると数えます。何が悪いのですか?
前もって感謝します!
これは通常、シリアライズ不可能なクラスを使用しているために発生します。これは、クラスがcom.google.gwt.user.client.rpc.IsSerializable
を実装していない場合や、空のコンストラクターを追加するのを忘れた場合に発生する可能性があります。
Beanを渡すには、次の要件を満たす必要があります(GWTサイトから)。
これらの要件を満たしている場合でも、GWTコンパイラは次のように言うことがあります。
このSerializationPolicyによってシリアル化できるタイプのセットに含まれていないか、そのClassオブジェクトをロードできませんでした。セキュリティ上の理由から、このタイプはシリアル化されません。:インスタンス= @
問題にはさまざまな原因が考えられます。ここに彼が問題を解決するために使用する完全なチェックリスト:
PS: http://isolasoftware.it/2011/03/22/gwt-serialization-policy-error/ からコピーしました。サイトが現在利用できないためです。元の記事を読みたい場合は、上記のURLを使用してGoogleから検索し、Google Webキャッシュから読み取ります。
この例外のもう1つの理由は、ブラウザー側の古いJavaScriptでした。コードをハードリロード(CTRL + F5)しなければならず、この例外はなくなりました。
Cipousが述べたように、私の場合、Pentaho BI Serverのサーバー出力でこの例外がスローされました。単純なハードリロード(CTRL + F5)でうまくいきました。
まず最初に、必ず空のコンストラクタを定義してください。
そうでない場合、クラスはシリアル化できません...
空のコンストラクターがある場合は、クラス(または拡張チェーン内の任意のクラス)implements IsSerializable(またはIsSerialisableを拡張するその他のインターフェイス)を確認してください
クラスがIsSerialisableを実装している場合は、それがnon-final ...であることを確認してください。
サブリストを使用したときにもこのエラーが発生します。
return myList.subList(fromIndex, toIndex);
私の場合、target
フォルダに古いキャッシュがあり、適切に更新されていません。プロジェクトを再構築する必要があり(Maven-> Update Project)、それが機能しました。