2011-10-26 194 views
8

我使用JAXB註釋從我的類生成xsd模式。JAXB默認屬性值

帶參數defaultValue的Annotation @XmlElement設置元素的默認值。 是否可以爲@XmlAttribute設置默認值?

P.S.我檢查了XSD語法允許屬性

+1

什麼...註釋有效地沒有一些defaultValue鍵。其實我很驚訝。 –

+0

已經討論過元素的默認值[here](http://stackoverflow.com/questions/371127) - 也許會幫助你獲得屬性。 –

回答

0

當您從xsd生成類,並在其中定義一個具有默認值的屬性時,那麼jaxb將生成一個if子句,它將檢查空值,如果是,將返回默認值。

0

對於XML屬性,默認值進入getter方法。

例如

customer.xsd

<?xml version="1.0" encoding="UTF-8"?> 
<schema xmlns="http://www.w3.org/2001/XMLSchema"> 
    <element name="Customer"> 
     <complexType> 
      <sequence> 
       <element name="element" type="string" maxOccurs="1" minOccurs="0" default="defaultElementName"></element> 
      </sequence> 
      <attribute name="attribute" type="string" default="defaultAttributeValue"></attribute> 
     </complexType> 
    </element> 
</schema> 

它將產生象下面類。

@XmlRootElement(name = "Customer") 
public class Customer { 

    @XmlElement(required = true, defaultValue = "defaultElementName") 
    protected String element; 
    @XmlAttribute(name = "attribute") 
    protected String attribute; 

    ...... 

    public String getAttribute() { 
     //here the default value is set. 
     if (attribute == null) { 
      return "defaultAttributeValue"; 
     } else { 
      return attribute; 
     } 
    } 

創建的樣本XML閱讀

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Customer><element/></Customer> 

當我們在主類編寫邏輯馬歇爾。

File file = new File("...src/com/testdefault/xsd/CustomerRead.xml"); 
      JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class); 

      Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
      Customer customer = (Customer) jaxbUnmarshaller.unmarshal(file); 
      System.out.println(customer.getElement()); 
      System.out.println(customer.getAttribute()); 

這將打印在控制檯。 defaultElementName defaultAttributeValue

P.S - :要獲取元素的默認值,需要將元素的空白副本放入正在編組的xml中。