1

JAXB アノテーション付きオブジェクトを反映して、マーシャリング中にクラス/フィールド/メソッドが xsi:type 属性になるかどうかを判断する方法はありますか?


annotation.type != javax.xml.bind.annotation.XmlElement.DEFAULT.class
心配する必要があるのは XmlElement アノテーションだけですか?

通常の xml 型情報の多くを削除した Lua アンマーシャラーを作成しており、受信した Lua を JAXB に一致させる方法を見つけようとしています。

ありがとう。

- アップデート -

問題を示す簡単な例を次に示します。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement()
@XmlSeeAlso({ Cat.class, Dog.class })
public class Animal {
  @XmlElement()
  public List<Animal> critters;
  @XmlAttribute
  public String type;
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement()
public class Dog extends Animal {
  public Dog() {
    this.type = "German Shepherd";
  }
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement()
public class Cat extends Animal {
  public Cat() {
    this.type = "Black";
  }
}

Animal オブジェクトを受け取ったときに、動物の注釈をクエリして、それが Animal ではなく Dog または Cat であることを検出できますか?

4

1 に答える 1

2

JAXB(JSR-222)実装がxsi:type属性を書き出す状況がいくつかあります。

  1. フィールド/プロパティがタイプObject(またはで注釈が付けられている@XmlElement(type=Object.class))であり、マッピングされていない場合、およびがマッピングされて@XmlAnyElement(lax=true)いるオブジェクトのインスタンスを保持しますJAXBContext
  2. 継承を表すデフォルトのメカニズムは、xsi:typeサブクラスを表す属性になります( http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using-xsitype.htmlを参照)。
于 2012-08-24T15:43:39.137 に答える