У меня есть проект со следующей конфигурацией:
- Сервер приложений 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, созданную с использованием CXF wsdl2java.
- «Y» имеет бизнес-класс (в каталоге
WEB-INF/classes
), который вызывает клиент веб-службы SOAP в «Z».
Эта конфигурация хорошо работает в моей среде разработки (Rational Application Developer со средой выполнения WebSphere AS 6.1). Но в среде QA у меня было следующее исключение (обратите внимание на полужирный шрифт в трассировке стека):
org.apache.cxf.bus.extension.ExtensionException
at org.apache.cxf.bus.extension.Extension.loadInterface(Extension.java:134)
at org.apache.cxf.bus.extension.ExtensionManagerImpl.loadAndRegister(ExtensionManagerImpl.java:160)
at org.apache.cxf.bus.extension.ExtensionManagerImpl.getBeansOfType(ExtensionManagerImpl.java:256)
at org.apache.cxf.bus.CXFBusImpl.getExtension(CXFBusImpl.java:99)
at org.apache.cxf.endpoint.ClientImpl.notifyLifecycleManager(ClientImpl.java:186)
at org.apache.cxf.endpoint.ClientImpl.(ClientImpl.java:117)
at org.apache.cxf.frontend.ClientFactoryBean.createClient(ClientFactoryBean.java:104)
at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:92)
at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:152)
at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:142)
at org.apache.cxf.jaxws.ServiceImpl.createPort(ServiceImpl.java:464)
at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:331)
at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:318)
at javax.xml.ws.Service.getPort(Service.java:46)
at web.service.client.implementation.at.z.module.method(Unknown Source)
at business.class.at.y.web.module.method(AvisoCobroDAO.java:86)
... 32 more
Caused by: java.lang.ClassNotFoundException: org.apache.cxf.endpoint.ClientLifeCycleManager
at com.ibm.ws.classloader.CompoundClassLoader.findClass(CompoundClassLoader.java:472)
at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:373)
at java.lang.ClassLoader.loadClass(ClassLoader.java:561)
at org.apache.cxf.bus.extension.Extension.loadInterface(Extension.java:132)
... 51 more
Похоже, что CompoundClassLoader
(который работает на уровне приложения) пытается загрузить класс CXF, который существует на уровне выполнения сервера.
Я надеюсь, что кто-нибудь поможет мне с этой проблемой. Буду очень-очень благодарен.