2012-02-09 160 views
1

當前我正在將對象轉換爲XML,我注意到所有對象屬性都被列爲XML元素(節點),除非您使用@ XmlAttribute在特定的getter或設置JAXB:將Javabean對象轉換爲XML作爲XML屬性而不是XML元素(節點)的所有屬性

只是想知道是否有一種方法來自動將所有對象屬性轉換爲JAXB中的XML屬性。

示例代碼:

JAXBContext jc = JAXBContext.newInstance(foo.class); 
Marshaller m = jc.createMarshaller(); 
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
m.setProperty(Marshaller.JAXB_FRAGMENT, true); 
Foo foo = new foo(); 
foo.setType("type"); 
foo.setValue("value"); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
m.marshal(foo, baos); 

回答

1

備註:我是EclipseLink JAXB (MOXy)的領導者和JAXB (JSR-222)專家組的成員。

目前還沒有配置方法,默認情況下,簡單的屬性應映射到XML屬性。已向MOXy提交以下增強請求以添加此行爲。

  • Bug 333604 - 增強:提供元數據爲默認簡單屬性的屬性(而不是元素)
+0

謝謝!在此期間,我可能會以其他方式解決問題。請保持我們更新! – rzch 2012-02-09 22:36:27

0

你試圖在類頂層使用@XmlRootElement?

+0

是的,否則,它會抱怨錯誤。 – rzch 2012-02-09 05:59:30

+0

'@ XmlRootElement'不是必需的,因爲您可以將根對象包裝在'JAXBElement'的實例中:http://wiki.eclipse.org/EclipseLink/Examples/MOXy/GettingStarted/TheBasics – 2012-02-09 10:10:26

+0

是的,它與也有問題,我讀錯了。但是沒有任何配置可以解決問題@Blaise? – 2012-02-09 10:23:34

0

如果使用JAXB對於一個複雜的圖式,這是一個好主意,在XSD定義結構:

<xsd:schema targetNamespace="http://myUri" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<xsd:element name="parent"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element ref="child" maxOccurs="1"/> 
     </xsd:sequence> 
     <xsd:attribute name="id" type="xsd:long"/> 
     <xsd:attribute name="name" type="xsd:string"/> 
    </xsd:complexType> 
</xsd:element> 
<xsd:element name="child"> 
    <xsd:complexType> 
     <xsd:attribute name="id" type="xsd:long"/> 
     <xsd:attribute name="name" type="xsd:string"/> 
     <xsd:attribute name="code" type="xsd:string"/> 
    </xsd:complexType> 
</xsd:element> 

這可以jaxb-xjc.java文件進行編譯,你將有定義的xsd:屬性作爲Java中的屬性。

+0

是的,但這是否意味着每次我們引入新元素時,我們都必須更新XSD? – rzch 2012-02-09 06:10:16

+0

那麼,你只需要更新XSD,編譯它,然後你就擁有了Java文件。至少你必須引入元素_somewhere_ ;-) IMO XSD比使用JAXB註釋的Java文件要容易得多。 – Thor 2012-02-09 06:15:50

+0

謝謝它的幫助,對不起,我沒有足夠的聲望投票:S – rzch 2012-02-09 22:43:26