2011-06-08 38 views
2

我目前正在試圖找出爲什麼JAXB編組器使用Java成員變量約定,而不是遵循XmlType註釋。使用Java成員變量約定JAXB編組器

這裏的情況:

  • 第三方給我們XSD
  • 我們使用JDK工具生成Java類
  • 產生正確標註生成的Java類:@XmlType(NAME = 「XML_DOCUMENT_TYPE」 )

但是,當我試圖元帥類回XML,JAXB將其轉換爲<xmlDocumentType>而不是<XML_DOCUMENT_TYPE>

任何想法爲什麼? (如果是這樣,我該如何解決這個問題?)

更新:澄清,問題發生在頂部/根級別的元素,而不是在子元素/成員變量。

回答

4

UPDATE(基於評論由xandross

您可以使用@XmlRootElement控制根元素名稱:

@XmlRootElement(name="XML_DOCUMENT_TYPE") 
public class Foo { 
    ... 
} 

或者你可以用根對象中的JAXBElement實例提供根元件信息


UPDATE(基於Mohamed Mansour的評論)

在JAXB類中對應於XML類型,字段/屬性對應於XML屬性/元素。這是有道理的,當你考慮可能存在的地址類型:

<xs:complexType name="address"> 
    <xs:sequence> 
     <xs:element name="street" type="xs:string"/> 
    </xs:sequence> 
</xs:complexType> 

和多個元素(以不同的名稱),這是該類型的:

<xs:complexType name="customer"> 
    <xs:sequence> 
     <xs:element name="billing-address type="address"/> 
     <xs:element name="shipping-address type="address"/> 
    </xs:sequence> 
</xs:complexType> 

可以控制元素的名稱/屬性表示的屬性映射到與@XmlElement/@XmlAttribute註釋:

@XmlElement(name="shipping-address") 
public getShippingAddress() { 
    return shippingAddress; 
} 

@XmlElement(name="ShippingAddress") 
public getShippingAddress() { 
    return shippingAddress; 
} 

如果未註釋該屬性,則將其視爲@XmlElement,並且元素名稱是從屬性名稱派生的。

+0

嗨布萊斯,我相信他指的是他正在使用的亞型。例如,在他的主類型中,他有'private SomeType xmlDocumentType;'所以在這種情況下,他需要在字段級別添加'@XmlElement(name =「XML_DOCUMENT_TYPE」)',因爲JAXB使用字段名稱而不是' @ XmlType'名稱。 – 2011-06-08 01:04:17

+0

@穆罕默德曼蘇爾 - 你是對的,我已經更新了我的答案。 – 2011-06-08 01:56:33

+0

其實我指的是根元素。子元素或字段很容易處理。對於缺少的信息抱歉。 – xandross 2011-06-08 03:28:40