2011-10-26 24 views
8

Estoy usando anotaciones JAXB para generar el esquema xsd de mis clases.Valor de atributo predeterminado JAXB

Anotación @XmlElement con el parámetro defaultValue establece el valor predeterminado para el elemento. ¿Es posible establecer el valor predeterminado para @XmlAttribute?

P.S. Comprobé que la sintaxis xsd permitir que los valores por defecto para los atributos

+1

Lo que ... la anotación efectivamente no tiene alguna clave DefaultValue. Estoy bastante sorprendido. –

+0

Se han discutido los valores predeterminados para los elementos [aquí] (http://stackoverflow.com/questions/371127) - quizás lo ayuden con los atributos. –

Respuesta

0

Cuando genera clases desde un xsd donde define un atributo con un valor predeterminado, entonces jaxb generará una cláusula if donde se verificará el valor nulo y, de ser así, devolverá el valor predeterminado.

0

Para valores XML, el valor predeterminado va dentro del método getter.

por ejemplo,

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> 

Se generará clase como a continuación.

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

Creado XML de ejemplo para leer

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

cuando escribimos la lógica para ordenar en nuestra clase principal.

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

Se imprimirá en consola. defaultElementName defaultAttributeValue

P.S -: para obtener el valor por defecto de elementos que necesita para tener una copia en blanco del elemento en XML que está siendo formateado.

Cuestiones relacionadas