Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java WebSphere6.1上的CXF类加载问题_Java_Websphere_Classloader_Cxf - Fatal编程技术网

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_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的wsdl2java生成的SOAP Web服务
  • “Y”有一个业务类(位于
    WEB-INF/classes
    目录),它在“Z”处调用SOAP WEB服务客户端
此配置在我的开发环境(带有WebSphereAS6.1运行时的RationalApplicationDeveloper)中运行良好。但在QA环境中,我有以下例外(请注意堆栈跟踪中的粗体):


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的引导类加载器之后)及其扩展


Manglu

ClientLifecycleManager类位于何处?它在cxf-2.4.0.jar中吗?请注意,将JAR放入WAS_HOME/lib/ext/实际上不会覆盖WAS类,因为该目录中的JAR位于类路径的末尾,WAS扩展类装入器使用“父类优先”类装入。@bMail,@Manglu,感谢您的回复@Manglu,你把Jar放在
WAS_HOME/lib/ext
上是对的,事实是'Z'Jar模块包含其他项目所需的其他业务类,我不能把它放在更高的级别上,因为服务器上的不同项目可能有不同的版本。好消息是,我启用了类装入器Visor,重新启动服务器并运行业务规则,它就可以工作了!黑魔法?我永远不会知道。。。