コンポーネントオブジェクトをネストされたXML要素にする代わりに、それらのプロパティが、名前の前にタイプが付いたルート要素の直接の子になるように、オブジェクト階層をマーシャリングするにはどうすればよいですか。
たとえば、次のようになります。
(A)
public class Customer {
protected String firstName;
protected String lastName;
protected Address address;
}
public class Address {
protected String street;
protected String city;
}
通常のJAXBアノテーションを使用すると、次のようになります。
(B)
<customer>
<firstName>Juan</firstName>
<lastName>dela Cruz</lastName>
<address>
<street>123 Rizal Avenue</street>
<city>Manila</city>
</address>
</customer>
しかし、代わりに、私は同じようにマーシャルする必要があります
(C)
<customer>
<firstName>Juan</firstName>
<lastName>dela Cruz</lastName>
<address_street>123 Rizal Avenue</address_street>
<address_city>Manila</address_city>
</customer>
私はすでにこの問題のほとんどにJAXBを使用しているので、私のニーズを解決するためにJAXBの呪文があれば素晴らしいと思います。実際、これらは私の特定の状況にいくつかの制約を提示します。
- (A)のJavaクラスは、 (B)のXML構造に対応する既存のスキーマからJAXBによって生成されます。生成されたクラスの変更されたバージョンを維持したくない。
- 私は上記のスキーマを所有または維持していません。実際のスキーマは非常に大きく、多くの場合、小さな変更が加えられます。同等のスキーマを考え出し、維持するのは面倒です。また、スキーマの変更に対応するために、JAXBによる自動クラス生成に依存しています。
- それが物事を容易にするなら、入れ子は最大1レベルの深さです。この例で
Address
は、他の複合型は含まれていません。
@XmlPath
MOXyからの注釈を見ていますが、 (C)のようにノード名の前に付ける方法がわかりません。
適切なJAXBアノテーションを提供するいくつかのxjcカスタマイズが私を動かすソリューションを夢見ていますが、これまでの私の検索からはそうは思われません。JAXB以外のソリューションで十分です。