JAXB:generics的多态性

我正在尝试使用JAXB(在泽西岛内)与generics的多态性:

@XmlRootElement public class Performance { @XmlAnyElement private List measurement; } 
 @XmlJavaTypeAdapter(MeasurementAbstract.Adapter.class) public interface IMeasurement extends Serializable { D getDate(); void setDate(D date); V getValue(); void setValue(V value); } 
 @XmlTransient @XmlAccessorType(XmlAccessType.FIELD) @XmlSeeAlso({MeasurementStringDouble.class, MeasurementStringInteger.class}) public abstract class MeasurementAbstract implements IMeasurement { @XmlElement protected D date; @XmlElement protected V value; static class Adapter extends XmlAdapter { public IMeasurement unmarshal(MeasurementAbstract m) { return m; } public MeasurementAbstract marshal(IMeasurement v) { return (MeasurementAbstract) v; } } } 
 @XmlRootElement public class MeasurementStringDouble extends MeasurementAbstract {} @XmlRootElement public class MeasurementStringInteger extends MeasurementAbstract {} 

我有这个错误:

GRAVE:响应映射exception:500(内部服务器错误)javax.ws.rs.WebApplicationException:javax.xml.bind.MarshalException – 包含链接exception:[javax.xml.bind.JAXBException:class org.test.jaxb.MeasurementStringDouble在这种情况下,也不知道它的任何超类。]

我找到了解决这个问题的解决方案:

 @XmlRootElement public class Performance { @XmlElementWrapper(name = "measurementsPerformance") @XmlElements({ @XmlElement(name = "measurement", type = MeasurementStringDouble.class), @XmlElement(name = "measurement", type = MeasurementStringInteger.class)}) private List measurement; } 
 public interface IMeasurement extends Serializable { D getDate(); void setDate(D date); V getValue(); void setValue(V value); } 
 @XmlTransient public abstract class MeasurementAbstract implements IMeasurement, Serializable { protected D date; protected V value; } 
 @XmlRootElement @XmlAccessorType(XmlAccessType.PROPERTY) public class MeasurementStringDouble extends MeasurementAbstract { @XmlElement @Override public String getDate() { return date; } @XmlElement @Override public Double getValue() { return value; } } @XmlRootElement @XmlAccessorType(XmlAccessType.PROPERTY) public class MeasurementStringInteger extends MeasurementAbstract { @XmlElement @Override public String getDate() { return date; } @XmlElement @Override public Integer getValue() { return value; } } 

此解决方案的缺点是重复子类中的getter / setter。