Java 10+。
私たちのアプリケーションは、Java 8で正常に動作します。また、Java 9&10 --with-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'
一般的な依存関係(Java 9/10、またはJava 8)の--add-modulesあり/なし):
compile('org.Apache.cxf:cxf-spring-boot-starter-jaxws:3.2.6')
になる:
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
スプリントブートについては注意してください。ただし、Java 11でJAXWSを機能させるために、
<!--
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>
この削除に関するドキュメント( JEP 32 )には、リスクおよび前提条件と呼ばれるトピックに続いてJava EEモジュールjaxws-ri や jaxb-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>
あなたの場合、他の依存関係も必要になるかもしれません。JEPの提案を見てください。