LinkageError работает с Weblogic

Я представляю поддержку WS-Security с Spring, используя Apache CXF. Приложение работает на Weblogic 10.3.6.

Наш файл build.gradle: -

    compile("org.springframework:spring-web:4.2.6.RELEASE")
    compile("org.springframework:spring-core:4.2.6.RELEASE")
    compile("org.springframework:spring-beans:4.2.6.RELEASE")
    compile("org.springframework:spring-jms:4.2.6.RELEASE")
    compile("org.springframework:spring-orm:4.2.6.RELEASE")
    compile("org.apache.cxf:cxf-rt-transports-http:3.1.6")
    compile("org.apache.cxf:cxf-rt-bindings-soap:3.1.6")
    compile("org.apache.cxf:cxf-rt-frontend-simple:3.1.6")
    compile("org.apache.cxf:cxf-rt-frontend-jaxws:3.1.6")
    compile("org.apache.cxf:cxf-rt-ws-addr:3.1.6")
    compile("org.hibernate:hibernate-core:5.1.0.Final")                     
    compile("commons-lang:commons-lang:2.6")
    compile("org.apache.ws.security:wss4j:1.6.10")
    compile("xalan:xalan:2.7.2")

Во время реализации я столкнулся со следующей ошибкой: -

    java.lang.ClassNotFoundException: org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor

Поэтому я ввел следующую зависимость для разрешения исключения

compile("org.apache.cxf:cxf-rt-ws-security:3.1.6")

Однако при перестройке и повторном развертывании приложения я сталкиваюсь со следующим исключением: -

    Caused By: java.lang.LinkageError: loader constraint violation: when resolving overridden method "com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Ljavax/xml/stream/XMLEventReader;)Ljava/lang/Object;" the class loader (instance of weblogic/utils/classloaders/ChangeAwareClassLoader) of the current class, com/sun/xml/bind/v2/runtime/unmarshaller/UnmarshallerImpl, and its superclass loader (instance of <bootloader>), have different Class objects for the type allerImpl.unmarshal(Ljavax/xml/stream/XMLEventReader;)Ljava/lang/Object; used in the signature

Я предполагаю, что это проблема ClassLoader с unmarshal() в классе UnmarshallerIml.

Я удивлен введением compile("org.apache.cxf:cxf-rt-ws-security:3.1.6") Я столкнулся с этим исключением.

Я был бы очень признателен за любое предложение о причине и возможном решении этой ошибки.

Спасибо заранее за вашу помощь.

Пит


person Pete Long    schedule 03.02.2018    source источник
comment
Привет, есть решение, которое больше не генерирует ужасную LinkageError, однако я не могу объяснить, почему это работает. Пара очень полезных ссылок для меня: - stackoverflow.com/questions/9997212/ stackoverflow.com/questions/10495254/ Оба помогли понять сообщение об исключении, поскольку оно не было очевидно, что он сообщил. ПРОДОЛЖЕНИЕ НИЖЕ   -  person Pete Long    schedule 04.02.2018
comment
По сути, проблема заключалась в том, что когда я развернул свое приложение в WebLogic, магическая загрузка класса, казалось, идентифицировала две реализации XMLEventReader(). В сообщении об исключении есть ссылка на экземпляр ‹bootloader›, который указывает на системный загрузчик классов WebLogic. Таким образом, WebLogic предоставляла реализацию XMLEventReader(). Поэтому я просканировал все банки в папке WEB-INF\lib моего приложения. три банки сделали ссылку на XMLEventReader. При ближайшем рассмотрении оказалось, что только одна банка на самом деле является реализацией. ПРОДОЛЖЕНИЕ НИЖЕ   -  person Pete Long    schedule 04.02.2018
comment
Оскорбительный jar в моей папке WEB-INF/lib был stax-api-1.0-2.jar. Теперь я понятия не имею, как введение :- compile(org.apache.cxf:cxf-rt-ws-security:3.1.6) вызвало конфликт в реализации stax-api-1.0-2.jar и WebLogic. Если кто-нибудь может объяснить это, я был бы очень признателен. Эта ошибка не является распространенной, и нет очевидных действий, которые следует предпринять в первую очередь. Я надеюсь, что этот отзыв даст кому-то направление, если вы столкнетесь с LinkageError.   -  person Pete Long    schedule 04.02.2018