JAXB 马歇尔没有值为 null 的元素
当我使用 JAXB Marshaller 封送 Java 对象时,元帅不会为 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>
但是,我本来以为封送操作会得到以下结果(事实上,我也特别需要元素,以便可以根据XSD验证XML)
<PersonTraining>
<Val1>1</Val1>
<Val2></Val2>
<Val3>2010-01-01T00:00:00.0-05:00</Val3>
</PersonTraining>
请让我知道我需要设置什么选项,以便对象属性中的 null 值也可以被封送,并作为空/空元素返回。
以下是编组代码:
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);