Le problème est que je veux définir une valeur par défaut pour l'élément "name" qui est absent dans le fichier input.xml.Comment puis-je réaliser cela par Jaxb ?, Je ne veux pas le faire à travers le modèle java. Y at-il un moyen de l'obtenir à travers shema ou par Jaxb. est sous le code:comment définir la valeur par défaut pour l'élément si cet élément est absent dans le fichier xml via jaxb unmarshalling dans java
1. customer.xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="customer">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="stringMaxSize5" minOccurs="0" default="ss"/>
<xs:element name="phone-number" type="xs:integer" minOccurs="0" default="200" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="stringMaxSize5">
<xs:restriction base="xs:string">
<xs:maxLength value="5"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
2. Customer.model
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"name",
"phoneNumber"
})
@XmlRootElement(name = "customer")
public class Customer {
@XmlElement(defaultValue = "ss")
protected String name;
@XmlElement(name = "phone-number", defaultValue = "200")
protected BigInteger phoneNumber;
public String getName() {
return name;
}
public void setName(String value) {
this.name = value;
}
public BigInteger getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(BigInteger value) {
this.phoneNumber = value;
}
}
3. input.xml
<customer>
</customer>
Pour unmarshalling en utilisant le code ci-dessous:
SchemaFactory sf =SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File("customer.xsd"));
JAXBContext jc = JAXBContext.newInstance(Customer.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
unmarshaller.setSchema(schema);
Customer customer = (Customer) unmarshaller.unmarshal(new File("input.xml"));
System.out.println(customer.getName() + " " + customer.getPhoneNumber());
En exécutant ce que je reçois la valeur nulle pour le nom et si j'utilise le fichier ci-dessous input.xml avec l'élément « name » je reçois la valeur par défaut pour le nom champ.
input.xml file:
<customer><name/></customer>
Alors, comment définir la valeur par défaut pour l'élément manquant par JAXB?
oui cette façon, je reçois la valeur par défaut de l'élément, mais il y a un cas d'utilisation dans lequel je ne veux pas spécifier l'élément vide et même alors je veux définir la valeur par défaut. Alors est-il un moyen de faire cela? – Developer
Selon la documentation n'est pas possible avec JAXB. Dans ce cas, vous pouvez définir la valeur par défaut dans le code Java 'String name =" default "; – pedrofb