2013-03-13 77 views
1

我遇到此问题。有没有解决的地方?JAXB:由JAXB生成的类未在上下文中识别

这里是我的文件结构:

包jaxb_conainer_class; package loader_class;

Main.java同时导入loader_class和jaxb_conainer_class;

在loader_class中,调用了 JAXBContext context = JAXBContext.newInstance(xxxx.class);

给了我上面

异常崩溃线程“main” com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException:IllegalAnnotationExceptions 的2个字有与@XmlElementDecl没有的ObjectFactory的元素{}默认。

+0

但是,如果我单独编译jaxb_conainer_class loader_class。那么它工作正常。 – user2167013 2013-03-13 19:15:59

回答

0

当您从XML模式生成类时,应该在生成的包名称上创建JAXBContext。这将确保ObjectFactory和其他一切将被正确拾取。

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

如果有一个以上的包,那么你可以使用:作为分隔符。

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

另外,您可以包括用来引导JAXBContext类的ObjectFactory类,但我的建议是使用软件包的名称(或多个)。

+0

谢谢。它解决了一个问题,但又创建了另一个问题。代码现在看起来像JAXBContext context = JAXBContext.newInstance(“name”); Unmarshaller u = context.createUnmarshaller(); MClass mClass =(MClass)u.unmarshal(file);但是我在线程“main”javax.xml.bind.UnmarshalException:意外的元素(uri:“”,local:“M.class”)中看到这个错误异常。预期的元素是(none) – user2167013 2013-03-14 00:51:37

+0

@ user2167013 - 'name'是生成的类的包名称? XML模式还包含一个名为'M.class'的全局元素吗?下面的例子可能会有帮助:http://blog.bdoughan.com/2010/09/processing-atom-feeds-with-jaxb.html – 2013-03-14 01:08:49

+0

是,“名”是在我的情况的确切包名称是否与其实际“jaxb_conainer_class” 。是的,xml文件具有类似于的内容,它出现在第一行。另一个有趣的事情是,如果我单独编译这些软件包,一切都会奏效。遵循上面的例子,如果我这样做,“javac axb_conainer_class; javac Main.java”,一切正常。但是,如果我删除所有.class文件并执行“javac Main.java”,那么我得到了错误。 – user2167013 2013-03-14 05:50:30