我有一个具有以下配置的项目:


WebSphere Application Server 6.1.0.19
$WAS_ROOT/java/jre/lib/ext目录中的wsdl4j-1.6.2.jar(以覆盖WAS 6.1中包含的wsdl4j-1.6.1)。
$WAS_ROOT/lib/ext目录中的cxf-2.4.0.jar(和其他依赖项)。
带有Web模块“ Y”的EAR“ X”。
Web模块“ Y”具有一个JAR模块“ Z”(在WEB-INF/lib目录中)。
“ Z”具有一组类,这些类实现了使用CXF的wsdl2java生成的SOAP Web服务。
“ Y”具有业务类(在WEB-INF/classes目录中),该业务类在“ Z”处调用SOAP Web服务客户端。


此配置在我的开发环境(具有WebSphere AS 6.1运行时的Rational Application Developer)下很好地工作。但是在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的类。

希望有人帮我解决这个问题。我将非常感谢。

最佳答案

将罐子放在WAS_HOME / lib / ext中应该是您的最后选择。

始终尝试使用PARENT_LAST类加载器模式,并首先选择您的类/ jar。

这样可以为您避免许多问题。

App Server的启动将大量使用此目录,如果发生冲突,它甚至可能无法启动。

解决问题的最佳方法是打开类加载,然后查看native_stdout / stderr文件,并查看谁在加载有问题的类。

拜拜

您是不是要说不同的话?该路径在类加载器链中较高,因此将在更早的时间(使用默认的PARENT_FIRST)检查类加载策略。

这将在第二个梯级中(在JDK的BOOT CLassloader之后)及其扩展。

高温超导

芒鲁

关于java - WebSphere 6.1上的CXF类加载问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5971536/

10-10 07:28