私はこの問題を理解するために一日を費やしましたが(このサイトでの広範な検索を含む)、私の問題に対する答えを見つけることができません。私はこれを達成しようとしています:
- XMLと私が制御できないいくつかの既存のJavaオブジェクトの間で変換する
- 結果/ソースXMLの要素の名前は、Javaクラスのプロパティの名前とは異なります
- jaxb-2.0に制限されています
- アノテーションを含めることができるラッピングクラスを導入する場合があります
私が達成しようとしていることの例をお見せしましょう。私が制御できないJavaクラスは次のようになっていると仮定しましょう。
public class TopNoControlClass {
private BottomNoControlClass bottomNoControlObject;
public TopNoControlClass(BottomNoControlClass bottomNoControlObject) {
super();
this.bottomNoControlObject = bottomNoControlObject;
}
public BottomNoControlClass getBottomNoControlObject() {
return bottomNoControlObject;
}
public void setBottomNoControlObject(BottomNoControlClass bottomNoControlObject) {
this.bottomNoControlObject = bottomNoControlObject;
}
}
そして、参照されるクラス:
public class BottomNoControlClass {
private String foo;
public BottomNoControlClass(String foo) {
super();
this.foo = foo;
}
public String getFoo() {
return foo;
}
public void setFoo(String foo) {
this.foo = foo;
}
}
そして、私がこれをマーシャリングから取り除きたいと想像してください:
<?xml version="1.0" encoding="UTF-8"?>
<Top>
<Bottom>
<bar>XXX</bar>
</Bottom>
</Top>
<Top>はTopNoControlClassにマップされ、< Bottom> BottomはBottomNoControlClassにマップされ、<bar>はBottomNoControlClassのfooプロパティにマップされます。
上記を行うために、マッピングを記述する外部XMLバインディングを作成することに慣れていますが、実行時にその外部バインディングファイルを使用する方法を理解することはできません。これまでに見たすべての例では、生成時に(つまり、xjcへのパラメーターとして)外部XMLバインディングのみを使用していました。
また、参照するクラス(つまり、 TopNoControlClassとBottomNoControlClass )のクラス名とクラスプロパティ名をオーバーライドするラッパークラスを導入しても問題はありません。そのクラスを使用してJAXBContextを構築し、残りをJAXBに任せるのは簡単です。しかし、その注釈がどのように見えるべきか理解できません。
どんな助けでも大歓迎です
ジャロスラフ