2015-10-18 63 views
0

我有一個模式,它定義了一個具有可選布爾屬性的類型。我想補充的一個類型,增加了用於設置屬性的默認值設置爲「true」,然而,當我們使用JAXB生成的Java類該類ReallyBob已申請在JAXB生成的Java類中應用默認值限制

<xsd:complexType name="bob"> 
    <xsd:attribute name="isBob" type="xsd:boolean" use="optional" /> 
</xsd:complexType> 

<xsd:complexType name="reallyBob"> 
    <xsd:complexContent> 
     <xsd:restriction base="sa:bob"> 
      <xsd:attribute name="isBob" type="xsd:boolean" default="true" use="optional" /> 
     </xsd:restriction> 
    </xsd:complexContent> 
</xsd:complexType> 

沒有限制的限制。

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "reallyBob") 
public class ReallyBob 
    extends Bob 
{ 
} 

有沒有辦法讓我生成的類ReallyBob設置isBob屬性的默認值?

編組期間我所看到的關於不被JAXB,即herehere答覆表明開啓模式驗證應用的限制類似的問題...我不知道如何將適用於這種情況下,它的默認值,而比價值限制。

也許還有另外一種方法來解決這個問題嗎?

回答

1

一個選項是在解組完成後設置該值。

這包括添加下面的方法來你的對象,並設置對象這個方法裏面的默認值:

void afterUnmarshal(Unmarshaller u, Object parent) { 
    this.isBob = true; 
} 

請參閱相關文檔here

+0

感謝科斯蒂,我們不能使用「,在類「回調,因爲類會生成,任何代碼chages在下次生成時都會被丟棄。但是,我們可以使用Unmarshaller.Listener實例來設置我們的限制(使用默認值)元素的默認值。這將工作。然而,這意味着我們需要複製架構和Unmarshalling監聽器中定義的默認值集合,以及發生錯誤的所有可能性......但我還沒有找到任何更好的方法來實現這一點。 –

+0

啊,我的道歉,我沒有意識到。是的,你的解決方案和我的解決方案一樣,只是在不同的地方!我有一個最後的建議是,有時候JAXB註釋並不是明確需要的,你是否檢查過默認值是沒有設置的? – kirsty