JAXB Marshaller не имеет элементов, значение которых равно нулю
Когда я выполняю маршалинг Java-объекта с помощью JAXB Marshaller, маршаллер не создает пустые элементы для пустых файлов в Java-объекте. Например, у меня есть следующий объект Java:
public class PersonTraining {
@XmlElement(name = "Val1", required = true)
protected BigDecimal val1;
@XmlElement(name = "Val2", required = true, nillable = true)
protected BigDecimal val2;
@XmlElement(name = "Val3", required = true, nillable = true)
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar val3;
}
Когда я беру экземпляр этого объекта и маршаллизирую в XML, я получаю следующее (это потому, что я не установил значение для Val2):
<PersonTraining>
<Val1>1</Val1>
<Val3>2010-01-01T00:00:00.0-05:00</Val3>
</PersonTraining>
Тем не менее, я ожидал следующего результата от операции маршаллинга (Infact, мне особенно нужен также элемент, чтобы можно было проверить XML на соответствие XSD)
<PersonTraining>
<Val1>1</Val1>
<Val2></Val2>
<Val3>2010-01-01T00:00:00.0-05:00</Val3>
</PersonTraining>
Пожалуйста, дайте мне знать, какую опцию мне нужно установить, чтобы нулевое значение в атрибутах объекта ТАКЖЕ могло быть маршализовано и возвращено как пустые / нулевые элементы.
Вот код сортировки:
StringWriter sw = new StringWriter();
JAXBContext jc = JAXBContext.newInstance("person_training");
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(ptl, sw);