2

我正在尝试使用在 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) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:69 )

这是因为 org.apache.neethi 类是从 WAS 运行时加载的,而不是从 WEB-INF/lib 加载的 neeti3.0.2.jar

这是来自类加载器的信息:

类加载:org.apache.neethi.builders.AssertionBuilder 来自:文件:/D: /Tools/WebSphere/AppServer/plugins/org.apache.axis2.jar

Web 应用程序配置已更改为使用类加载器策略。它设置为上一个父级。然而,这个班级似乎正在使用家长优先政策。

CXF 包中是否有任何内容可以超越此政策?

我注意到使用 Axis2 和 WAS

http://axis.apache.org/axis2/java/core/docs/app_server.html

为避免与 WebSphere 的 JAX-WS 运行时发生冲突,针对 Axis2 提到了一些额外的步骤。是否需要类似的东西才能使其正常工作?

谢谢芒鲁

4

2 回答 2

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,你可以把它放到 src/main/application 中,让它和 ear 一起打包。

希望这会有所帮助。祝你好运。

于 2013-02-08T17:20:36.133 回答
2

我们正在 Camel 邮件列表中讨论类似的主题。我建议去那里看看:http ://camel.465427.n5.nabble.com/camel-cxf-in-WebSphere-without-geronimo-jetty-depdendencies-possible-tp5726490.html

于 2013-01-30T07:20:22.487 回答