GWT:为 com.extjs.gxt.ui.client.data.BaseListLoadResult 分派传入 RPC 调用时出现异常

Posted

技术标签:

【中文标题】GWT:为 com.extjs.gxt.ui.client.data.BaseListLoadResult 分派传入 RPC 调用时出现异常【英文标题】:GWT: Exception while dispatching incoming RPC call for com.extjs.gxt.ui.client.data.BaseListLoadResult 【发布时间】:2015-03-10 12:26:10 【问题描述】:

我在 RPC 调用中有一个 SerializationException。 GWT 版本为:2.4.0. Extjs.gxt 库版本为:gxt-2.3.1-gwt22. 如果我在 tomcat 7 中部署我的应用程序,它可以工作,但在 glassfish 中 - 不。 请帮帮我。 服务器是 Glassfish v3

Exception while dispatching incoming RPC call
com.google.gwt.user.client.rpc.SerializationException: Type 'com.extjs.gxt.ui.client.data.BaseListLoadResult' 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.extjs.gxt.ui.client.data.BaseListLoadResult@5dc57a
    at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:667)
    at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:130)
    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:587)
    at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:605)
    at com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java:471)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:563)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:211)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:251)
    at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
    at java.lang.Thread.run(Thread.java:619)

我的课程:

public interface UnitServiceAsync 
    void findAll(AsyncCallback<ListLoadResult<OrgUnitDTO>> callback);


@RemoteServiceRelativePath("Unit")
public interface UnitService extends RemoteService 

    ListLoadResult<OrgUnitDTO> findAll();


public class PersistenceService extends RemoteServiceServlet 
    ...

及其实现:

public class UnitServiceImpl extends PersistenceService implements UnitService 
    private static final long serialVersionUID = -1433248587426826168L;

    @Override
    public ListLoadResult<OrgUnitDTO> findAll() 
        ...
        List<OrgUnitDTO> subList = new ArrayList<OrgUnitDTO>(); 
        ...
        return new BaseListLoadResult<OrgUnitDTO>(subList);
    


public class OrgUnitDTO extends BaseModel implements IsSerializable 
private static final long serialVersionUID = 2392916533158255302L;

    //getters
    //setters

    public OrgUnitDTO() 

我经历了很多解决方案,例如: 类应实现 Serializable 或 IsSerrializable 接口,应提供默认构造函数等。 最有趣的是,在 tomcat 上它对我来说很好,但在 glassfish 上 - 这个例外。 我不知道该怎么办,请帮帮我。 谢谢。

【问题讨论】:

【参考方案1】:

我也遇到过同样的问题,但就我而言,只是在开发模式下。放置在生成的“rpc”文件夹中的所有 RPC 规则,您应该检查它在您的服务器上是否可用并且是实际的。此外,从服务器抛出的问题您可以简单地对其进行调试,问题应该出在 GWT 采用 rpc 策略并根据您的请求匹配它们的地方。

附: 根据我的经验,避免这些情况的最佳方法是不要将 GXT 类用作 dto 对象,尤其是 GXT 2 类。

【讨论】:

你能告诉我更多关于“rpc”文件夹的信息吗?文件夹是什么?放在哪里?【参考方案2】:

我解决了这个问题。 在 WEB-INF/lib 文件夹中有一个码头库。当我删除这个库时 - 一切正常。 谢谢。

【讨论】:

以上是关于GWT:为 com.extjs.gxt.ui.client.data.BaseListLoadResult 分派传入 RPC 调用时出现异常的主要内容,如果未能解决你的问题,请参考以下文章

未找到 ID 为“gwt”的插件

如何通过 Maven 属性将属性设置为 gwt.xml 文件?

如何在客户端为 GWT 使用 JAXB 注释?

如何在 GWT 中将 JSONObject 转换为 .csv?

rpc与gwt一起使用时如何将参数类型设置为inout?

GWT(客户端)=如何将对象转换为 JSON 并发送到服务器?