【问题标题】:Java error with JAXB and Java 1.6JAXB 和 Java 1.6 的 Java 错误
【发布时间】:2012-01-15 22:12:01
【问题描述】:

我正在尝试启动Octopus Arm Benchmark(强化学习基准测试)。我下载了octopus-code-distribution.zip 并使用

启动了octopus-environment.jar
java -jar octopus-environment.jar internal settings.xml

我得到了以下异常:

Exception in thread "main" java.lang.NoSuchMethodError: javax.xml.bind.annotation.XmlAccessorType.value()Ljavax/xml/bind/annotation/AccessType;
at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.getAccessType(ClassInfoImpl.java:339)
at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.getProperties(ClassInfoImpl.java:228)
at com.sun.xml.bind.v2.model.impl.RuntimeClassInfoImpl.getProperties(RuntimeClassInfoImpl.java:87)
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:127)
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:49)
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:41)
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:189)
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:204)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:327)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:198)
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:76)
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:55)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:202)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:363)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:522)
at Main.main(Main.java:41)

我已经用谷歌搜索了错误消息,这似乎是我的 Java 版本的问题。我正在使用 Java 1.6,它以某种方式导致与 JAXB 库发生冲突。我认为它适用于 Java 1.5。但我还没有找到任何解决方法。

我希望你能在这里帮助我。一些背景信息:我使用的是 Ubuntu 11.04,我的 Java 版本是 1.6.0_26。

【问题讨论】:

  • Java 1.6 包含 JAXB 库。不要使用外部 JAXB jar。
  • 检查您是否下载了 Java 1.7 版本而不是 Java 1.6 版本
  • GregS:这不是我的代码,我不想更改它。 SHiRKiT:代码很旧(~2006 年),所以我猜 Java 1.5 更有可能。

标签: java jaxb version


【解决方案1】:

在 JAXB 2.0 中,AccessType 重命名为 XmlAccessTypeAccessorType 也重命名为 XmlAccessorType)。因此,JAXB 早期快照的用户面临这个问题。所以你有两个选择:

  1. 更新源代码,以便您可以使用 Java 6 附带的 JAXB。

  2. 用您的环境中使用的 JAXB 实现覆盖。文件octopus-environment.jar的MANIFEST文件显示需要的文件存储在/lib文件夹下,所以你可以运行

java -Djava.endorsed.dirs=./lib -jar octopus-environment.jar internal settings.xml

这利用了Java Endorsed Standards Override Mechanism,因此您可以覆盖 Java 6 中提供的默认 JAXB。

【讨论】:

  • 我不想更改源代码。选项 2 效果很好。很好的解释。感谢您的时间! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
相关资源
最近更新 更多