2010-12-01 70 views
2

这是我收到的错误。我到处寻找答案,我无法弄清楚为什么其他人没有遇到同样的问题。当我从Hibernate中检索一个Proposal对象时,会发生错误,该对象在两个属性,作者和顾问程序中与User_Info具有多对一约束。如果需要,我可以提供类和休眠配置。刚一说明,我不落实isSerializeable并有空构造......我真的很感激任何建议或帮助......GWT无法序列化我的对象从休眠

Starting Jetty on port 8888 
    [WARN] Exception while dispatching incoming RPC call 
com.google.gwt.user.client.rpc.SerializationException: java.lang.reflect.InvocationTargetException 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:760) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:723) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:612) 
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:129) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:152) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:534) 
at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:609) 
at com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java:467) 
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:564) 
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:188) 
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:224) 
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:396) 
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) 
Caused by: java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:616) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:742) 
... 30 more 
**Caused by: com.google.gwt.user.client.rpc.SerializationException: Type 'edu.scranton.segpis.client.shared.User_Info_$$_javassist_2' 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 = [email protected]** 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:610) 
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:129) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:152) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:534) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeClass(ServerSerializationStreamWriter.java:700) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:730) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:612) 
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:129) 
at com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase.serialize(Collection_CustomFieldSerializerBase.java:43) 
at com.google.gwt.user.client.rpc.core.java.util.ArrayList_CustomFieldSerializer.serialize(ArrayList_CustomFieldSerializer.java:36) 
... 35 more 
[ERROR] 500 - POST /uofsisweb/thesisproposal (127.0.0.1) 57 bytes 
    Request headers 
     Host: 127.0.0.1:8888 
     User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.12) Gecko/20101027 Ubuntu/10.10 (maverick) Firefox/3.6.12 
     Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
     Accept-Language: en-us,en;q=0.5 
     Accept-Encoding: gzip,deflate 
     Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
     Keep-Alive: 115 
     Connection: keep-alive 
     Cache-Control: no-cache 
     Referer: 

     X-GWT-Permutation: HostedMode 
    X-GWT-Module-Base: 

     Content-Type: text/x-gwt-rpc; charset=utf-8 
     Content-Length: 185 
     Pragma: no-cache 
    Response headers 
     Content-Type: text/plain 

回答

0

Hibernate使用CGLIB来改变它运行时加载的对象,这是为了使延迟加载对象关系。 Hibernate也使用内部延迟加载集合(列表,地图),具体取决于映射。

这两件事都会让GWT窒息。确保你获得“干净”对象到GWT的一种方法是通过创建对象的全新实例来克隆它们,并将所有从hibernate创建的对象设置为干净的对象。

另一种方法是进行基于反射的对象遍历,以确保没有潜在的奇怪类型。

在你的情况下,它似乎在User_Info的东西呛:

edu.scranton.segpis.client.shared.User_Info_$$_javassist_2' 

也许你可以(陆续为transient一个字段标志,只是为了看看它是哪一个)隔离有问题的领域 - 然后修复那个。

+0

感谢马丁这帮了很多。 – 2010-12-02 20:38:05