JAXB Marshaller を使用して Java オブジェクトをマーシャリングすると、マーシャラーは Java オブジェクトの null ファイルに対して空の要素を作成しません。たとえば、次の 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 値もマーシャリングされ、空/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);