【问题标题】:An RPC error While working with Hibernate In GWT Plotform在 GWT Plotform 中使用 Hibernate 时出现 RPC 错误
【发布时间】:2012-12-19 12:21:29
【问题描述】:

我一直在尝试通过关闭链接gwt with hibernate 来使用休眠,但我遇到了闲置错误,但我很确定我的休眠部分工作正常 但是当我尝试将 hibernate 与 gwt 集成时,它会发出警告,并且数据不会填充到客户端

    Starting Jetty on port 8888
   [WARN] Exception while dispatching incoming RPC call
com.google.gwt.user.client.rpc.SerializationException: Type 'com.SomeDTO' 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 = com.SomeDTO@f8dc0f
    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.impl.ServerSerializationStreamWriter.serializeClass(ServerSerializationStreamWriter.java:709)
    at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:748)
    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 com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:263)
    at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:178)
    at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)
    at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:62)
    at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118)
    at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
    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:205)
    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)

【问题讨论】:

    标签: hibernate gwt gwt-platform gwtp


    【解决方案1】:

    hibernate-validator-*.jar 必须在你的战争的 WEB-INF/lib 中才能工作

    【讨论】:

    • 谢谢,是的,刚才我找到了它,但即使在放弃了我在问题中显示的链接中给出的步骤之后,我仍然收到 SerializationException 我正在编辑问题以显示错误
    • 您使用的对象。你实现了 IsSerializable 吗?参考:developers.google.com/web-toolkit/doc/latest/…。即 SomeDTO 类实现 Serializable、IsSerializable
    • 我正在我的 DTO 类中实现 Serializable 接口,我是否也需要实现 IsSerializable
    • Serializable 类必须包含在序列化策略中,该策略是在编译时生成的,而 IsSerializable 类没有这个要求。如果您正在处理未在 Web 应用程序上共享的纯 gwt 和 DTO 类或其他应用程序。所以实现 IsSerializable。还有 Serializable 和 IsSerializable 工作
    • 我都试过了,但它仍然给出同样的错误,任何建议,我做错了什么
    【解决方案2】:

    我不知道您的问题是否已解决,但请检查您的实体是否实现了 Serializable 并有一个空的构造函数。

    【讨论】:

    • 是的,我有 Serializable 和空构造函数
    【解决方案3】:

    我为这个问题找到了一些简单的解决方案。当我使用 gwt 平台时,我在 SomeResult 类(实现结果接口)的帮助下,而不是创建一个新的 pojo 类并将其填充到客户端我在 SomeResult 中创建一个参数化的构造函数来保存数据库数据和只需将其发送给客户端。

    以下是一些示例代码

        public class SomeActionResult implements Result {
            private String str;
            private int myInt;
    
        public SomeActionResult(String str,
             int myInt){
        this.str=str;
        this.myInt=myInt;
        }
        //getters&setters
    
    }
    

    在休眠中,我将拥有一个返回 SomeActionResult(str,myInt) 的方法

    public class MyDao{
        public static SomeActionResult getData(){
        //a hibernate query to retrieve the data and set them to str, myInt
    
        retrun new SomeActionResult(str,myInt);
        }
    }
    

    现在在我的 SomeActionHandler 类的 execute() 方法中,我正在调用 getData(),如下所示

    public SomeActionResult execute(SomeAction action,ExecutionContext){
    
    return MyDao.getData();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 2018-10-09
      • 1970-01-01
      • 2013-10-05
      • 2013-05-20
      • 1970-01-01
      相关资源
      最近更新 更多