Java:JAVA 9+中已弃用的JAXB结合使用JAXB和DOCX4J来将XML数据与MS Word模板绑定任何人都知道Java 9+中的替代方法

问题描述

我继承了一些Java代码,这些Java代码从XML文件获取数据并将数据插入到Microsoft Word文档中。 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?如果是这样,请您指点一些文档以了解更多信息。 感谢您的输入和帮助。

解决方法

在最近的JDK中不再提供JAXB,但在参考实现和MOXy中仍可轻松使用JAXB本身。不推荐使用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+进行了编译,并包含module-info。

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

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