JAXB的@XmlRootElement注解

被这个注解的类来描述一个顶层的XML element。比如,一个可以作为一个XML文档的类应当被注解为@XmlRootElement。它的可选element是namenamespace。默认地,类名会被使用作为name的值。

这个注解对应于一个被用在XML schema最外层的xsd:element结构。下面的片段展示了这个关系:

@XmlRootElement( name="doc" )
public class Document {
   @XmlElement
   protected Foo foo;
   // ...
}


    ...


  ...


    
        
    

 一个令人惊讶的事实是,如果你所有的Java类都允许直接映射到XML Schema,那么@XmlRootElement将会是你需要指定的唯一注解。下面是一些类,它们甚至可以排列一个Map

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

@XmlRootElement(name="doc")
public class DocType {
    public Map key2entry =
        new HashMap();
    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;
    }
}

你会产生如下的XML数据:


    
        
            
                Soiree
                2019-09-17T16:30:00
            
            
                Man on the Moon
                R.E.M
            
        
    

 XMLGregorianCalendar对应于xsd:dateTime。并且根据Schema Datatypes规范,在date和time之间的“T”是正确的。你可以看到JAXB不得不“发明”了一些tag name来充当中间元素,将众多map entry分开,将key数据和value数据分开。但是如果你自己设计的话你也会做类似的事情。

你可能感兴趣的:(JAXB)