Мне нужно сгенерировать элемент 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 и т. Д.) ) ...
есть способ установить адаптер для определенного подтипа элемента?