【问题标题】:JAXB dependency conflict?JAXB 依赖冲突?
【发布时间】:2019-12-24 14:59:55
【问题描述】:

我在使用 docx4j 时遇到了一个错误,并且可能找到了它发生的原因:

javax.xml.bind.JAXBException: JAXB: Can't instantiate JAXB Reference Implementation
 - with linked exception:
[java.lang.ClassNotFoundException: org.docx4j.jaxb.ri.NamespacePrefixMapper]

在我的项目中,我使用 docx4j-JAXB-Internal v.8.1.2 + docx4j-export-fo v.8.1.2(来自 Maven)

我也使用 Hibernate (hibernate-core-5.4.2) 正如您在他们的 POM 中看到的,依赖项包含:

  1. javax.xml.bind -> jaxb-api v.2.3.1
  2. org.glassfish.jaxb -> jaxb-runtime v.2.3.1

所以,当我来到NamespacePrefixMapperUtils::getPrefixMapper

它试图找到“com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl”,

  • 指 docx4j-JAXB-Internal,

但我得到“com.sun.xml.bind.v2.runtime.JAXBContextImpl”

  • 指休眠 -> glassfish -> jaxb-runtime

我认为存在依赖冲突,我该如何解决? 谢谢

【问题讨论】:

    标签: hibernate jaxb docx4j


    【解决方案1】:

    解决了这个问题:

    在文件夹中

    resources/META-INF/services
    

    我创建了一个名为 javax.xml.bind.JAXBContext

    的文件

    然后我把这个字符串放进去:

    com.sun.xml.internal.bind.v2.ContextFactory

    被覆盖的默认上下文工厂 所以这是一种利润

    【讨论】:

    • 鉴于 Hibernate 的部门,您是否尝试过使用 search.maven.org/artifact/org.docx4j/docx4j-JAXB-ReferenceImpl/… 而不是 docx4j-JAXB-Internal v.8.1.2?
    • @JasonPlutext 我没有,因为 docx4j-Getting-started(在关于 Maven 的部分)中的第一条评论是:要使用 docx4j 8.0.0,请添加一个且仅一个以下内容您的项目: ... docx4j-JAXB-Internal ...,所以我使用 java8 并且我理解这个评论(我在网络上也看到过类似的 cmets)使用 JAXB 内部
    猜你喜欢
    • 1970-01-01
    • 2011-03-12
    • 2021-12-14
    • 2022-01-24
    • 2021-12-03
    • 2013-06-24
    • 2015-12-03
    • 2018-10-24
    相关资源
    最近更新 更多