您正在使用JAXB 2.0对吗?(自JDK6起)
有一个类:
javax.xml.bind.annotation.adapters.XmlAdapter<ValueType,BoundType>
哪个可以继承,并重写以下方法:
public abstract BoundType unmarshal(ValueType v) throws Exception;public abstract ValueType marshal(BoundType v) throws Exception;
例:
public class YourNiceAdapter extends XmlAdapter<ReceiverPerson,Person>{ @Override public Person unmarshal(ReceiverPerson v){ return v; } @Override public ReceiverPerson marshal(Person v){ return new ReceiverPerson(v); // you must provide such c-tor }}使用方法如下:
@Your_favorite_JAXB_Annotations_Go_Hereclass SomeClass{ @XmlJavaTypeAdapter(YourNiceAdapter.class) Person hello; // field to unmarshal}我很确定,通过使用此概念,您可以自己控制编组/解组过程(包括选择要构造的正确[sub | super]类型)。



