1
有很多關於如何使用XmlTypeAdapters在JAXB中映射的例子,這很好。如何映射JAXB中的對象類型
但是,我的情況是我有一個可以通過任何類型的字段(即:Java中的Object.class)。我想要的是使用基本上將適用於該字段的編組/解組的所有控件傳遞給我的適配器。同樣,我不知道傳入類型,也不知道傳出類型,除了在運行時。
例如:
@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中做到這一點的正確方法嗎?如果不是,那麼做什麼方法?
Gaaah! +1 dweeb指向我。我沒有看到適配器中的斷點。在我的IDE中清理我的項目後,斷點如預期的那樣命中,並且上面的解決方案起作用。我希望這可以幫助別人。 – Caleb