web-dev-qa-db-fra.com

Migration de l'application JAXWS de Java 8 vers Java 11

Je recherche une combinaison compatible d'org.Apache.cxf: cxf-spring-boot-starter-jaxws avec jaxws-api/jaxws-ri on Java 10+.

Notre application fonctionne bien sur Java 8. Également sur Java 9 & 10 avec --add-modules = Java.se.ee.

Mais, lorsque je supprime cette option et que j'ajoute les dépendances suivantes:

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'

dépendances courantes (avec/sans --add-modules dans Java 9/10, ou Java 8):

compile('org.Apache.cxf:cxf-spring-boot-starter-jaxws:3.2.6')

Je deviens:

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
14
amjr

Notez bien à propos du démarrage de sprint, mais pour que JAXWS fonctionne dans Java 11, j'ai utilisé

   <!--
        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>
13
user1791121

La documentation concernant cette suppression ( JEP 32 ) contient une rubrique intitulée Risques et hypothèses suivie de Modules Java EE dans lesquels ils suggèrent des alternatives pour les suppressions, comme jaxws-ri et jaxb-ri .

Dans mon cas, j'utilisais le package javax.jws dans Java 8 et il a été supprimé dans Java 11. Donc, comme le suggère le JEP, je n'ai eu qu'à ajouter la dépendance suivante pour le faire fonctionner à nouveau sur Java 11:

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

Dans votre cas, vous pourriez également avoir besoin d'autres dépendances, jetez un œil aux suggestions JEP.

2