用户扩展日期对象的JAXB编组总是导致空XML

用户扩展日期对象的JAXB编组总是导致空XML,jaxb,Jaxb,我有一个类,它有许多字段,其中一些是日期。具体来说,它们是MyDate对象,MyDate类在其中扩展了java.util.Date 当我封送顶级类时,日期字段显示在结果XML中,但没有内容。顺便说一句,我已经验证了我的顶级对象中的字段不是空的,它们确实引用了合法的MyDate对象。所以我得到的XML看起来像 1234 . . . 我尝试注释MyDate类,以便封送单个MyDate对象,结果基本相同: 我已经确认我正在封送的对象存在,并且包含一个合理的日期 是否有一些关于封送派生类的对象的事

我有一个类,它有许多字段,其中一些是日期。具体来说,它们是MyDate对象,MyDate类在其中扩展了java.util.Date

当我封送顶级类时,日期字段显示在结果XML中,但没有内容。顺便说一句,我已经验证了我的顶级对象中的字段不是空的,它们确实引用了合法的MyDate对象。所以我得到的XML看起来像

1234
. . .

我尝试注释MyDate类,以便封送单个MyDate对象,结果基本相同:

我已经确认我正在封送的对象存在,并且包含一个合理的日期

是否有一些关于封送派生类的对象的事情我不明白

我已经尝试在java命令行上打开Jaxb调试(通过放置-Djaxb.debug=true)。这会产生一些输出,但我觉得没有什么有用的

编辑:在Blaise回应之前,我尝试添加
@XmlSchemaType(name=“date”)


就在模型类中每个MyDate属性声明之前。这似乎导致封送处理代码在创建XML的过程中崩溃。生成的XML正好停在中间;任何地方都没有抛出异常或堆栈跟踪之类的指示。

您的类
MyDate
java.util.Date
的扩展,JAXB将其视为模型类,而不是
Date
类。因此,它将只封送公共字段和属性,或JAXB注释的字段/属性。如果希望将其视为
java.util.Date
,可以为其创建
XmlAdapter

import java.util.Date;
导入javax.xml.bind.annotation.adapters.XmlAdapter;
公共类MyDateAdapter扩展了XmlAdapter{
@凌驾
公共MyDate解组(日期日期)引发异常{
//TODO添加将日期转换为MyDate的逻辑
抛出新的UnsupportedOperationException();
}
@凌驾
公共日期封送处理程序(MyDate MyDate)引发异常{
返回myDate;
}
}
要始终将此
XmlAdapter
应用于
MyDate
类,可以使用
@XmlJavaTypeAdapter
注释
MyDate

import java.util.Date;
导入javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlJavaTypeAdapter(MyDateAdapter.class)
公共类MyDate扩展日期{
}
更新 控制类是否被视为模型而不是模型的是什么 其内容是否包含在编组中

在大多数情况下,不在标准JavaSE包中的类将被视为域对象

另外,当我创建XmlAdapter类时,我是否只是将其关闭 在我的源目录中MyDate.java的旁边,或者我需要创建一个 在其他地方提到过吗


XmlAdapter
是从
@XmlJavaTypeAdapter
注释中引用的。

谢谢,布莱斯,我已经从你的博客中获得了其他好信息。是什么控制类是否被视为模型,而不是其内容是否包含在封送处理中?另外,当我创建XmlAdapter类时,我是将它链接到我的源目录中的MyDate.java旁边,还是需要在其他地方创建对它的引用?@Topher-a
XmlAdapter
在对象是根对象时不应用于对象。下面是手动应用它的方法:我尝试了这个XmlAdapter建议,它可以让我的模型对象中的日期被封送。奇怪的是,当我尝试仅封送一个MyDate对象时,仍然不会生成任何有意义的输出,但现在这对我来说不是问题。此外,除了MyDate中的注释之外,我不必创建对新MyDateAdapter类的任何类型的引用。