There is little problem with JAXB.
Given:
Required
Get java object (root element) which fully represent xml and every member initialized by default values.
when I try to marshall xml without explicitly setting values, default values doesn't make sence... is there any way to marshall xml populated with default values without customization of generated classes?
example of .xsd:
<xs:element name="document">
<xs:complexType>
<xs:sequence>
<xs:element ref="d_int"/>
<xs:element ref="d_double"/>
<xs:element ref="d_string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="d_int" type="xs:int" default="-1"/>
<xs:element name="d_double" type="xs:double" default="-1.0"/>
<xs:element name="d_string" type="xs:string" default="false"/>
and java class:
public class Document {
@XmlElement(name = "d_int", defaultValue = "-1")
protected int dInt;
@XmlElement(name = "d_double", defaultValue = "-1.0")
protected double dDouble;
@XmlElement(name = "d_string", required = true, defaultValue = "Default")
protected String dString;
...
}
default value that is in annotations works only after unmarshalling.
unmarshal this
<document>
<d_int/>
<d_double/>
<d_string/>
</document>
and you will get object with default values (-1, -1.0, "Default")
If you want set default values to marshalling, you should do this
public class Document {
@XmlElement(name = "d_int", defaultValue = "-1")
protected int dInt = 100;
@XmlElement(name = "d_double", defaultValue = "-1.0")
protected double dDouble = -100;
@XmlElement(name = "d_string", required = true, defaultValue = "Default")
protected String dString = "def";
...
}
jaxb generate default values only for unmarshalling
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With