JAXB - 仅为元素的特定子类型设置XmlAdapter?

gga*_*iao 6 xml jaxb xml-serialization

我必须生成一个xml元素,它可以具有任何"基本类型"(xsd:string,xsd:boolean等)作为值.例子:

<field xsi:type="xsd:string" name="aString">String Value</field>
<field xsi:type="xsd:dateTime" name="aDate">2011-10-21</field>
<field xsi:type="xsd:dateTime" name="aDateTime">2011-10-21T12:00:00</field>
...
Run Code Online (Sandbox Code Playgroud)

所以,我使用这个实现使JAXB决定xsi:type原始类型:

public class Field {
    @XmlAttribute
    private String name;

    @XmlElement
    Object value;
}
Run Code Online (Sandbox Code Playgroud)

并且它按预期工作但所有java.util.Date获取类型xs:dateTime...

现在我只想在'value'对象是java.util.Date的一个实例时才改变marshaller的行为来获取这样的字段:

<field xsi:type="xsd:date" name="aDate">2011-10-21</field>
<field xsi:type="xsd:dateTime" name="aDateTime">2011-10-21T12:00:00</field>
Run Code Online (Sandbox Code Playgroud)

所以我创建了一个适配器,但如果我尝试这个:

@XmlElement
@XmlJavaTypeAdapter(DateAdapter.class)
Object value;
Run Code Online (Sandbox Code Playgroud)

适配器必须处理java.lang.Object类型

public class DateAdapter extends XmlAdapter<String, Object> {...}
Run Code Online (Sandbox Code Playgroud)

但我不想为所有其他对象(整数,双等)松散JAXB marshallers ...

有一种方法可以为元素的特定子类型设置适配器吗?

far*_*992 -1

尝试

http://jaxb.java.net/guide/Mapping_interfaces.html#Use__XmlJavaTypeAdapter

用于具有多种实现的接口的 XmlJavaTypeAdapter