首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >找不到JDK11;JAX-WS;提供程序com.sun.xml.internal.ws.spi.ProviderImpl

找不到JDK11;JAX-WS;提供程序com.sun.xml.internal.ws.spi.ProviderImpl
EN

Stack Overflow用户
提问于 2019-01-04 10:52:37
回答 2查看 29K关注 0票数 26

我需要访问JDK11中的遗留SOAP webservices,但是我遇到了"ProviderImpl not found“的问题。

JDK 11的实现是: zulu11.2.3-jdk11.0.1-win_x64。

在我的build.gradle中,我有以下依赖项:

代码语言:javascript
运行
复制
compile group: 'com.sun.xml.ws', name: 'jaxws-rt', version: '2.3.1', ext: 'pom', { force = true }

我的WAR文件的WEB-INF/lib包含

我看到:

代码语言:javascript
运行
复制
javax.xml.ws.WebServiceException: Provider com.sun.xml.internal.ws.spi.ProviderImpl not found
    at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:61) ~[jaxws-api-2.3.1.jar:na]
    at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:58) ~[jaxws-api-2.3.1.jar:na]
    at javax.xml.ws.spi.ServiceLoaderUtil.newInstance(ServiceLoaderUtil.java:103) ~[jaxws-api-2.3.1.jar:na]
    at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:112) ~[jaxws-api-2.3.1.jar:na]
    at javax.xml.ws.spi.Provider.provider(Provider.java:96) ~[jaxws-api-2.3.1.jar:na]
    at javax.xml.ws.Service.<init>(Service.java:112) ~[jaxws-api-2.3.1.jar:na]

下面是我尝试设置的https://github.com/javaee/metro-jax-ws/issues/1247

-Djavax.xml.ws.spi.Provider=com.sun.xml.ws.spi.ProviderImpl

但我还是得到了:

代码语言:javascript
运行
复制
javax.xml.ws.WebServiceException: Provider com.sun.xml.ws.spi.ProviderImpl not found
    at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:61) ~[jaxws-api-2.3.1.jar:na]
    at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:58) ~[jaxws-api-2.3.1.jar:na]
    at javax.xml.ws.spi.ServiceLoaderUtil.newInstance(ServiceLoaderUtil.java:103) ~[jaxws-api-2.3.1.jar:na]
    at javax.xml.ws.spi.FactoryFinder.fromSystemProperty(FactoryFinder.java:122) ~[jaxws-api-2.3.1.jar:na]
    at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:99) ~[jaxws-api-2.3.1.jar:na]
    at javax.xml.ws.spi.Provider.provider(Provider.java:96) ~[jaxws-api-2.3.1.jar:na]
    at javax.xml.ws.Service.<init>(Service.java:112) ~[jaxws-api-2.3.1.jar:na]
    ...
Caused by: java.lang.ClassNotFoundException: com.sun.xml.ws.spi.ProviderImpl
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583) ~[na:na]
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na]
    at javax.xml.ws.spi.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:90) ~[jaxws-api-2.3.1.jar:na]
    at javax.xml.ws.spi.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:123) ~[jaxws-api-2.3.1.jar:na]
    at javax.xml.ws.spi.ServiceLoaderUtil.newInstance(ServiceLoaderUtil.java:101) ~[jaxws-api-2.3.1.jar:na]
    ... 22 common frames omitted

我已经验证了com.sun.xml.ws.spi.ProviderImpl是可用的:

有没有一个已知的可用的这种组合的工作示例?

感激地接受了我的想法/建议。

EN

回答 2

Stack Overflow用户

发布于 2019-05-15 19:01:30

我在java11中调用soap-webservices时遇到了完全相同的错误。通过向pom.xml添加以下依赖项,我最终使其在我的测试项目中正常工作

代码语言:javascript
运行
复制
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>rt</artifactId>
    <version>2.3.1</version>
</dependency>

因为我的生产环境还没有转换到maven,所以我发现我需要类路径上的这些jar文件:

代码语言:javascript
运行
复制
jaxb-runtime-2.3.1.jar
jaxws-api-2.3.1.jar
javax.xml.soap-api-1.4.0.jar
rt-2.3.1.jar
streambuffer-1.5.3.jar
policy-2.7.5.jar
stax-ex-1.8.jar
javax.jws-api-1.1.jar
saaj-impl-1.5.0.jar
gmbal-api-only-3.1.0-b001.jar 
票数 30
EN

Stack Overflow用户

发布于 2020-04-02 07:54:47

我也得到了同样的错误。在Spring应用程序中,我调用了一个OSGI包,它完成了一个SOAP请求。就在该OSGI包中的调用之前,一个类加载器开关解决了这个问题。

使用SOAP服务类中的类加载器,并在调用后重置类加载器。

代码语言:javascript
运行
复制
    final ClassLoader targetClassLoader = ServiceXY.class.getClassLoader();
    final Thread currentThread = Thread.currentThread();
    final ClassLoader contextClassLoader = currentThread.getContextClassLoader();
    try {
           currentThread.setContextClassLoader(targetClassLoader);
           //here call your Service 
    } finally {
           currentThread.setContextClassLoader(contextClassLoader);
    }

JEE库已经从Java 9中移除,JEE特定的库/实现现在必须由应用程序通过第三方库提供-例如jaxws-api.jar和jaxws-rt.jar。JEE库的这段代码通常仍然希望成为jre系统库的一部分,并与应用程序类加载器一起使用--但现在不再是了。因此,如果服务类加载器ServiceXY.class.getClassLoader()和应用程序类加载器Thread.currentThread().getContextClassLoader()不同,则需要切换请求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54032558

复制
相关文章

相似问题

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