JAXBのイントロスペクションを使用して、JAXBアノテーションでマークアップされた既存のドメインオブジェクトをマーシャルおよびアンマッシュしようとしています。ほとんどのことは期待どおりに機能しますが、かなり単純なクラスをシリアル化するのにかなりの問題があります。このクラスは、多くのBeanで@XmlElementとして使用され、次のようになります。
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> {}
Bean getterの戻りタイプとしてRangeとDoubleRangeの両方を使用すると、次のような例外が発生します。
java.lang.Comparableはインターフェースであり、JAXBはインターフェースを処理できません。 この問題は、次の場所に関連しています。 java.lang.Comparableで 保護されたjava.lang.Comparablecom.controlpath.util.Range.startで example.util.Rangeで example.util.DoubleRangeで public example.util.DoubleRange example.domain.SomeBean.getRange()で example.domain.SomeBeanで
ほとんどの場合、List<T>とMap<T、U>は、JAXB仕様に、Beanで検出されたときにこれらのタイプに特別な規定があるためにのみ機能することを認識していますが、JAXBイントロスペクションに必要なものを伝える方法はありますか非ジェネリックフィールドで範囲を再実装する必要のないエンジン?