在JAXB中使用XmlRootElement来避免根JAXBElement

时间:2011-11-30 23:29:47

标签: jaxb

我正在解组符合下面架构的消息,并希望返回的根元素属于类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>

2 个答案:

答案 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>