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 调用时出现异常的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Maven 属性将属性设置为 gwt.xml 文件?