j'essaie de générer des talons de classe pour un WSDL avec Intellij-Idea 2017.2.5 (Webservices -> Générer du code à partir de WSDL ...) en utilisant JDK-9
Je reçois cette exception et je me demande comment dire à intellij de passer "--add-modules Java.activation" pour terminer l'opération.
(Je suppose que je devrais lancer wsimport depuis la ligne de commande ...)
Exception in thread "main" Java.lang.NoClassDefFoundError: javax/activation/DataSource
at com.Sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl.<clinit>(RuntimeBuiltinLeafInfoImpl.Java:461)
at com.Sun.xml.bind.v2.model.impl.RuntimeTypeInfoSetImpl.<init>(RuntimeTypeInfoSetImpl.Java:65)
at com.Sun.xml.bind.v2.model.impl.RuntimeModelBuilder.createTypeInfoSet(RuntimeModelBuilder.Java:133)
at com.Sun.xml.bind.v2.model.impl.RuntimeModelBuilder.createTypeInfoSet(RuntimeModelBuilder.Java:85)
at com.Sun.xml.bind.v2.model.impl.ModelBuilder.<init>(ModelBuilder.Java:156)
at com.Sun.xml.bind.v2.model.impl.RuntimeModelBuilder.<init>(RuntimeModelBuilder.Java:93)
at com.Sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.Java:455)
at com.Sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.Java:303)
at com.Sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.Java:142)
at com.Sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.Java:1174)
at com.Sun.tools.xjc.reader.xmlschema.bindinfo.BindInfo.getJAXBContext(BindInfo.Java:335)
at com.Sun.tools.xjc.reader.internalizer.SCDBasedBindingSet.apply(SCDBasedBindingSet.Java:235)
at com.Sun.tools.xjc.ModelLoader.createXSOM(ModelLoader.Java:541)
at com.Sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.Java:269)
at com.Sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.Java:95)
at com.Sun.tools.ws.processor.modeler.wsdl.JAXBModelBuilder.bind(JAXBModelBuilder.Java:142)
at com.Sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildJAXBModel(WSDLModeler.Java:2244)
at com.Sun.tools.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.Java:191)
at com.Sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildModel(WSDLModeler.Java:137)
at com.Sun.tools.ws.wscompile.WsimportTool.buildWsdlModel(WsimportTool.Java:391)
at com.Sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.Java:204)
at com.Sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.Java:179)
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 com.Sun.tools.ws.Invoker.invoke(Invoker.Java:135)
at com.Sun.tools.ws.WsImport.main(WsImport.Java:57)
Caused by: Java.lang.ClassNotFoundException: javax.activation.DataSource
at Java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.Java:582)
at Java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.Java:185)
at Java.base/Java.lang.ClassLoader.loadClass(ClassLoader.Java:496)
... 28 more
En fonction de votre message d'erreur, vous devez ajouter la dépendance suivante dans votre pom.xml.
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
À partir du SDK 9, pour que JAXB fonctionne avec les services Web, vous devez également disposer des dépendances suivantes si vous ne les avez pas déjà, car elles ne font pas partie du SDK.
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.Sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.Sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
</dependency>
Je suppose que cela peut être utile. J'ai ces paquets supplémentaires dans mon projet soap lors du passage de Java 8 à 10. Gradle:
compile "javax.xml.bind:jaxb-api:2.3.0"
compile "javax.activation:activation:1.1"
compile "com.Sun.xml.bind:jaxb-impl:2.3.0"
compile "com.Sun.xml.bind:jaxb-core:2.3.0"
compile "com.Sun.xml.ws:rt:2.3.0"
compile "com.Sun.xml.ws:jaxws-rt:2.3.0"
Juste pour les autres personnes avec la même exception venant ici:
Ce problème peut également se produire si vous utilisez un serveur Web tel que Tomcat et si vous avez besoin que le fichier JAR d'activation soit également présent. Une solution possible consiste à le placer dans le dossier lib de Tomcat (ou à utiliser la fonctionnalité common.loader).