当前位置: 首页 > 知识库问答 >
问题:

jaxb-impl和jaxb-runtime有什么区别?

龙令雪
2023-03-14

显然是com。太阳xml。绑定:jaxb impl工件在maven存储库中被标记为“旧jaxb运行时模块”(参见下面的链接),但这两个工件仍在获得新版本:

https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-impl

这回答了我应该在Maven项目中为JAXB RI使用哪些工件?没有澄清差异。

以上问题和这个问题的公认答案是如何解决java。lang.NoClassDefFoundError:javax/xml/bind/JAXBException得出结论,对于Java 9,应该使用:org。玻璃鱼。jaxb:jaxb运行时

但是我有使用com.sun.xml.bind: jaxb-impl的代码,它看起来运行良好。那么迁移到jaxb-runtime会有什么损失或收益呢?

即使是最新的(我写这篇文章时是3.0.2)版本也可用于“旧”jaxb impl模块。如果甲骨文不再这么做了,谁来制作com。太阳xml。绑定:jaxb impl工件?它是干什么的?为什么它不与jaxb运行时共享Maven组坐标?

是否有任何中心位置可以清楚地记录JAXB的当前状态?

现在JAXB有太多的混淆。

P、 我暂时需要与Java 8保持兼容,所以我不能选择3。x和2.4。x似乎是一种放弃的尝试,试图修复模块化,而当模块化从JDK中分离出来时,他们愚蠢地打破了模块化。

共有1个答案

顾跃
2023-03-14

jaxb impl和jaxb runtime之间的唯一区别是打包:jaxb impl在jar内捆绑istack/txw2,而jaxb runtime通过单独的依赖项提供它们。

我在最后一天一直在试图弄明白这一点,这令人难以置信地困惑。尤其是当您试图避免使用java时。xml。绑定到雅加达。xml。绑定迁移。jaxb impl 2.3中到处都是过时的信息和一些损坏的版本。x释放线。

据我所知,GlassFish提供了JAXB参考实现。后来它被转移到了EE4J,但从该项目开始,针对这两组坐标继续发布。显示为com。太阳xml。绑定:jaxb ri是最新完整捆绑包发布的地方:

https://github.com/eclipse-ee4j/jaxb-ri/

弄清楚这段历史后,真正的混乱是没有一个工件反映javax.xml.bindjakarta.xml.bind在它们的工件坐标中移动,只有在版本中。这意味着如果你在生态系统中需要两者同时存在,你会过得很糟糕。

例如,2.3.3版本从依赖javax更改为依赖javax。xml。绑定:jaxb api到雅加达。xml。绑定:雅加达。xml。绑定api,因为在2。x、 雅加达工件提供了javax。xml。绑定包。在3.0.0版本中,它提供了雅加达。xml。绑定。

3.0.0版本的实现是相同的,这意味着虽然早期版本可以在运行时愉快地存在,但您无法在构建工具中解决它们,冲突解决将打破javax的传统使用。xml。绑定API。

对于需要两个API共存而不迁移遗留代码的项目:

  • 对于javax。xml。绑定使用com。太阳xml。绑定:jaxb impl:2.3.6。忽略3.0.0及更高版本。添加对javax的显式依赖。xml。绑定:jaxb-api:2.3.1,这样您就有了一个提供javax的包。xml。绑定API

使用tomcat jakartaee迁移工具重写类,以便在构建时或部署时使用新API。如果使用Gradle,可以将其用于伪影变换。

您可以根据您的打包首选项使用运行时的任一坐标:

  • com。太阳xml。绑定:jaxb impl:4.0.0

两者都依赖于jakarta.xml.bind:jakarta.xml.bind-apijakarta.xml.bind包命名空间。

 类似资料:
  • 在什么情况下我需要在vs之间进行选择?在我的项目中同时拥有和会导致任何类加载冲突吗?

  • 我正试图将类从版本更新到更新的版本,以便与兼容,因为以下消息: JAVAlang.LinkageError:您正在尝试运行JAXB 2.0运行时(从jar:file:/opt/tomcat/appName/WEB-INF/lib/JAXB-runtime-2.3.1.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class),但在类路径的前面有旧

  • 问题内容: 在非官方指南中有一个占位符答案,带有指向(对我而言)似乎无关的文章的链接。 我使用XJC生成我的JAXB类,尽管它们大多数按预期相互映射,但有些元素被映射到。这对于带有循环的图最令人讨厌,其中有时Foo元素的父节点将是,而它本身没有父属性,从而中断了循环。 我可以想到各种解决方法,但是如果有人可以向我解释这种行为,那就更好了。为什么JAXB有时将元素映射到而不是Foo? 问题答案: 在

  • 问题内容: 我是使用JAXB的新手,并且使用JAXB 2.1.3的xjc从我的XML模式生成一组类。除了为我的架构中的每个元素生成一个类之外,它还创建了一个ObjectFactory类。 似乎没有什么阻止我直接实例化元素的,例如 而教程似乎更喜欢 如果查看ObjectFactory.java,我会看到: 那怎么办?为什么我还要麻烦保持ObjectFactory类?我假设如果我从更改后的模式重新编译

  • 问题内容: 目前,我正在使用Spring Web服务,hibernate和JAXb进行项目。 1)我使用IDE的“hibernate代码生成”生成了hibernatebean, 2)另外,我已经使用maven编译器生成了jaxb bean。 .. 现在,我的问题是 1)这是正确的方法吗?(有那么多豆子)。 2)我应该使用JAXb bean来处理到服务层吗?如何使各层解耦? 3)或者,我是否需要创建

  • 是否有可能有一个使用值 AND 元素呈现的 JAXB 元素? 我正在尝试渲染类似下面的内容: 它甚至可能不是有效的XML,但不幸的是,我试图渲染的东西需要它,而不是可选的。 如果有一个值和元素,则会给出一个。