1つのプロパティにJAXBアノテーションを持つクラスがあります。次に、残りの重要なデータに注釈を付けるいくつかのサブクラスがあります。しかし、親クラスの注釈を無視してマーシャリングされないようにするために、1つのサブクラスがあります。ここにいくつかのコード例があります。親クラスのJAXBアノテーション付きプロパティを無視するにはどうすればよいですか?
親クラス:サブクラスのための今
@XmlType(name="Request")
@XmlAccessorType(XmlAccessorType.NONE)
public abstract class Request {
@XmlElement(required=true)
private UUID uuid;
... setter/getter
}
:私は、次のXMLを取得ConcreteClassのインスタンスをmasrhallとき
@Xsd(name="concreteRequest")
@XmlRootElement("ConcreteRequest")
@XmlType(name="ConcreteRequest")
@XmlAccessorType(XmlAccessorType.FIELD)
public class ConcreteClass {
@XmlElement(required=true)
private String data1;
@XmlElement(required=true)
private String data1;
... setters/getters ...
}
は:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConcreteRequest>
<uuid>uuid</uuid>
<data1>data</data1>
<data2>data</data3>
</ConcreteRequest>
私はXMLをしたいですこのように:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConcreteRequest>
<data1>data</data1>
<data2>data</data3>
</ConcreteRequest>
私たちはRequestの他の実装を持っていますが、これはUUIDを必要としますが、これは単なる特殊なケースです。私のConcreteRequestのUUIDフィールドを無視する方法はありますか?
残念ながら私は自分の状況でそれが可能だとは思わない。 UUIDフィールドはデータベースに保持されているため、オーバーライドすると危険です。 私のクラスは、UUIDを持っているがXMLスキーマに属していない特別なサブクラスです。 – prozaak
私の分析から、JAXBはあなたの要求に適したオプションを提供していません。JAXBの動作を利用することをお勧めします - "null値要素は@XmlElement(nillable = false)のとき無視されます"。したがって、マーシャリングの時に、値が「uuid」の明示性をnullにして、マーシャル時にプロパティを構築しないようにします。 サンプルコードがありますが、ここで共有できませんでした。 – omega
これは機能しません。 – GoalBased