当我使用 JAXB Marshaller 编组 java 对象时,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>
但是,我曾预计编组操作会产生以下结果(事实上,我还特别需要元素,以便可以针对 XSD 验证 XML)
<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);