gpt4 book ai didi

java - GWT - RPC 序列化异常

转载 作者:搜寻专家 更新时间:2023-10-30 19:49:24 24 4
gpt4 key购买 nike

我已经有一段时间没有做 GWT 了,我需要快速完成一些小事情。我进行了设置,现在我有了所需的 RPC,但它失败了。

RPC应该给我一个ArrayList,而Vacancy位于#projectname#.client.model中。该调用在#projectname#.client.model 中进行。
我的服务接口(interface)在#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 可序列化所需的一切,并且将 Vacancy 的 ArrayList 作为 RPC 的返回类型算作具有 Vacancy 作为返回类型.. 对吗?我做错了什么?

提前致谢!

最佳答案

这通常是由于使用了不可序列化的类引起的,如果您的类没有实现 com.google.gwt.user.client.rpc.IsSerializable 或者您忘记了添加一个空的构造函数。

要传递 bean,您必须满足以下要求(来自 GWT 站点):

  1. 它实现了 Java Serializable 或 GWT IsSerializable接口(interface),要么是直接的,要么是因为它派生自父类(super class)确实如此。
  2. 它的非最终的、非 transient 的实例字段是他们自己可序列化
  3. 它有一个默认的(零参数)构造函数,可以任意访问修饰符(例如 private Foo(){} 将起作用)

即使您满足这些要求,GWT 编译器也可能会说:

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 = @

问题可能有不同的原因。这是他用于解决问题的完整 list :

  1. 验证该类是否具有默认构造函数(不带参数)
  2. 验证该类实现了 Serializable 或 IsSerializable 或实现扩展 Serializable 或扩展类的接口(interface)实现序列化
  3. 验证该类是否在 client.* 包或......
  4. 验证,如果该类不在client.*包中,即编译在您的 GWT xml 模块定义。默认存在。如果您的类(class)在另一个包中,则必须添加它源。例如,如果你的类(class)在域下。*你应该将其添加到 xml 作为 .请注意,该类不能属于服务器包! GWT 页面上的更多详细信息: http://code.google.com/webtoolkit/doc/latest/DevGuideOrganizingProjects.html#DevGuideModuleXml
  5. 如果您要包含来自另一个 GWT 项目的类,您必须将继承添加到您的 xml 模块定义中。例如,如果您的Foo 类在您必须添加的包 com.dummy.domain 中 到模块定义。更多细节在这里: http://code.google.com/webtoolkit/doc/latest/DevGuideOrganizingProjects.html#DevGuideInheritingModules
  6. 如果您要包含另一个 GWT 项目中的类,该项目发布为一个 jar 验证 jar 是否还包含源代码,因为 GWT重新编译传递给客户端的类的 Java 源代码。

PS:复制自http://isolasoftware.it/2011/03/22/gwt-serialization-policy-error/因为该站点当前不可用。如果您想阅读原始文章,请使用上述 URL 从谷歌搜索并从谷歌网络缓存中读取。

关于java - GWT - RPC 序列化异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9534484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com