我有一个有很多字段的类,其中一些是日期。具体来说,它们是MyDate对象,我的MyDate类扩展了java.util.Date。
当我封送我的顶级类时,日期字段显示在生成的XML中,但没有内容。顺便说一下,我已经验证了我的顶级对象中的字段不为空,它们确实引用了合法的MyDate对象。所以我得到的XML看起来像是
<TopLevelObject>
<address>1234</address>
<startDate></startDate>
<endDate></endDate>
. . .
</TopLevelObject>
我尝试注释MyDate类,以便我可以编组一个MyDate对象,并得到基本相同的结果:
<MyDate></MyDate>
我已经确认我正在编组的对象存在且包含合理的日期。
是否存在关于编组派生类的对象的一些我不明白的事情?
我尝试在java命令行上启用Jaxb调试(通过添加-Djaxb.debug = true)。这会导致一些输出,但我认为没有任何帮助。
编辑:在Blaise回应之前,我尝试添加@XmlSchemaType(name = "date")
答案 0 :(得分:1)
作为MyDate
的扩展名的您的类java.util.Date
被JAXB视为模型类而不是Date
类。因此,它只会封送公共字段和属性,或JAXB带注释的字段/属性。如果您希望将其视为java.util.Date
,则可以为其创建XmlAdapter
。
import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class MyDateAdapter extends XmlAdapter<Date, MyDate> {
@Override
public MyDate unmarshal(Date date) throws Exception {
// TODO Add logic to convert Date to MyDate
throw new UnsupportedOperationException();
}
@Override
public Date marshal(MyDate myDate) throws Exception {
return myDate;
}
}
要始终将此XmlAdapter
应用于您的MyDate
课程,您可以使用MyDate
注释对@XmlJavaTypeAdapter
进行注释:
import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlJavaTypeAdapter(MyDateAdapter.class)
public class MyDate extends Date {
}
什么是控制一个类是否被视为模型而不是 是什么内容被包括在编组中?
大多数情况下,不在标准Java SE包中的类将被视为域对象。
另外,当我创建XmlAdapter类时,我是否只是将它删除 在我的源目录中的MyDate.java旁边,或者我是否需要创建一个 在其他地方引用它?
XmlAdapter
是从@XmlJavaTypeAdapter
注释引用的。