在JAXB中使用XmlRootElement避免根JAXBElement
我正在解组符合下面模式的消息,并希望返回的根元素为Bar类。相反,返回的根元素始终是包含名称“foo”的JAXBElement,其值等于所需的Bar元素 我认为可以在绑定文件中使用XmlRootElement来实现这一点,但还没有实现。有什么想法吗在JAXB中使用XmlRootElement避免根JAXBElement,jaxb,Jaxb,我正在解组符合下面模式的消息,并希望返回的根元素为Bar类。相反,返回的根元素始终是包含名称“foo”的JAXBElement,其值等于所需的Bar元素 我认为可以在绑定文件中使用XmlRootElement来实现这一点,但还没有实现。有什么想法吗 <xsd:element name="foo" type="Bar"/> <xsd:complexType name="Bar"> <xsd:sequence> <xsd:elemen
<xsd:element name="foo" type="Bar"/>
<xsd:complexType name="Bar">
<xsd:sequence>
<xsd:element name="goo" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
由于可能有许多全局元素对应于全局复杂类型,因此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()
来获取域对象,您可以使用jaxb:class
自定义xsd:element
,这将为您的元素生成一个额外的类。此自定义可通过绑定完成:
<jaxb:bindings node="xsd:element[@name='foo']">
<jaxb:class>
</jaxb:bindings>
谢谢,不过我应该补充一点,我不能更改模式。事实上,这是一个简化的案例,在现实生活中,Bar是从另一个模式导入的。感谢Blaise,这是可行的,但我正在寻找一个不改变模式的解决方案。可能吗?@EwanB-以下内容可能会有所帮助: