我有一个具有以下配置的项目:
$WAS_ROOT/java/jre/lib/ext
目录,(覆盖WAS 6.1中包含的wsdl4j-1.6.1)。$WAS_ROOT/lib/ext
目录。WEB-INF/lib
目录)。WEB-INF/classes
目录下),它在'Z'处调用SOAP Web服务客户端。此配置适用于我的开发环境(带有WebSphere AS 6.1运行时的Rational Application Developer)。但是在质量保证环境中,我有以下例外情况(请注意堆栈跟踪中的粗体):
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类。
我希望有人帮我解决这个问题。我将非常感激。
答案 0 :(得分:1)
将Jars放在WAS_HOME / lib / ext中应该是你最后的选择。
始终尝试PARENT_LAST类加载器模式并首先拾取您的类/ jar。
这样可以避免一些问题。
App Server启动会广泛使用此目录,如果存在冲突,它甚至可能无法启动。
排除故障的最佳方法是打开类加载并查看native_stdout / stderr文件,看看谁正在加载有问题的类。
Bkail,
你的意思是不同的说法吗?此路径位于类加载器链的高位,因此将在之前(使用默认的PARENT_FIRST)类加载策略进行检查。
这将在第二个梯级(在JDK的BOOT CLassloader之后)和它的扩展。
HTH
Manglu