当前位置: 首页 > 知识库问答 >
问题:

JAXB API的Java 8到Java 11迁移问题

吴浩皛
2023-03-14

我们正在将我们的项目从Java8迁移到Java11。其中一个API依赖于使用JAXB的库。正如我们所知,JAXB是从JAVA11中删除的,我们开始在库的POM中包含JAXB依赖项。

 <!-- https://mvnrepository.com/artifact/jakarta.xml.bind/jakarta.xml.bind-api -->
  <!-- API -->
  <dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>2.3.3</version>
  </dependency>
  <!-- Runtime -->
  <dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.2</version>
  </dependency>

当我们运行API项目时,一切正常

mvn spring boot:运行

但是,当API部署在QA服务器中,并使用带有-

java-jar Sample-api 3.0.0-SNAPSHOT. jar

当调用依赖于JAXB的库时,API抛出以下错误-

Caused by: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
  • 除此之外:
 [java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory]
      at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:269)
      at javax.xml.bind.ContextFinder.find(ContextFinder.java:412)
      at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721)
      at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662)
      at com.eoriginal.ecore.client.documents.SearchDocumentHistoryAPI$RequestParameters.toMap(SearchDocumentHistoryAPI.java:344)
      ... 14 more
    Caused by: java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory
      at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
      at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
      at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
      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:267)

共有1个答案

卢涵畅
2023-03-14

JAXB需要javax。激活模块,成为雅加达。更名为Jakartae后激活。包括这种依赖关系应该有帮助:

<dependency>
    <groupId>jakarta.activation</groupId>
    <artifactId>jakarta.activation-api</artifactId>
    <version>2.0.0</version>
</dependency>
 类似资料:
  • 我有一个用于java程序的库。 它包含下一行: 它在java8上运行正常,但在我尝试在java11上启动它之后,我得到了ClassCastException JAVAClassCastException:类jdk。内部的加载器。ClassLoaders$AppClassLoader不能强制转换为java类。网URLClassLoader 有可能解决这个pb而不修改库吗?AFAIK,Java应该向下

  • Java(TM)SE运行时环境(构建1.8.0_102-B14) Java HotSpot(TM)64位服务器VM(构建25.102-B14,混合模式) 我知道jdk11不包含jre,但是我如何在java 11中从cmd运行java程序呢

  • 我不确定似乎是什么问题,但这种膝盖迁移失败了。尽管我是编写迁移的新手,但我坚信此迁移文件是正确的。生成的错误如下 代码如下。最初,这些迁移函数在单独的文件中,我认为它失败了,因为文件没有同步执行,这导致我编写了一个文件。我不确定这是否有帮助,但是当我删除包含外键引用(UserRoles、RolePer的、令牌)的表的代码时,其余的似乎都在工作。

  • 我正在尝试分别从android的mapbox库迁移到较新版本: mapbox android sdk从6.7.0到7.3.2, mapbox android core从0.2.0到1.3.0, mapbox android导航从0.18.0到0.36.0, mapbox android导航界面从0.18.0到0.36.0 但是,当我同步更新的版本时,生成部分会出现以下错误: 错误:Android资

  • Angular 是使用 TypeScript 构建的,并且支持向 Angular 提供元信息的装饰器。 TypeScript 的装饰器会让语法感觉更加“自然”,尽管有可能使用 Angular 没有的功能。

  • 我的应用程序(Postgres)中有7个不同的模式,我做了两次迁移来更改列,一次影响A模式,另一次影响公共模式。我想知道这种意外行为的原因。

  • 我试图迁移我的整个项目,我有这个问题在main.jsx文件。 “react路由器”:“3.0.x” “材料界面”:“^0.19.4” “react redux”:“4.4.8” 对象作为React子对象无效(找到:具有键{default}的对象)。如果要呈现子对象集合,请改用数组。在路由器中(在main.jsx:68)在MuiThemeProvider中(在main.jsx:67)在Provide