我正在解组符合下面架构的消息,并希望返回的根元素属于类Bar。相反,返回的根元素始终是包含名称'foo'的JAXBElement,其值等于所需的Bar元素。
我认为XmlRootElement可用于在绑定文件中执行此操作但尚未使用此功能。有什么想法吗?
<xsd:element name="foo" type="Bar"/>
<xsd:complexType name="Bar">
<xsd:sequence>
<xsd:element name="goo" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
答案 0 :(得分:1)
由于可能有许多全局元素对应于全局复杂类型,因此JAXB impl不会在这些类上生成@XmlRootElement
注释。您可以使用匿名复杂类型声明元素。
<xsd:element name="foo">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="goo" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
当unmarshal
方法返回JAXBElement
的实例时,您可以通过调用getValue()
来获取域对象。
答案 1 :(得分:1)
您可以使用xsd:element
自定义jaxb:class
,这会为您的元素生成额外的课程。这种定制可以通过绑定来完成:
<jaxb:bindings node="xsd:element[@name='foo']">
<jaxb:class>
</jaxb:bindings>