Я пытаюсь использовать JSXB-интроспекцию для маршаллинга и unmashall некоторых существующих объектов домена, помеченных аннотациями JAXB. Большинство вещей работает так, как ожидалось, но у меня довольно много проблем с получением довольно простого класса для сериализации. Этот класс используется как элемент @XmlElement для ряда beans и выглядит примерно так:
public class Range<E extends Comparable<E>> implements Serializable {
protected boolean startInclusive, endInclusive;
protected E start, end;
public Range(){
startInclusive = endInclusive = true;
}
public boolean contains(E value){...}
public E getEnd() {
return end;
}
public void setEnd(E end) {
this.end = end;
}
public boolean isEndInclusive() {
return endInclusive;
}
public void setEndInclusive(boolean endInclusive) {
this.endInclusive = endInclusive;
}
public E getStart() {
return start;
}
public void setStart(E start) {
this.start = start;
}
public boolean isStartInclusive() {
return startInclusive;
}
public void setStartInclusive(boolean startInclusive) {
this.startInclusive = startInclusive;
}
}
Я пытался сделать следующее, без каких-либо успехов, JAXB все еще злится на интерфейс Comparable.
public class DoubleRange extends Range<Double> {}
Используя как Range, так и DoubleRange в качестве типов возврата для getter bean, получается исключение, подобное:
java.lang.Comparable is an interface, and JAXB can't handle interfaces. this problem is related to the following location: at java.lang.Comparable at protected java.lang.Comparable com.controlpath.util.Range.start at example.util.Range at example.util.DoubleRange at public example.util.DoubleRange example.domain.SomeBean.getRange() at example.domain.SomeBean
Я понимаю, что в большинстве случаев List <T> и Map < T, U > работает только потому, что спецификация JAXB имеет специальные положения для этих типов, когда они встречаются на beans, но есть ли способ передать то, что я хочу для механизма самоанализа JAXB, не переустраивая диапазон с не-генерическими полями?