users@jaxb.java.net

Re: JAXB 2.0 default values

From: Joe Fialli <Joseph.Fialli_at_Sun.COM>
Date: Tue, 06 Sep 2005 14:47:27 -0400
Scott Allan wrote:
Wouldn't it also make sense to assign the default value to the
corresponding bean?  I may not always be unmarshaling the bean to use
it.



    protected String test="testvalue";
  

Scott,

JAXB 2.0 is implementing element defaulting as specified by XML Schema specification.
The XML Schema specification differentiates between a missing element and an empty element.

Extracted from the XML Schema Primer:  Section 2.2.1 PH 4 (non-normative but easiest to understand.)
... When an element is declared with a default value, the value of the element is whatever value appears as the element's content in the instance document; if the element appears without any content, the schema processor provides the element with a value equal to that of the |default <http://www.w3.org/TR/xmlschema-0/#attribute-attr-default>| attribute. However, if the element does not appear in the instance document, the schema processor does not provide the element at all. In summary, the differences between element and attribute defaults can be stated as: Default attribute values apply when attributes are missing, and default element values apply when elements are empty.
For the purposes of implementing unmarshalling, it made more sense that when a JAXB instance is created
that it is assumed each of its  JAXB property that maps to an XML element is missing. As each child XML element is
encountered during unmarshal process, the corresponding JAXB property is set. If an empty element is encountered, unmarshalling
sets the property to the default value.  If a child element is missing, nothing is done by the unmarshal process. Thus,
the default behavior was dictated by this fact.


-Joe Fialli, Sun Microsystems






  
-----Original Message-----
    

  
From: Ed Mooney [mailto:Ed.Mooney@Sun.COM]
    

  
Sent: Tuesday, September 06, 2005 7:50 AM
    

  
To: users@jaxb.dev.java.net
    

  
Subject: Re: JAXB 2.0 default values
    

  

  

  
The default gets assigned when you unmarshal an element with no value:
    

  

  
     xjc.sh test.xsd;javac `find . -name '*.java'`;java test
    

  
     parsing a schema...
    

  
     compiling a schema...
    

  
     testvalue
    

  

  
   -- Ed
    

  

  
Scott Allan wrote:
    

  
Does JAXB 2.0 support the element default attribute?
      

  
for example:
      

  
<xs:element name="test" type="xs:string" default="testvalue"/>
      

  

  
This compiles as such:
      

  
    @XmlElement(defaultValue = "testvalue")
      

  
    protected String test;
      

  

  
but when I try to read the value, it is null:
      

  

  
MyObject myObject = objFactory.createMyObject();
      

  
System.out.println(myObject.isSetTest());
      

  
System.out.println(myObject.getTest());
      

  

  
false
      

  
null
      

  

  
[ ... ]
    

  




  _____  

<< ella for Spam Control >> has removed 26707 Spam messages and set
aside 2 Newsletters for me
You can use it too - and it's FREE!  www.ellaforspam.com    


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@jaxb.dev.java.net
For additional commands, e-mail: users-help@jaxb.dev.java.net