Несоответствие версии класса ValidationException - PullRequest
0 голосов
/ 02 июня 2010

У меня есть простое EJB-приложение, которое я могу без проблем развернуть и протестировать на локальном экземпляре WebLogic (v10.3.0.0). Мне нужно развернуть это на удаленном сервере WL (v10.3.3.0) и проверить его с локальной машины. Развертывание прошло успешно, но когда я пытаюсь запустить любой из клиентов из JDeveloper, я получаю эту ошибку:

<2010.06.02. 16:08:36 CEST> <Error> <RJVM> <BEA-000503> <Incoming message header or abbreviation processing failed
 java.io.InvalidClassException: org.eclipse.persistence.exceptions.ValidationException; local class incompatible: stream classdesc serialVersionUID = 3793659634176227230, local class serialVersionUID = -7605463488982202416
java.io.InvalidClassException: org.eclipse.persistence.exceptions.ValidationException; local class incompatible: stream classdesc serialVersionUID = 3793659634176227230, local class serialVersionUID = -7605463488982202416
    at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:562)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1316)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
    at weblogic.rjvm.ClassTableEntry.readExternal(ClassTableEntry.java:36)
    at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1792)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1751)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
    at weblogic.rjvm.InboundMsgAbbrev.readObject(InboundMsgAbbrev.java:65)
    at weblogic.rjvm.InboundMsgAbbrev.read(InboundMsgAbbrev.java:37)
    at weblogic.rjvm.MsgAbbrevJVMConnection.readMsgAbbrevs(MsgAbbrevJVMConnection.java:227)
    at weblogic.rjvm.MsgAbbrevInputStream.init(MsgAbbrevInputStream.java:173)
    at weblogic.rjvm.MsgAbbrevJVMConnection.dispatch(MsgAbbrevJVMConnection.java:439)
    at weblogic.rjvm.t3.MuxableSocketT3.dispatch(MuxableSocketT3.java:322)
    at weblogic.socket.AbstractMuxableSocket.dispatch(AbstractMuxableSocket.java:394)
    at weblogic.socket.SocketMuxer.readReadySocketOnce(SocketMuxer.java:917)
    at weblogic.socket.SocketMuxer.readReadySocket(SocketMuxer.java:849)
    at weblogic.socket.JavaSocketMuxer.processSockets(JavaSocketMuxer.java:283)
    at weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:29)
    at weblogic.work.ExecuteRequestAdapter.execute(ExecuteRequestAdapter.java:21)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:145)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:117)

Может кто-нибудь объяснить, почему я получаю эту ошибку, и что я могу сделать, чтобы устранить ее?

1 Ответ

0 голосов
/ 02 июня 2010

У вас есть две версии класса, вероятно, в двух разных JAR: s. Поскольку в Java EE часто используются иерархии загрузчиков классов, может случиться так, что один фрагмент кода загружает класс из одного загрузчика классов, а другой фрагмент кода загружает его из другого загрузчика классов. Экземпляры этих двух классов (с одинаковыми именами) не считаются равными, даже если они будут иметь одинаковый serialVersionId.

То, что вы видите, это два разных экземпляра ValidationException, созданных из разных классов, загруженных из разных загрузчиков классов (возможно, из разных JAR). JDeveloper, вероятно, включает в себя свою собственную версию, которая конфликтует с версиями WebLogic. Включаете ли вы в свой файл jar проверки eclipse?

...