UnmarshalException InvalidClassException org.eclipse.persistence.internal.helper.DatabaseTable

时间:2014-12-19 20:37:06

标签: jpa ejb-3.0

我正在使用jpa 2(EclipseLink),ejb 3和PrimeFaces开发一个应用程序,它分为jar(和jpa ejb)和一个war,同时试图让我得到这个错误:

Exception is: java.rmi.UnmarshalException: Incoming message header or abbreviation processing   failed; nested exception is: java.io.InvalidClassException:    org.eclipse.persistence.internal.helper.DatabaseTable; Local class incompatible: stream serialVersionUID   = 7408378167056177847 classdesc, the local class serialVersionUID = -8,219,935,847,209,476,671 at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.unwrapRemoteException (RemoteBusinessIntfProxy.java:121) at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.invoke (Remote 

我清楚这是SERIAL错误ID的一个版本,但我该如何解决?使用Eclipse作为ID。

感谢您的帮助!!

3 个答案:

答案 0 :(得分:2)

您可以尝试指示WebLogic Server更喜欢捆绑的jar而不是自己的jar。这可以在weblogic.xml部署描述符中完成,它看起来像这样

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">
     <container-descriptor>
        <prefer-web-inf-classes>true</prefer-web-inf-classes>
     </container-descriptor>
</weblogic-web-app>

第二个想法,持久性API是ejb jar依赖项,此设置仅适用于war模块。所以你可以试试weblogic-application.xml

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application xmlns="http://xmlns.oracle.com/weblogic/weblogic-application” 
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance 
xsi:schemaLocation=”http://xmlns.oracle.com/weblogic/weblogic-application 
http://xmlns.oracle.com/weblogic/weblogic-application/1.0/weblogic-application.xsd">
   <prefer-application-packages>
      <package-name>org.eclipse.persistence.internal.helper.*</package-name>        
   </prefer-application-packages>
</weblogic-application>

答案 1 :(得分:1)

我之前没有见过这种类型的错误,但我首先想到的是你有一个类似jar的多个版本。具体看起来像org.eclipse.persistence - &gt; javax.persistence。它可能是用一个jar /类序列化的,并用另一个jar /类反序列化。

通常在与J2EE容器和多个jar有关的错误中,application-containr中存在一个jar / version,如weblogic(可能在endorsed目录中),另一个与应用程序捆绑在一起。

如果是这种情况,解决方案是不在应用程序中包含持久性jar并委托给容器。如果您使用的是maven / gradle,请将工件标记为provided

答案 2 :(得分:1)

您好解决了这个问题,并希望与您分享,我花了一个星期才找到答案。我正在使用weblogic 10.3.5进行开发,即使我使用相同的jars EclipseLink和javax.persistence在bea / modules中来编译我的项目,它也无法正常工作。我卸载了服务器并再次安装,认为它可能是服务器的问题但总是得到相同的结果。我也尝试将jar嵌入应用程序中,但都没有工作。我将我的weblogic服务器迁移到版本10.3.6,这就是答案,我的应用程序工作,因为它最初不知道为什么会出现这个问题,但是修复了应用程序服务器的版本。非常感谢所有回复的人。