首页 > 解决方案 > 热部署骆驼路由时出现 JAXB ClassNotFoundException com.sun.xml.bind.v2.ContextFactory

问题描述

是的,我知道,自从 JAXB 从 JDK 11 中删除以来,有很多问题和答案。但这一个是特定的。

我有一个 Wildfly 服务器(使用 18.0.1 和 16.0.0 测试)运行并应用了 wildfly-camel 子系统 11.0.1 补丁。该补丁安装 Camel 2.25.0

部署和热部署(当服务器启动时)骆驼路线工作正常! 直到我在同一台服务器上部署 Liferay :-(

然后骆驼路线的Hot-Deploy让我很烦

[java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory from [Module "org.apache.camel.spring" version 2.25.0...

例外。

无论我是在 JDK 11 还是 JDK 8 上运行服务器!Liferay 7.3.2 声称可以在两个 JDK 版本上运行,所以我想它与 Liferay 的构建方式有关。阅读这篇文章 http://www.descher.at/descher-vu/2019/01/java-11-jaxb-and-osgi/ 发现 JAXB 主题非常复杂,远未解决。

问题:部署的应用程序如何破坏其他工作的类路径解析?更重要的是:如何解决?

我尝试从 Liferay中删除有问题的 2 个罐子jaxb-api.jarjaxb-impl.jar 。但这没有帮助。

标签: apache-camelliferaywildfly

解决方案


事实证明,错误的根本原因是wildfly-camel 补丁的org.apache.camel.spring模块中缺少对com.sun.xml.bind的依赖项。

我详细提交了这个问题

看起来Liferay与它无关。因为理论上 jboss-modules 应该分开部署。


推荐阅读