CXF в WebSphere 6.1 Проблемы с загрузкой классов - PullRequest
0 голосов
/ 12 мая 2011

У меня есть проект со следующей конфигурацией:

  • Сервер приложений WebSphere 6.1.0.19
  • wsdl4j-1.6.2.jar в каталоге $WAS_ROOT/java/jre/lib/ext (для перезаписи wsdl4j-1.6.1, включенного в WAS 6.1).
  • cxf-2.4.0.jar (и другие зависимости) в каталоге $WAS_ROOT/lib/ext.
  • EAR 'X' с веб-модулем 'Y' .
  • Веб-модуль 'Y' имеет JAR-модуль 'Z' (в каталоге WEB-INF/lib).
  • У 'Z' есть набор классов, которые реализуют веб-службу SOAP, сгенерированную с помощью wsdl2java CXF.
  • У 'Y' есть бизнес-класс (в каталоге WEB-INF/classes), который вызывает клиента веб-службы SOAP по адресу "Z".

Эта конфигурация хорошо работает в моей среде разработки (Rational Application Developer со средой выполнения WebSphere AS 6.1). Но в среде QA у меня было следующее исключение (обратите внимание на жирный шрифт в трассировке стека):

org.apache.cxf.bus.extension.ExtensionException<br/> at org.apache.cxf.bus.extension.Extension.loadInterface(Extension.java:134)<br/> at org.apache.cxf.bus.extension.ExtensionManagerImpl.loadAndRegister(ExtensionManagerImpl.java:160) <br/> at org.apache.cxf.bus.extension.ExtensionManagerImpl.getBeansOfType(ExtensionManagerImpl.java:256) <br/> at org.apache.cxf.bus.CXFBusImpl.getExtension(CXFBusImpl.java:99)<br/> at org.apache.cxf.endpoint.ClientImpl.notifyLifecycleManager(ClientImpl.java:186)<br/> at org.apache.cxf.endpoint.ClientImpl.(ClientImpl.java:117)<br/> at org.apache.cxf.frontend.ClientFactoryBean.createClient(ClientFactoryBean.java:104)<br/> at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:92)<br/> at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:152)<br/> at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:142)<br/> at org.apache.cxf.jaxws.ServiceImpl.createPort(ServiceImpl.java:464)<br/> at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:331)<br/> at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:318)<br/> at javax.xml.ws.Service.getPort(Service.java:46)<br/> <b>at web.service.client.implementation.at.z.module.method(Unknown Source)</b><br/> <b>at business.class.at.y.web.module.method(AvisoCobroDAO.java:86)</b><br/> ... 32 more<br/> <b>Caused by: java.lang.ClassNotFoundException: org.apache.cxf.endpoint.ClientLifeCycleManager</b><br/> <b>at com.ibm.ws.classloader.CompoundClassLoader.findClass(CompoundClassLoader.java:472)<br/> at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:373)</b><br/> at java.lang.ClassLoader.loadClass(ClassLoader.java:561)<br/> at org.apache.cxf.bus.extension.Extension.loadInterface(Extension.java:132)<br/> ... 51 more

Похоже, CompoundClassLoader (который работает на уровне приложения) пытается загрузить класс CXF, который существует на уровне среды выполнения сервера.

Я надеюсь, что кто-нибудь поможет мне с этим вопросом. Я буду очень, очень благодарен.

1 Ответ

1 голос
/ 12 мая 2011

Размещение файлов JAR в WAS_HOME / lib / ext должно быть вашим последним средством.

Всегда пробуйте режим загрузчика классов PARENT_LAST и сначала подбирайте ваши классы / банки.

Это позволит избежать ряда проблем для вас.

При запуске сервера приложений этот каталог будет широко использоваться, и при наличии конфликтов он может даже не запуститься.

Лучший способ устранения неполадок - включить загрузку классов, посмотреть файл native_stdout / stderr и посмотреть, кто загружает рассматриваемый класс (ы).

Bkail,

Вы хотели сказать что-то по-другому? Этот путь находится высоко в цепочке загрузчиков классов, поэтому он будет проверен ранее (с политикой загрузки классов PARENT_FIRST по умолчанию).

Это будет во второй ступени (после BOOT CLassloader JDK) и его расширениях.

НТН

Manglu

...