我有一个复杂的xml架构,它是国际标准的一部分,因此我无法更改架构文件,并且我已经使用Maven从它们生成JAXB对象.当我尝试将数据设置到我的JAXB对象中然后封送根元素时,我在几个复杂类型上得到了丢失的@XmlRootElement错误.我的问题是如何解决这个问题?环境:
我已经广泛研究了网站和这个网站,但没有找到我的问题的答案,包括这篇文章: http://weblogs.java.net/blog/kohsuke/archive/2006/03/why_does_jaxb_p.html
关于堆栈溢出的这个问题: 带有自定义JAX-B绑定的JAX-WS MarshalException:无法将类型"java.lang.String"编组为元素,因为它缺少@XmlRootElement注释
我已经尝试在自定义绑定文件中向违规类添加注释,但是它将注释添加到类以及getContent()方法中,并且该类将无法编译.我认为无论如何我都不应该添加这个注释,因为这是一个复杂类型,它是根的一个组件,实际上它嵌套在树中相当深.我已经读过你可以将<xjc:simple/>标签添加到全局绑定元素中,但是我已经向全局绑定元素添加了许多属性,当我这样做时它不会编译.
有人可以帮我指出正确的方向,这可能是我构建JAXB对象的方式错误吗?我已经在调试器中完成了它,似乎当com.sun.xml.bind.v2.runtime.property包中的ArrayReferenceNodeProperty类尝试序列化列表主体并且当它获取这些类的JaxBeanInfo时,似乎没有dom处理程序集和jaxbType不是一个对象,因此它认为它需要是一个根.
我没有在基于Web的服务中使用它,除了绑定文件中的调整以解决命名冲突没有创建任何自定义类或绑定.
这是顶级架构文件:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified">
<xs:annotation>
<xs:documentation>
*****************************************************************************
* *
* S1000D Issue 3 *
* XML Schema *
* *
* Release Version 3.0 *
* Date: 2007-07-31 *
* *
* *
* The following attribute definition on the root element may be used to *
* call this set of declarations:- *
* *
* …Run Code Online (Sandbox Code Playgroud)