2012-08-24 63 views
1

反映在JAXB註釋對象上,有沒有一種方法可以確定類/字段/方法是否會在編組期間導致屬於xsi:type的屬性?以編程方式確定JAXB註釋是否會導致xsi:type註釋?

是XmlElement的註釋,
annotation.type != javax.xml.bind.annotation.XmlElement.DEFAULT.class
我需要擔心的唯一案例?

我正在寫一個Lua unmarshaler,我們已經放棄了大部分通常的xml類型信息,我試圖弄清楚如何將傳入的Lua匹配到JAXB。

謝謝。

--Update--

下面是簡單的例子來說明這個問題:

@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對象我可以查詢小動物的註解來檢測,它應該是狗或貓而不是動物?

回答

1

有幾種情況下,JAXB (JSR-222)實現將寫出一個xsi:type屬性。

  1. 如果字段/屬性是Object類型的(或注有@XmlElement(type=Object.class)) and not mapped with @XmlAnyElement(不嚴=真)and holds an instance of an Object that the JAXBContext`具有映射。
  2. 用於表示繼承將導致xsi:type屬性的默認機構代表子類(見:http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using-xsitype.html
+0

感謝布萊斯案例#2是我很感興趣,我怎樣檢測繼承是有什麼在註釋或做我需要到別處 –

+0

@。?邁克 - 沒有一種標準的方式跨JAXB實現工作。如果你提供更多關於你想要映射的信息,我可能能夠以這種方式提供幫助。我非常熟悉JAXB和繼承:http://blog.bdoughan.com/search/label/Inheritance) –

+0

對於回覆延遲感到抱歉。我們正在使用Oracle的參考實現。我的工作是遞歸地通過超類構建註解映射,到目前爲止這工作。能夠問一個註釋雖然它期望什麼類型將是方便的。我會嘗試用簡單的例子來發布它併發布它。謝謝你的時間。 –