java - 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 替代品?如果是这样,您能否指点我一些文档以了解更多信息。感谢您的意见和帮助。
解决方案
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 根本不会遇到任何问题!
推荐阅读
- tensorflow-data-validation - 如何以正确的格式保存 TFDV 统计信息以便重新加载?
- java - 动画 Drawable - 空对象引用
- bash - 在文件开头添加 0 以获得 5 位组
- docker - 为什么 cap_net_bind_service 在这个 nginx 嵌套 Docker 容器中不起作用?
- javascript - 如何从 API 加载数据?
- javascript - 如何使用 WKScriptMessageHandler 读取发送到父元素的 postmessage?
- c# - 从 C# 终结器调用静态方法
- go - Gorm 正在添加我不需要的不需要的 where 子句
- csv - 在图库 PIMCORE 中导入图片
- java - 使用 Selenium/Java/JMeter/chromedriver 访问 shadowDOM