Java WebSphere6.1上的CXF类加载问题
我有一个具有以下配置的项目:Java WebSphere6.1上的CXF类加载问题,java,websphere,classloader,cxf,Java,Websphere,Classloader,Cxf,我有一个具有以下配置的项目: WebSphere Application Server 6.1.0.19 wsdl4j-1.6.2.jar位于$WAS_ROOT/java/jre/lib/ext目录(覆盖WAS 6.1中包含的wsdl4j-1.6.1) cxf-2.4.0.jar(和其他依赖项)位于$WAS\u ROOT/lib/ext目录下 带有Web模块“Y”的EAR“X” Web模块“Y”有一个JAR模块“Z”(位于Web-INF/lib目录) “Z”有一组类,这些类实现了使用CXF的w
- WebSphere Application Server 6.1.0.19
- wsdl4j-1.6.2.jar位于
目录(覆盖WAS 6.1中包含的wsdl4j-1.6.1)$WAS_ROOT/java/jre/lib/ext
- cxf-2.4.0.jar(和其他依赖项)位于
目录下$WAS\u ROOT/lib/ext
- 带有Web模块“Y”的EAR“X”
- Web模块“Y”有一个JAR模块“Z”(位于
目录)Web-INF/lib
- “Z”有一组类,这些类实现了使用CXF的wsdl2java生成的SOAP Web服务
- “Y”有一个业务类(位于
目录),它在“Z”处调用SOAP WEB服务客户端WEB-INF/classes
org.apache.cxf.bus.extension.ExtensionException
位于org.apache.cxf.bus.extension.extension.loadInterface(extension.java:134)
位于org.apache.cxf.bus.extension.ExtensionManagerImpl.loadAndRegister(ExtensionManagerImpl.java:160)
位于org.apache.cxf.bus.extension.ExtensionManagerImpl.getBeansOfType(ExtensionManagerImpl.java:256)
位于org.apache.cxf.bus.CXFBusImpl.getExtension(CXFBusImpl.java:99)
位于org.apache.cxf.endpoint.ClientImpl.notifyLifecycleManager(ClientImpl.java:186)
位于org.apache.cxf.endpoint.clientmpl.(clientmpl.java:117)
位于org.apache.cxf.frontend.ClientFactoryBean.createClient(ClientFactoryBean.java:104)
位于org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:92)
在org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:152)上
位于org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:142)
位于org.apache.cxf.jaxws.serviceinpl.createPort(serviceinpl.java:464)
位于org.apache.cxf.jaxws.serviceinpl.getPort(serviceinpl.java:331)
位于org.apache.cxf.jaxws.serviceinpl.getPort(serviceinpl.java:318)
在javax.xml.ws.Service.getPort(Service.java:46)
位于web.service.client.implementation.at.z.module.method(未知源)
at business.class.at.y.web.module.method(AvisoCobroDAO.java:86)
... 32更多
原因:java.lang.ClassNotFoundException:org.apache.cxf.endpoint.ClientLifeCycleManager
位于com.ibm.ws.classloader.CompoundClassLoader.findClass(CompoundClassLoader.java:472)
位于com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:373)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:561)
位于org.apache.cxf.bus.extension.extension.loadInterface(extension.java:132)
... 还有51个
似乎CompoundClassLoader
(在应用程序级别工作)正在尝试加载存在于服务器运行时级别的CXF类
我希望有人能帮我解决这个问题。我将非常感激。将罐子放在WAS_HOME/lib/ext应该是你最后的选择 始终尝试PARENT_LAST classloader模式,并首先选择您的类/JAR 这将为您避免许多问题 应用程序服务器启动将广泛使用此目录,如果发生冲突,它甚至可能无法启动 解决问题的最佳方法是打开类加载,查看本机的stdout/stderr文件,看看谁在加载有问题的类 B邮件 你的意思是说不同的话吗?此路径位于类装入器链的高位,因此将在前面(使用默认的父类_优先)检查它 这将是第二级(在JDK的引导类加载器之后)及其扩展 嗯
MangluClientLifecycleManager类位于何处?它在cxf-2.4.0.jar中吗?请注意,将JAR放入WAS_HOME/lib/ext/实际上不会覆盖WAS类,因为该目录中的JAR位于类路径的末尾,WAS扩展类装入器使用“父类优先”类装入。@bMail,@Manglu,感谢您的回复@Manglu,你把Jar放在
WAS_HOME/lib/ext
上是对的,事实是'Z'Jar模块包含其他项目所需的其他业务类,我不能把它放在更高的级别上,因为服务器上的不同项目可能有不同的版本。好消息是,我启用了类装入器Visor,重新启动服务器并运行业务规则,它就可以工作了!黑魔法?我永远不会知道。。。