web-dev-qa-db-fra.com

java.lang.NoClassDefFoundError: javax/activation/DataSource sur wsimport Intellij Java 9

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
12
George

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>
8
Sameer Khanal

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"
2
Svetopolk

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).

1
Markus Barthlen