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

迁移到雅加达:ClassNotFoundException:com.sun.xml.internal.ws.spi.ProviderImpl

越扬
2023-03-14

在根据https://wiki.eclipse.org/new_maven_coordines和Maven central从Java 8迁移到Java 11并从EE切换到最新的Jakarta库时,我们在(仍然基于SOAP的)客户端应用程序中遇到了以下运行时异常:

Exception in thread "main" javax.xml.ws.WebServiceException: Provider com.sun.xml.internal.ws.spi.ProviderImpl not found
        at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:31)
        at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:28)
        at javax.xml.ws.spi.ServiceLoaderUtil.newInstance(ServiceLoaderUtil.java:73)
        at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:82)
        at javax.xml.ws.spi.Provider.provider(Provider.java:66)
        at javax.xml.ws.Service.<init>(Service.java:82)
        at [...]
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        at javax.xml.ws.spi.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:60)
        at javax.xml.ws.spi.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:93)
        at javax.xml.ws.spi.ServiceLoaderUtil.newInstance(ServiceLoaderUtil.java:71)
        ... 5 more

Getting java.lang.ClassNotFoundException:com.sun.xml.internal.ws.spi.ProviderImpl中描述的解决方案尽管定义了依赖项,但不起作用,也不使用Jakarta。

private static final String DEFAULT_JAXWSPROVIDER =
        "com.sun"+".xml.internal.ws.spi.ProviderImpl";

共有1个答案

张勇
2023-03-14

我终于找到了解决问题的办法。根据如何在Java11上使用WebServices?javax.jws包不存在JAX-WS的参考实现应该包含在Java11:

<dependency>
  <groupId>com.sun.xml.ws</groupId>
  <artifactId>jaxws-ri</artifactId>
  <version>2.3.2</version>
  <type>pom</type>
</dependency>

不幸的是,使用最新的maven-compile-plugin3.8.0编译具有这种依赖关系的项目会导致https://jira.apache.org/jira/browse/mcompiler-355中描述的异常。它应该在3.8.1中修复,但版本尚未可用。

作为一种解决办法,尽管定义了依赖项,但我还是使用Getting java.lang.ClassNotFoundException:com.sun.xml.internal.ws.spi.ProviderImpl中给出的提示使我们的项目工作,并结合附加的依赖项(也就是在jaxws-ri的pom.xml中链接的解析器),以避免后续的java.lang.ClassNotFoundException:com.sun.org.apache.xml.internal.resolver.catalogManager:

<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>rt</artifactId>
    <version>2.3.2</version>
</dependency>

<dependency>
    <groupId>com.sun.org.apache.xml.internal</groupId>
    <artifactId>resolver</artifactId>
    <version>20050927</version>
</dependency>

也许这能帮助遇到同样问题的人。

 类似资料:
  • 我正在IntelliJ开发一个Web应用程序,Java /Jakarta,Maven和Tomcat 10。因此,我想使用JSTL标签,但无法让它们工作。 通过Maven,我添加了org。玻璃鱼。网址:雅加达。servlet。jsp。jstl:2.0.0。我的项目。我还在Tomcat/lib文件夹中添加了jar文件。 在我添加的jsp文件中: 为了解决“绝对uri:http://java.sun.c

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

  • 我花了一整天的时间试图弄清楚下面的迁移发生了什么。 这是表的迁移。我的想法是使用“id_stays_abroad”和“user_id”作为外键。 这是添加外键的另一个迁移 当我运行php artisan迁移时,我遇到了以下错误: SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter table

  • Redux 不是一个单一的框架,而是一系列的约定和一些让他们协同工作的函数。你的 Redux 项目的主体代码甚至不需要使用 Redux 的 API,大部分时间你其实是在编写函数。 这让到 Redux 的双向迁移都非常的容易。 我们可不想把你限制得死死的! 从 Flux 项目迁移 Reducer 抓住了 Flux Store 的本质,因此,将一个 Flux 项目逐步到 Redux 是可行的,无论你使

  • 我正试图迁移到AndroidX,我们在我们的项目中使用这个库。然而,这目前在我们的项目中引起了一个问题: 无法解析对“module @ build type/compile class path”的依赖项:无法使用转换JetifyTransform转换文件“localytics-1.3.0.aar”以匹配属性{artifactType=processed-aar} 删除库会使此问题消失。在这个库被

  • 如果你现在有一个正在使用其他 VCS 的代码库,但是你已经决定开始使用 Git,必须通过某种方式将你的项目迁移至 Git。 这一部分会介绍一些通用系统的导入器,然后演示如何开发你自己定制的导入器。 你将会学习如何从几个大型专业应用的 SCM 系统中导入数据,不仅因为它们是大多数想要转换的用户正在使用的系统,也因为获取针对它们的高质量工具很容易。 Subversion 如果你阅读过前面关于 git