4

我在 JBoss5 中运行了 2 个应用程序。

他们互相发送数据。我在其中一个类中添加了一个字段,Serializable而没有更改serialVersionUID. 根据Java 序列化规则,此类仍然向后兼容。

我面临的问题是,每当我尝试通过 EJB 调用将 JBoss 从一个应用程序发送到另一个应用程序时,JBoss 都会抛出一个 IOException:

java.io.IOException: Current classpath has lesser fields on com.myproject.MyEntity than its original version
    org.jboss.serial.classmetamodel.StreamingClass.readStream(StreamingClass.java:98)
    org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:381)
    org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:82)
    org.jboss.serial.objectmetamodel.DataContainer$DataContainerInput.readObject(DataContainer.java:845)
    org.jboss.serial.io.MarshalledObjectForLocalCalls.get(MarshalledObjectForLocalCalls.java:60)
    org.jboss.ejb3.remoting.IsLocalInterceptor.invokeLocal(IsLocalInterceptor.java:101)
    org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:72)
    org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:62)
    com.sun.proxy.$Proxy881.invoke(Unknown Source)
    org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:207)
    org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:164)
    com.sun.proxy.$Proxy1063.getAlertScheduleForTrip(Unknown Source)
    com.myclient.ejb.MyEntityLoadingBean.loadMyEntities(MyEntityLoadingBean.java:256)
    ...

有什么方法可以告诉 JBoss 避免使用它的序列化模块而使用标准的 Java 序列化?这个错误似乎已知并且在 JBoss JIRA 中已有几年了:https ://issues.jboss.org/browse/JBSER-120

我试过用 JBoss 启动,-Dserialization.jboss=false但没有用(我认为这可能只适用于 JBoss Cache)。

4

0 回答 0