首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenJ9上的Hibernate XML配置(JDK14)

OpenJ9上的Hibernate XML配置(JDK14)
EN

Stack Overflow用户
提问于 2020-06-01 19:02:00
回答 1查看 309关注 0票数 0

我正在尝试加载OpenJ9 (JDK14)上的Hibernate XML配置,但是由于JAXB不再是JDK的一部分,所以我得到了这个错误:

代码语言:javascript
复制
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.ValidationEventHandler

我尝试在:How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException in Java 9上遵循一些答案,但似乎没有一个在OpenJ9上工作,当我试图包括任何依赖项时,我得到了以下错误:

代码语言:javascript
复制
Caused by: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
 - with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory]
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:278)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:421)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662)
    at org.hibernate.boot.cfgxml.internal.JaxbCfgProcessor.unmarshal(JaxbCfgProcessor.java:122)
    ... 5 more
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:788)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:1081)
    at javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:122)
    at javax.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:155)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:276)
    ... 9 more
EN

回答 1

Stack Overflow用户

发布于 2020-06-02 15:14:19

我找到了拼图中缺失的部分,需要在javax.xml.bind.JAXBContextFactory属性中设置系统。

因此,解决方案是将JAXB添加到依赖项列表中:

代码语言:javascript
复制
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>org.eclipse.persistence.moxy</artifactId>
            <version>2.7.3</version>
        </dependency>

然后在代码中(或当JVM启动时)设置system属性,使其指向正确的工厂。

代码语言:javascript
复制
    System.setProperty("javax.xml.bind.JAXBContextFactory", "org.eclipse.persistence.jaxb.JAXBContextFactory");

最后,因为我是在一个定制的类加载器中运行,所以必须设置ContextClassLoader,否则将找不到工厂。

代码语言:javascript
复制
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62130704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档