Мне нужно сгенерировать элемент 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 type
public class DateAdapter extends XmlAdapter<String, Object> {...}
Но я не хочу терять маршалеры JAXB для всех остальных объектов (Integer, Double и т. Д.) ...
есть ли способ установить адаптер для определенного подтипа элемента?