EclipseLink JAXB (MOXy) или любая реализация JAXB не будет выполнять операцию установки для отсутствующих узлов, поэтому вы можете сделать следующее:
Параметр № 1 - по умолчаниюзначение поля
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
class A {
@XmlPath("B/text()")
private String b = "fieldDefault";
@XmlPath("C/text()")
private Integer c;
}
Со следующим демонстрационным кодом:
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(A.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
A a = (A) unmarshaller.unmarshal(new StringReader("<a/>"));
System.out.println(a.getB());
System.out.println(a.getC());
}
}
Будет выдан следующий вывод:
fieldDefault
null
Опция # 2- Укажите defaultValue для @XmlElement
. Вы можете указать defaultValue для аннотации @XmlElement
, но это будет устанавливать defaultValue только тогда, когда пустой элемент не маршалируется.
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
class A {
@XmlPath("B/text()")
@XmlElement(defaultValue="annotationDefault")
private String b;
@XmlPath("C/text()")
@XmlElement(defaultValue="annotationDefault")
private Integer c;
}
Со следующим демонстрационным кодом:
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(A.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
A a = (A) unmarshaller.unmarshal(new StringReader("<a><B/></a>"));
System.out.println(a.getB());
System.out.println(a.getC());
}
}
Будет выдан следующий вывод:
annotationDefault
null
Опция № 3 - укажите схему XML в Unmarshaller
для принудительной проверки
Используя MOXy или любую реализацию JAXB, вы можете установить схему XML в Unmarshaller, чтобы проверять ввод: