JAXB的@XmlRootElement注解

原文地址:[https://jaxb.java.net/tutorial/section_6_2_1-A-Survey-Of-JAXB-Annotations.html#Top-level Elements: XmlRootElement](https://jaxb.java.net/tutorial/section_6_2_1-A-Survey-Of-JAXB-Annotations.html#Top-level Elements: XmlRootElement)

被這個(gè)注解的類來描述一個(gè)頂層的XML element。比如,一個(gè)可以作為一個(gè)XML文檔的類應(yīng)當(dāng)被注解為@XmlRootElement。它的可選element是namenamespace。默認(rèn)地,類名會(huì)被使用作為name的值。

這個(gè)注解對(duì)應(yīng)于一個(gè)被用在XML schema最外層的xsd:element結(jié)構(gòu)。下面的片段展示了這個(gè)關(guān)系:

@XmlRootElement( name="doc" )
public class Document {
   @XmlElement
   protected Foo foo;
   // ...
}
<?xml version="1.0" encoding="UTF-8"?>
<doc>
    <foo>...</foo>
</doc>
<?xml version="1.0" encoding="UTF-8"?>
<xsd:complexType name="Foo">
  ...
</xsd:complexType>
<xsd:complexType name="Document">
    <xsd:sequence>
        <xsd:element name="foo" type="Foo"/>
    </xsd:sequence>
</xsd:complexType>
<xsd:element name="doc" type="Document"/>

一個(gè)令人驚訝的事實(shí)是,如果你所有的Java類都允許直接映射到XML Schema,那么@XmlRootElement將會(huì)是你需要指定的唯一注解。下面是一些類,它們甚至可以排列一個(gè)Map<K, V>。

import java.util.HashMap;
import java.util.Map;
import javax.xml.bind.annotation.*;

@XmlRootElement(name="doc")
public class DocType {
    public Map<KeyType,EntryType> key2entry =
        new HashMap<KeyType,EntryType>();
    public DocType(){
    }
}
import javax.xml.datatype.*;
public class KeyType {
    public String               event;
    public XMLGregorianCalendar datetime;
    public KeyType(){}
    public KeyType( String event, XMLGregorianCalendar datetime ){
        this.event    = event;
        this.datetime = datetime;
    }
}
public class EntryType {
    public String program;
    public String artists;

    public EntryType(){}
    public EntryType( String artists, String program ){
        this.artists = artists;
        this.program = program;
    }
}

你會(huì)產(chǎn)生如下的XML數(shù)據(jù):

<doc>
    <key2entry>
        <entry>
            <key>
                <event>Soiree</event>
                <datetime>2008-08-23T20:00:00</datetime>
            </key>
            <value>
                <program>Man on the Moon</program>
                <artists>R.E.M</artists>
            </value>
        </entry>
    </key2entry>
</doc>

XMLGregorianCalendar對(duì)應(yīng)于xsd:dateTime。并且根據(jù)Schema Datatypes規(guī)范,在date和time之間的“T”是正確的。你可以看到JAXB不得不“發(fā)明”了一些tag name來充當(dāng)中間元素,將眾多map entry分開,將key數(shù)據(jù)和value數(shù)據(jù)分開。但是如果你自己設(shè)計(jì)的話你也會(huì)做類似的事情。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容