当前位置: 首页 > 工具软件 > Neethi > 使用案例 >

webservice发布项目不能加载org.apache.neethi.PolicyBuilder类

柳德义
2023-12-01

由于项目中用到了CXF发布webservice应用,客户最终要部署要was9上面.

使用的CXF版本是3.1.1,在tomcat下测试都好好的,发布到was9上面就开始报错:

Caused by: org.apache.cxf.bus.extension.ExtensionException: Could not load extension class org.apache.cxf.ws.policy.PolicyBuilderImpl.

at org.apache.cxf.bus.extension.Extension.tryClass(Extension.java:182)

at org.apache.cxf.bus.extension.Extension.getClassObject(Extension.java:194)

at org.apache.cxf.bus.extension.ExtensionManagerImpl.activateAllByType(ExtensionManagerImpl.java:142)

at org.apache.cxf.bus.extension.ExtensionManagerBus.<init>(ExtensionManagerBus.java:126)

at org.apache.cxf.bus.extension.ExtensionManagerBus.<init>(ExtensionManagerBus.java:138)

at org.apache.cxf.bus.spring.SpringBus.<init>(SpringBus.java:47)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

at java.lang.reflect.Constructor.newInstance(Constructor.java:513)

at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126)

... 39 more

Caused by: java.lang.NoClassDefFoundError: org/apache/neethi/PolicyBuilder

at java.lang.ClassLoader.defineClass1(Native Method)

at java.lang.ClassLoader.defineClass(ClassLoader.java:621)

at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)

at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2733)

at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1124)

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1612)

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)

at org.apache.cxf.bus.extension.Extension.tryClass(Extension.java:163)

... 49 more

Caused by: java.lang.ClassNotFoundException: org.apache.neethi.PolicyBuilder

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)

at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)

... 57 more

org.apache.cxf.bus.extension.ExtensionException: Could not load extension class org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl.

 

解决办法:

首先,在tomcat下运行时可以的,由于是将项目发布到was上的,需要逐步进行排除检查:

第一步:检查打包好的项目的classpath下面有没有neethi-3.1.1.jar,如果没有则加载到项目中;

第二步:CXF 与 websphere 会发生不兼容,处理方式是在websphere控制台创建共享库,并引入neethi-3.1.1.jar

第三步:安装项目的时候,指引共享库,并调整WAS 的类加载顺序,并优先去父类寻址。

 

备注:

1、was调用jar包默认顺序是先子类后父类,找不到jar才去父类寻找。 

2、对于was发布项目的jar包冲突问题,主要会发生在不同应用之间的同名jar,导致版本问题。可以通过共享库来解决。 

 

 

 类似资料: