Существует множество примеров того, как отобразить в JAXB, используя XmlTypeAdapters, и это здорово.
Однако моя ситуация такова: у меня есть поле любого типа (например, Object.class в Java). То, что я хочу, это использовать адаптер, который в основном передает мне все управление маршалингом / демаршаллингом для этого поля. Опять же, я не знаю входящий тип и исходящий тип, кроме как во время выполнения.
Например:
@XmlRootElement( name="myType" )
@XmlAccessorType(XmlAccessType.FIELD)
class MyType {
@XmlElement("value")
@XmlJavaTypeAdapter(ValueAdapter.class)
private Object value;
public static class ValueAdapter extends XmlAdapter<Object, Object> {
public ValueAdapter() {
}
public Object marshal(Object value) {
if (value instanceof Date) {
// do date stuff
}
else if (value instanceof Foo) {
// do foo stuff
}
// ... etc ...
else {
return value;
}
}
public Object unmarshal(Object value) {
if (value instanceof Date) {
// do date stuff
}
else if (value instanceof Foo) {
// do foo stuff
}
// ... etc ...
else {
return value;
}
}
}
// getter/setter fluff ...
}
Однако, используя Джексона, ValueAdapter не вызывается.
Это правильный способ сделать это в JAXB? Если нет, то как это сделать?