首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jdk 11+中的jaxb,无法解决javax.xml和jakarta.xml之间的冲突。

jdk 11+中的jaxb,无法解决javax.xml和jakarta.xml之间的冲突。
EN

Stack Overflow用户
提问于 2022-05-03 17:58:52
回答 1查看 790关注 0票数 2

将旧项目从jdk8移开,我需要修复jaxb。大多数答案都是针对旧版本的,而我希望将其修复到当前的版本,而且我还在为命名混乱/依赖( javax.xml / jakarta.xml )的地狱而挣扎。

我想我从Saaj-Impl1.5.1转移到了新的2.0.1,因为在启动的时候,仍然在搜索com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl,而不是com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl,因为它在类路径上。

产生的信息是:

代码语言:javascript
运行
复制
javax.xml.soap.SOAPException: Provider com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl not found

但我想不出该怎么阻止这件事。看来,库javax.xml.soap-api寻找javax.xml.soap.SAAJMetaFactory实现,但是服务加载器的配置文件不存在,因此默认情况下会出现。它不存在,因为类路径上的服务加载程序文件是jakarta.xml.soap.SAAJMetaFactory而不是javax.xml.soap.SAAJMetaFactory。我猜想jaxws-api带来了javax.xml.soap.api,而javax.xml.soap.api又发生了冲突。

我的后jdk8 8 jaxb依赖项是:

代码语言:javascript
运行
复制
  <dependency>
    <groupId>javax.xml.ws</groupId>
    <artifactId>jaxws-api</artifactId>
    <version>2.3.1</version>
  </dependency>
  <dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
  </dependency>
  <dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>3.0.2</version>
  </dependency>
  <dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>3.0.2</version>
  </dependency>
  <dependency>
    <groupId>com.sun.xml.messaging.saaj</groupId>
    <artifactId>saaj-impl</artifactId>
    <version>2.0.1</version>
  </dependency>

但这并没有改变任何事情。因此,我尝试将jaxws-api替换为:

代码语言:javascript
运行
复制
<dependency>
  <groupId>jakarta.xml.ws</groupId>
  <artifactId>jakarta.xml.ws-api</artifactId>
  <version>3.0.1</version>
</dependency>

<dependency>
  <groupId>jakarta.xml.soap</groupId>
  <artifactId>jakarta.xml.soap-api</artifactId>
  <version>3.0.0</version>
</dependency>

但这只会让很多其他课程缺课。这真的很神秘也很令人费解。

有人能告诉我:

  • ,现在什么是首选?雅加达还是javax?我的目标是什么?
  • 什么是正确的,赢得了这些依赖与最新版本的结合?我不想在依赖项中看到一些老东西。
EN

回答 1

Stack Overflow用户

发布于 2022-05-04 15:41:54

我想我解决了它,但部分决议并不是要求最新的版本。我几乎让它与最新的库一起工作,但无法克服很少的冲突。因此,使用springboot父母2.6.6,我只能声明以下依赖项,这是我从springs依赖管理中获得的。但在我的故事中,最大的反派可能是jaxb2-maven插件,如果你不使用与其他版本同步的版本,似乎会带来一些依赖,这将导致混乱。下面的版本似乎与显示的依赖关系一起工作,不需要额外的依赖项。当我尝试在没有指定版本的情况下使用插件(从春季家长那里获得),它对我无效,因为我抱怨丢失了一些东西。

免责声明:我不相信以下的有效性,而它似乎正在工作。我没有找到任何可靠的来源,什么是有效的组合,也没有办法找到它自己。所以我就这么努力地调试了它,浪费了太多的cpu周期,seti@home可以找到至少两个外星人。

jaxb2插件

代码语言:javascript
运行
复制
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.5.0</version>

崇拜者:

代码语言:javascript
运行
复制
<dependency>
  <groupId>javax.activation</groupId>
  <artifactId>javax.activation-api</artifactId>
</dependency>

<dependency>
  <groupId>javax.xml.ws</groupId>
  <artifactId>jaxws-api</artifactId>
</dependency>

<dependency>
  <groupId>javax.xml.bind</groupId>
  <artifactId>jaxb-api</artifactId>
</dependency>

<dependency>
  <groupId>jakarta.xml.bind</groupId>
  <artifactId>jakarta.xml.bind-api</artifactId>
</dependency>

<dependency>
  <groupId>com.sun.xml.messaging.saaj</groupId>
  <artifactId>saaj-impl</artifactId>
</dependency>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72103568

复制
相关文章

相似问题

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