2012-12-05 56 views
3

我發現了一些非常奇特的東西,可能並不重要。當您在XSD中定義類型爲xs:long的元素,並且您未設置minOccurs="0",並且通過JAXB運行它時,生成的元素的類型爲long。但是,當您在XSD元素中設置minOccurs="0"時,生成的元素的類型爲Long。注意longLong數據類型在JAXB中,爲什麼某些元素使用Long數據類型生成,而其他數據類型在定義minOccurs時使用long數據類型?

的區別現在,我做的工作,我做了一些測試if (thisVariable == null),自然,long不能爲空。 Long可以。

* 我想知道的是,這是JAXB中的一個錯誤,它導致了結果變量之間的差異,還是意味着這些結果變量會以它們的方式出現? *

這裏是我使用測試文件:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<xs:schema id="ReportRequestWrapper" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xs:element name="ReportRequestWrapper"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="queryId" type="xs:long" minOccurs="0" /> 
     <xs:element name="reportId" type="xs:long" minOccurs="0" /> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

queryIdreportId出來如下:

public class ReportRequestWrapper { 

    protected Long queryId; 
    protected Long reportId; 

如果我省略了的minOccurs = 「0」,

 <xs:element name="queryId" type="xs:long" /> 
     <xs:element name="reportId" type="xs:long" /> 

結果LT變成

public class ReportRequestWrapper { 

    protected long queryId; 
    protected long reportId; 

我剛剛發現這個漂亮的好奇,並希望在這一個的更多信息。

+1

我不確定當你自己提供所有答案時,我已經得到了你的問題:如果XSD中的元素標記爲可選,則使用包裝器類型(空==忽略) – Puce

+1

如果省略minOccurs = 「0」,那麼這個元素是* required *只發生一次。所以'null'不會是一個有效的值,所以爲什麼*它應該被支持?在這種情況下,「long」是正確的數據類型。 –

+0

我今天學到了一些東西:D 雖然我對JAXB仍然很陌生。 – Eon

回答

4

不,這不是一個錯誤,因爲當你說minOccurs = "0"這意味着有一種可能性,即queryId可能存在與否。

所以如你所說long不能是null,所以它不存在的情況下不能模擬沒有Long

而當你不指定minOccurs = "0"這意味着無論什麼價值(其他是null即不存在),queryId將出席。所以這種情況完全滿足於long而不需要Long

+0

這是有道理的。謝謝。 – Eon

相關問題