将JAXWS应用程序从java 8迁移到java 11

amj*_*mjr 14 java soap spring-boot java-11

我在java 10+上寻找org.apache.cxf:cxf-spring-boot-starter-jaxws与jaxws-api/jaxws-ri的兼容组合.

我们的应用程序在java 8上运行良好.另外在java 9和10上使用--add-modules = java.se.ee.

但是,当我删除此选项并添加以下依赖项:

compile group: 'javax.xml.ws', name: 'jaxws-api', version: '2.3.0'
compile group: 'com.sun.xml.ws', name: 'jaxws-ri', version: '2.3.0.2', ext: 'pom'
compile group: 'com.sun.xml.ws', name: 'jaxws-rt', version: '2.3.0.2', ext: 'pom'
Run Code Online (Sandbox Code Playgroud)

公共依赖项(在java 9/10或java 8中使用/不使用--add-modules):

compile('org.apache.cxf:cxf-spring-boot-starter-jaxws:3.2.6')
Run Code Online (Sandbox Code Playgroud)

我变得:

Caused by: java.lang.NoSuchMethodError: javax.jws.WebMethod.exclude()Z
    at org.apache.cxf.jaxws.support.JaxWsServiceConfiguration.isOperation(JaxWsServiceConfiguration.java:190)
    at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.isValidMethod(ReflectionServiceFactoryBean.java:1962)
    at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.createInterface(ReflectionServiceFactoryBean.java:999)
    at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:461)
    at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:695)
    at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:530)
    at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:263)
    at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:199)
    at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:103)
    at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:168)
    at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:211)
    at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:460)
    at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:338)
    at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:255)
    at .....
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:361)
    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:564)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
    ... 44 more
Run Code Online (Sandbox Code Playgroud)

小智 12

请注意sprint启动,但为了让JAXWS在Java 11中运行,我使用了

   <!--
        Java EE API replacements for JDK 11
    -->
    <!-- JAXB for Java 11 -->
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>2.4.0-b180830.0438</version>
    </dependency>
    <!-- JAXWS for Java 11 -->
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>2.3.1</version>
        <type>pom</type>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>rt</artifactId>
        <version>2.3.1</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

  • jaxws-rt.jar 使用 3 个 jdk 内部 API,这些 API 在 java 11.0.5 中被删除。还有其他替代库可用于此 jar 吗?还有其他与 Java 11 兼容的 jar 吗? (3认同)

Raf*_*eco 12

有关此删除的文档 ( JEP 320 ) 有一个名为Risks and Assumptions的主题后面是Java EE 模块,其中他们建议删除的替代方案,如jaxws-rijaxb-ri

就我而言,我在 Java 8 中使用了javax.jws包,但它在 Java 11 中被删除。因此,正如 JEP 所建议的,我只需要添加以下依赖项即可使其在 Java 11 上再次运行:

<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-ri</artifactId>
    <version>2.3.2</version>
    <type>pom</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您可能还需要其他依赖项,只需查看 JEP 建议即可。