JAXB - Установить XmlAdapter только для определенного подтипа элемента?

Мне нужно сгенерировать элемент 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>
...

Итак, я использую эту реализацию, которая заставляет JAXB определять xsi: type примитивного типа:

public class Field {
    @XmlAttribute
    private String name;

    @XmlElement
    Object value;
}

, и он работает, как ожидалось, но все java.util.Date получает тип xs: dateTime ...

Теперь я хочу изменить поведение упаковщика ТОЛЬКО, когда объект 'value' является экземпляром java.util.Date для получения таких полей:

<field xsi:type="xsd:date" name="aDate">2011-10-21</field>
<field xsi:type="xsd:dateTime" name="aDateTime">2011-10-21T12:00:00</field>

Итак, я создаю адаптер, но если я попробую это сделать:

@XmlElement
@XmlJavaTypeAdapter(DateAdapter.class)
Object value;

Адаптер должен обрабатывать тип java.lang.Object

public class DateAdapter extends XmlAdapter<String, Object> {...}

Но я не хочу терять маршаллеры JAXB для всех остальных объектов (Integer, Double и т. Д.) ) ...

есть способ установить адаптер для определенного подтипа элемента?

6
задан ggarciao 26 October 2011 в 08:22
поделиться