【问题标题】:java.lang.NoClassDefFoundError: javax/activation/DataSource on wsimport Intellij java 9java.lang.NoClassDefFoundError:wsimport Intellij java 9 上的 javax/activation/DataSource
【发布时间】:2018-04-05 20:05:59
【问题描述】:

我正在尝试使用 JDK-9 为带有 Intellij-Idea 2017.2.5(Webservices -> 从 wsdl 生成代码...)的 wsdl 生成类存根

我遇到了这个异常,我想知道如何告诉 intellij 传递“--add-modules java.activation”来完成操作。

(我想我应该从命令行运行 wsimport...)

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

【问题讨论】:

  • ^^ 在这种情况下,命令行似乎是唯一的选择。
  • 你试过设置全局环境变量_JAVA_OPTIONS=--add-modules java.activation吗?将需要重新启动 IDEA。
  • @ZhekaKozlov 已经尝试过

标签: web-services intellij-idea wsdl java-9 wsimport


【解决方案1】:

根据您的错误信息,您需要在 pom.xml 中添加以下依赖项

<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>

从 SDK 9 开始,为了让 JAXB 用于 Web 服务,如果您还没有以下依赖项,那么您还需要这些依赖项,因为它们不是 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>

【讨论】:

  • 对于 gradle 构建,添加 compile('javax.activation:activation:1.1')(检查 maven central 上的正确版本)。
  • 谢谢,我添加了/tomcat/lib/javax.activation-1.2.0.jar文件并且错误消失了,JDK10+Tomcat8.5
  • Eclipse 基金会已经接管了 JavaEE 开发。 javax.activation 已移至 jakarta.activationwiki.eclipse.org/New_Maven_Coordinates
【解决方案2】:

我想它可能很有用。从 Java 8 切换到 10 时,我的 soap 项目中有这些额外的包。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"

【讨论】:

    【解决方案3】:

    仅适用于其他有相同例外的人:

    如果您使用诸如 tomcat 之类的 Web 服务器,并且如果您还需要激活 jar,也可能会出现此问题。一种可能的解决方案是将其放在 tomcat 的 lib 文件夹中(或使用 common.loader 功能)。

    【讨论】:

    • 非常感谢,它真的帮助了我。刚从mvnrepository.com/artifact/javax.activation/activation/1.1.1下载并添加到我的项目构建路径(学校项目,不能使用maven)。
    • @markus-barthlen 谢谢!这正是我这几天一直在寻找的东西!现在我的NoClassDefFoundError: javax/activation/DataSource 不见了:)
    【解决方案4】:

    我遇到了同样的问题。更改项目jdk后,它对我有用。

    将项目 jdk 更改为 8。

    【讨论】:

    • 我不知道他们为什么对你投了反对票。这解决了我的问题。谢谢
    猜你喜欢
    • 2012-01-01
    • 2021-12-24
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 2019-03-26
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多