我做GWT已经有一段时间了,我需要快速完成一些小事情。我设置了一些东西,现在我有了我需要的RPC,但它失败了。
RPC应该给我一个ArrayList,而Vacancy位于#projectname#.client.model。调用是在#projectname#.client.model中进行的。
“我的服务”的接口在#project#name.client.Service中。
最后,调用当然会转到#projectname#.server。
空缺实现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成为可序列化所需的所有工作,并且将Vacancy作为RPC的返回类型计算为将Vacancy作为返回类型。对吗?我做错了什么?
提前感谢!
发布于 2012-03-02 22:14:09
这通常是由使用不可序列化的类引起的,如果您的类没有实现com.google.gwt.user.client.rpc.IsSerializable,或者如果您忘记添加一个空的构造函数,就会发生这种情况。
要传递bean,您必须满足以下要求(来自GWT站点):
有一个带有任何访问修饰符的默认(零参数)构造函数(例如,私有Foo(){}将起作用)
即使您满足了这些要求,GWT编译器也会说:
此SerializationPolicy可以序列化的类型集中不包括
,或者无法加载它的类对象。为安全起见,此类型将不会序列化。例如: instance =@
问题可能有不同的原因。下面是一个完整的清单,可以用来解决这个问题:
package验证类是否具有默认构造函数(没有arguments)
源代码。
PS:从http://isolasoftware.it/2011/03/22/gwt-serialization-policy-error/复制,因为该站点当前不可用。如果你想阅读原文,使用上面的URL从google搜索它,并从google web缓存中读取它。
发布于 2013-10-04 19:23:28
造成这种情况的另一个原因是浏览器端的javascript已经过时。我不得不硬重新加载(CTRL+F5)代码,这个异常就消失了。
发布于 2018-02-22 16:02:47
当我使用子列表时,我也得到了这个错误:
return myList.subList(fromIndex, toIndex);https://stackoverflow.com/questions/9534484
复制相似问题