gpt4 book ai didi

java - WebSphere 6.1 上的 CXF 类加载问题

转载 作者:行者123 更新时间:2023-12-01 15:51:18 27 4
gpt4 key购买 nike

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

  • WebSphere 应用程序服务器 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_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 服务客户端。

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

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

最佳答案

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

始终尝试 PARENT_LAST 类加载器模式并首先获取您的类/jar。

这将为您避免许多问题。

应用程序服务器启动将广泛使用此目录,如果存在冲突,它甚至可能无法启动。

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

Bkail,

您的意思是要以不同的方式表达吗?该路径位于类加载器链的较高位置,因此会更早地检查它(使用默认的 PARENT_FIRST)类加载策略。

这将位于第二级(在 JDK 的 BOOT CLassloader 之后)及其扩展。

HTH

芒格鲁

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com