首页 > 解决方案 > Java:在 JAva 9+ 中已弃用 JAXB。使用带有 DOCX4J 的 JAXB 将 XML 数据与 MS Word 模板绑定。任何人都知道 Java 9+ 中的替代方案

问题描述

我继承了一些从 XML 文件中获取数据并将数据插入 Microsoft Word 文档的 Java 代码。Java 代码使用两个文件作为输入。一种是带有数据的 XML 文件,另一种是用作输出文件模板的 Microsoft Word 文档。Word 模板具有内容控制对象,这些对象映射到 XML 文件中的 XML 标记。当 Java 程序执行时,它使用 Word 模板和 XML 文件通过 Word 模板中的 XML 映射将这两个文件“绑定”在一起。代码的输出是模板格式的 Word 文档,但包含来自 XML 文件的更新数据。
绑定来自 DOCX4J 库,即“Docx4J.bind()”。此方法使用名为 Javax.xml.bind.JAXBContext 的 jar 中的 JAXB.Content。问题是 JAXB 库和方法都已被弃用,并从 Java 9 及更高版本中完全删除。因此,使此绑定方法起作用的唯一方法似乎是保留在 Java 版本 8 中。有人要求我找到 JAXB.Context 的替代方法,以便可以在 Java 13 环境中编译和运行 Java 代码。

我的问题是:Java 11,12 或 13 中是否有类似的 JAXB 替代品?如果是这样,您能否指点我一些文档以了解更多信息。感谢您的意见和帮助。

标签: javaxmlms-wordjaxbdocx4j

解决方案


JAXB 在最近的 JDK 中不再提供,但 JAXB 本身在参考实现和 MOXy 中仍然很容易获得。不推荐使用 JAXB。

看看https://www.docx4java.org/downloads.html

正如它所说,只需添加一个 docx4j-JAXB-ReferenceImpl 或 docx4j-JAXB-MOXy。(只有 docx4j-JAXB-Internal 不适用于您感兴趣的 Java 版本)

您可以使用 8.x 系列或 11.x 系列。8.x 系列是为 Java 8 编译的,而 11.x 系列是为 Java 11+ 编译的,包括模块信息。

两者都可以在 Java 13 上运行(对于 docx4j 8,至少是类路径)。目前,8.x系列倾向于优先获得新功能。

因此,总而言之,在 Java 13 上运行 Docx4J.bind 根本不会遇到任何问题!


推荐阅读