JAXBアノテーションでマークアップされた既存のドメインオブジェクトをマーシャリングおよびアンマウントするために、JAXBのイントロスペクションを使用しようとしています。ほとんどのものは期待どおりに動作しますが、私はかなりシンプルなクラスを直列化するのにはかなり問題があります。このクラスは、豆の数に@XmlElementとして使用され、のようなものに見えている:私は成功しません、次の操作を実行しようとしていJAXBマーシャリングとジェネリックス
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インタフェースと怒っています。
のような豆ゲッターの利回り例外の戻り値の型として範囲とDoubleRangeの両方を使用してpublic class DoubleRange extends Range<Double> {}
:私はほとんどの場合、リスト<でT >実現
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
と< T、U >だけ仕事の地図JAXB仕様にはBeanで遭遇したときにこれらのタイプの特別な規定があるため、JAXBイントロスペクションエンジンに伝えたいことを非汎用フィールドで再実装する必要はありません。
JAXBが動揺して、カスタムマーシャリングコードをたくさん避ける理由について、いくつかの洞察を得ようとしています(私はヒットすると確信していますこれは将来のある時点で、これは潜在的に非常に複雑なオブジェクト上にある)。しかし、これは技術的には解決策であり、他に誰も優れた人がいなければ、数日後にそのようにマークします。ありがとう=) –