【问题标题】:JAXB: classes generated by JAXB not recognised in contextJAXB:由 JAXB 生成的类在上下文中无法识别
【发布时间】:2013-03-14 03:27:03
【问题描述】:

我遇到了这个问题。有什么解决办法吗?

这是我的文件结构:

包 jaxb_conainer_class; 包加载器类;

Main.java 同时导入 loader_class 和 jaxb_conainer_class;

在 loader_class 中,调用 JAXBContext 上下文 = JAXBContext.newInstance(xxxx.class);

给我上面的崩溃

线程“主”com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException 中的异常:2 个 IllegalAnnotationExceptions 计数 对于元素 {}default,没有带有 @XmlElementDecl 的 ObjectFactory。

【问题讨论】:

  • 但是,如果我单独编译 jaxb_conainer_class loader_class 。那么它工作正常。

标签: jaxb


【解决方案1】:

当您从 XML 模式生成类时,您应该在生成的包名称上创建 JAXBContext。这将确保ObjectFactory 和其他所有内容都将被正确提取。

JAXBContext jc = JAXBContext.newInstance("com.example.foo");

如果有多个包,您可以使用: 作为分隔符。

JAXBContext jc = JAXBContext.newInstance("com.example.foo:org.example.bar");

或者,您可以在用于引导 JAXBContext 的类中包含 ObjectFactory 类,但我的建议是使用包名称。

【讨论】:

  • 谢谢。它解决了一个问题,但又产生了另一个问题。代码现在看起来像 JAXBContext context = JAXBContext.newInstance("name");解组器 u = context.createUnmarshaller(); MClass mClass = (MClass) u.unmarshal(file);但我在线程“main”javax.xml.bind.UnmarshalException:意外元素(uri:“”,本地:“M.class”)中看到此错误异常。预期的元素是(无)
  • @user2167013 - name 是生成的类的包名吗? XML 模式是否还包含一个名为M.class 的全局元素?以下示例可能会有所帮助:blog.bdoughan.com/2010/09/processing-atom-feeds-with-jaxb.html
  • 是的,“name”是确切的包名,在我的例子中它实际上是“jaxb_conainer_class”。是的,xml 文件有类似 的内容,它出现在第一行。另一个有趣的事情是,如果我单独编译上面的包,一切正常。按照上面的例子,如果我这样做,“javac axb_conainer_class; javac Main.java”,一切正常。但是,如果我删除所有 .class 文件并只执行“javac Main.java”,则会出现错误。
  • 顺便说一句,您在上面提供的示例。这个非常特殊的行不编译 JAXBElement feed = unmarshaller.unmarshal(new StreamSource(xml), FeedType.class);这是错误 Unmarshaller 类型中的方法 unmarshal(Node, Class) 不适用于参数 (StreamSource, Class) 谢谢
猜你喜欢
  • 2016-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 2016-05-15
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多