【问题标题】:Not found javax.xml.ws.spi.ProviderImpl in migration to JBoss7.2迁移到 JBoss7.2 时找不到 javax.xml.ws.spi.ProviderImpl
【发布时间】:2021-02-15 10:06:57
【问题描述】:

环境:

  • Jboss 7.2
  • Java 11
  • Maven 3.6.3

迁移自:

  • Jboss 5.2
  • Java 7

我正在从 JBoss 5.2 迁移到 Jboss 7.2,我遇到了一个错误,因为它来自较旧的实现 com.sun.xml.internal.ws.spi.ProviderImpl,所以找不到 ProviderImpl。 我应该删除文件资源/META-INF/services/javax.xml.ws.spi.Provider 以获得 JBoss 7.2 上的默认实现吗?还是改一下?

EmpleoWeb

/**
 * This class was generated by the JAX-WS RI.
 * JAX-WS RI 2.2.4-b01
 * Generated source version: 2.2
 * 
 */
@WebServiceClient(name = "EmpleoWeb", targetNamespace = "http://namespace.softwareag.com/entirex/xml/mapping", wsdlLocation = "http://intra.web.es/WebServicesEntireX/services/EmpleoWeb?wsdl")
public class EmpleoWeb extends Service {

    private final static URL EMPLEOWEB_WSDL_LOCATION;
    private final static WebServiceException EMPLEOWEB_EXCEPTION;
    private final static QName EMPLEOWEB_QNAME = new QName("http://namespace.softwareag.com/entirex/xml/mapping", "EmpleoWeb");

    static {
        URL url = null;
        WebServiceException e = null;
        try {
            url = new URL("http://intra.web.es/WebServicesEntireX/services/EmpleoWeb?wsdl");
        } catch (MalformedURLException ex) {
            e = new WebServiceException(ex);
        }
        EMPLEOWEB_WSDL_LOCATION = url;
        EMPLEOWEB_EXCEPTION = e;
    }

    public EmpleoWeb() {
        super(__getWsdlLocation(), EMPLEOWEB_QNAME);
    }

    public EmpleoWeb(WebServiceFeature... features) {
        super(__getWsdlLocation(), EMPLEOWEB_QNAME, features);
    }

    public EmpleoWeb(URL wsdlLocation) {
        super(wsdlLocation, EMPLEOWEB_QNAME);//ERROR
    }
    ...

resources/META-INF/services/javax.xml.ws.spi.Provider

com.sun.xml.internal.ws.spi.ProviderImpl

错误日志

原因:java.util.ServiceConfigurationError: javax.xml.ws.spi.Provider: Provider com.sun.xml.internal.ws.spi.ProviderImpl not found

...
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.jboss.weld.core@3.0.5.Final-redhat-00001//org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.invokeMethods(DefaultLifecycleCallbackInvoker.java:83)
    ... 146 more
Caused by: javax.xml.ws.WebServiceException: Error while searching for service [javax.xml.ws.spi.Provider]
    at javax.xml.ws.api@1.0.0.Final-redhat-1//javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:65)
    at javax.xml.ws.api@1.0.0.Final-redhat-1//javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:62)
    at javax.xml.ws.api@1.0.0.Final-redhat-1//javax.xml.ws.spi.ServiceLoaderUtil.firstByServiceLoader(ServiceLoaderUtil.java:74)
    at javax.xml.ws.api@1.0.0.Final-redhat-1//javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:93)
    at javax.xml.ws.api@1.0.0.Final-redhat-1//javax.xml.ws.spi.Provider.provider(Provider.java:96)
    at javax.xml.ws.api@1.0.0.Final-redhat-1//javax.xml.ws.Service.<init>(Service.java:112)
    at deployment.accfor2.ear.accfor-ejb.jar//es.caib.accfor.business.io.ws.silcoi.entity.wsdl.empleo.EmpleoWeb.<init>(EmpleoWeb.java:50)
    at deployment.accfor2.ear.accfor-ejb.jar//es.caib.accfor.business.io.ws.silcoi.boundary.SilcoiClient.setWsdlEmpleoWeb(SilcoiClient.java:339)
    at deployment.accfor2.ear.accfor-ejb.jar//es.caib.accfor.business.io.ws.silcoi.boundary.SilcoiClient.<init>(SilcoiClient.java:45)
    at deployment.accfor2.ear.accfor-back.war//es.caib.accfor.presentation.back.io.ws.silcoi.SilcoiBean.init(SilcoiBean.java:43)
    ... 151 more
Caused by: java.util.ServiceConfigurationError: javax.xml.ws.spi.Provider: Provider com.sun.xml.internal.ws.spi.ProviderImpl not found
    at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:588)
    at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(ServiceLoader.java:1211)
    at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1220)
    at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1264)
    at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1299)
    at java.base/java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1384)
    at javax.xml.ws.api@1.0.0.Final-redhat-1//javax.xml.ws.spi.ServiceLoaderUtil.firstByServiceLoader(ServiceLoaderUtil.java:67)
    ... 158 more

【问题讨论】:

  • 问题看起来像 com.sun.xml.*internal*.ws.spi.ProviderImpl 包在 Java 11 中不再存在,但我尝试添加库依赖项 jaxws-rt 和 javax。 jws-api 并通过 com.sun.xml.ws.spi.ProviderImpl 修改 META-INF/services/javax.xml.ws.spi.Provider 文本,但似乎没有任何效果
  • 这个问题应该与从 Java 7 迁移 JDK 11 和移除 Java EE 的 java.xml.ws 模块有关。来自 oracle docs.oracle.com/en/java/javase/11/migrate/index.html JEP 320 的迁移指南:删除 Java EE 和 CORBA 模块 openjdk.java.net/jeps/320

标签: web-services migration jax-ws jboss7.x


【解决方案1】:

遵循Oracle JDK Migration GuideJEP 320: Remove the Java EE and CORBA Modules

我根据 maven 项目添加了以下内容以保持运行。

    <!-- JAXWS for Java 11 -->
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>2.3.0</version>
    </dependency>

我必须下载 jaxws-rt-2.3.0.jar 并添加到 /lib 文件夹中。

【讨论】:

    猜你喜欢
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2018-11-05
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多