私はXMLにPOJOをマッピングするためにJAXBのEclipseLinkの実装(2.3)を使用していますに抽象的な「ゲッター」をマッピングし、以下のユースケースで問題に遭遇:JAXB-のEclipseLink:XML
public abstract class A {
public abstract Set<X> getX();
// There is no setter
}
public class B extends A {
// Set via constructor
private Set<X> x;
@Override
public Set<X> getX();
}
私はマッピングを定義しています
<java-type name="foo.A" xml-transient="true"/>
およびクラスBのために:
<java-type name="bar.B" xml-accessor-type="PROPERTY">
<xml-root-element name="B" />
<java-attributes>
<xml-element java-attribute="x" xml-path="..."/>
</java-attributes>
</java-type>
自体が完全に外部のバインディング・ファイルに、私は、クラスAはそうなどの過渡されるように設定します
さて、マーシャリング時に、私は例外を取得しています: 私の意見ではB.
によって継承され、Aにおける抽象宣言から来ている「重複するプロパティの名前[X]クラスは、[bar.B]で見つかりました」Bのアクセサー型をFIELDに設定すると、このエラーが取り除かれます。残念ながら、これはオプションではありません。フィールドを返さないmarshalにはBの余分なプロパティがあります。 PROPERTY(次の作業:BのFIELDへのアクセサ型を設定し、余分なプロパティを@XmlPathアノテーションでマッピングする - しかし、私のコードではアノテーションは必要ありません)
は、クラスBのアクセッサ型PROPERTYで立ち往生している、私の次の試みでした:
Ignoring attribute [x] on class [bar.B] as no Property was generated for it.
同じ:
<java-type name="foo.A" xml-accessor-type="NONE"/>
が私を取得され、Bによって継承されることから、抽象プロパティを防ぐために
<java-type name="foo.A" xml-accessor-type="PROPERTY">
<java-attributes>
<xml-transient java-attribute="x"/>
</java-attributes>
</java-type>
両方の場合、プロパティ 'x'は無視されます。
私は本当にこれで今かなりの時間を費やしています - これを動作させることができないと想像できませんか?現時点では
私の回避策:
は、一過性であることをfoo.Aを残して(問題なく私プロパティ「X」を取得します)bar.Bのアクセッサ型フィールドを指定して使用してBに余分なプロパティをマッピングコード内の注釈。 しかし、前にも触れましたが、私はこれをアノテーションなしで完全に解決したいと思います。ブレイズ? :)
に関して、
--qu
私は現在あなたの問題を調査中です。すぐに回答を掲載します。 –
素晴らしい!何らかの関連性:サブクラスがマーシャリングされているときに、スーパークラスのプロパティがデフォルトで「見えない」というデフォルトの動作ですか?私はちょうど冗長なサブクラスでそれらをオーバーライドする必要があることを経験しました... – quaylar
あなたはバグ(https://bugs.eclipse.org/367886)にヒットしたようですが、私たちは現在修正を探しています。表示されているその他の問題の詳細については、http://blog.bdoughan.com/p/contact_01.html –