Я пытаюсь использовать интроспекцию JAXB для маршалинга и демонтажа некоторых существующих доменных объектов, размеченных аннотациями JAXB. Большинство вещей работает, как и ожидалось, но у меня довольно много проблем с получением довольно простого класса для сериализации. Этот класс используется как @XmlElement для ряда bean-компонентов и выглядит примерно так:
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 в качестве типов возврата для метода получения 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 и Map работают только потому, что в спецификации JAXB есть специальные положения для этих типов, когда они встречаются на bean-компонентах, но есть ли способ передать то, что я хочу механизм самоанализа JAXB без необходимости переопределения диапазона с неуниверсальными полями?