我正在尝试使用在WebSphere上运行的CXF获得一个apache camel应用程序。
注意到一些错误
引起:java.lang。 IncompatibleClassChangeError :org.apache.neethi.AssertionBuilderFactory at java.lang.ClassLoader.defineClassImpl(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:262) 在java.security.SecureClassLoader.defineClass(SecureClassLoader.java:69)
这是因为org.apache.neethi类是从WAS运行时加载的,而不是来自WEB-INF / lib的neeti3.0.2.jar
这是来自类加载器的信息:
类加载:org.apache.neethi.builders.AssertionBuilder来自:file: /D:/Tools/WebSphere/AppServer/plugins/org.apache.axis2.jar
Web应用程序配置已更改为使用类加载器策略。它被设置为Parent Last。 然而,这个班似乎正在使用父母优先政策。
CXF包中是否有任何内容可以覆盖此政策?
我注意到使用Axis2和WAS
http://axis.apache.org/axis2/java/core/docs/app_server.html
避免与WebSphere的JAX-WS运行时冲突,为Axis2提到了一些额外的步骤。是否有类似的东西才能使其发挥作用?
由于 Manglu
答案 0 :(得分:3)
不是特定于Camel,但我们正在处理类似的问题。
1)如果需要,您可以使用隔离的共享库。这似乎修复了类加载器通过OSGi引入这些其他库的问题。这个解决方案并不适合所有人。
2)在设置PARENT_LAST的应用时,请确保您在正确的位置进行此操作。如果你的战争中有罐子,那么你必须在 WAR模块上设置PARENT_LAST,而不是应用程序。在WAS控制台中>应用程序>申请类型> websphere企业应用程序> MyEAR>管理模块> MyWar>更改“类装入程序顺序”并使其成为“父级最后”
3)进行更改后,您可以导出ear文件。在耳朵中,有一个文件META-INF / ibmconfig / cells / defaultCell / applications / defaultApp / deployments / defaultApp / deployment.xml具有此配置。对于maven ear's,你可以把它放到src / main /应用程序中,以便用耳包装。
希望这会有所帮助。祝你好运。
答案 1 :(得分:2)