2011-10-26 22 views
8

Sto usando le annotazioni JAXB per generare lo schema xsd dalle mie classi.Valore attributo predefinito JAXB

Annotazione @XmlElement con parametro defaultValue imposta il valore predefinito per elemento. È possibile impostare il valore predefinito per @XmlAttribute?

P.S. Ho controllato che la sintassi xsd consentire valori di default per gli attributi

+1

Cosa ... l'annotazione non ha effettivamente alcuna chiave defaultValue. Sono davvero piuttosto sorpreso. –

+0

I valori predefiniti per gli elementi sono stati discussi [qui] (http://stackoverflow.com/questions/371127) - forse ti aiuterà per gli attributi. –

risposta

3

potrebbe desiderare di controllare questo: Does JAXB support default schema values?

Per essere onesti, non ho la più pallida idea perché non c'è un'opzione predefinita di attributo in serie JAXB.

0

Quando si generano classi da un xsd in cui si definisce un attributo con un valore predefinito, jaxb genererà una clausola if dove controllerà il valore null e in tal caso, restituirà il valore predefinito.

0

Per gli attributi XML, il valore predefinito va all'interno del metodo getter.

per esempio,

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> 

Si genererà classe come qui di seguito.

@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; 
     } 
    } 

Creato XML di esempio per leggere

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

quando scriviamo la logica per marshall nella nostra classe principale.

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()); 

Stampa in console. defaultElementName defaultAttributeValue

P.S -: per ottenere il valore di default di elementi hai bisogno di una copia in bianco di elemento in XML che viene marshalling.