我發現了一些非常奇特的東西,可能並不重要。當您在XSD中定義類型爲xs:long
的元素,並且您未設置minOccurs="0"
,並且通過JAXB運行它時,生成的元素的類型爲long
。但是,當您在XSD元素中設置minOccurs="0"
時,生成的元素的類型爲Long
。注意long
和Long
數據類型在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>
queryId
和reportId
出來如下:
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;
我剛剛發現這個漂亮的好奇,並希望在這一個的更多信息。
我不確定當你自己提供所有答案時,我已經得到了你的問題:如果XSD中的元素標記爲可選,則使用包裝器類型(空==忽略) – Puce
如果省略minOccurs = 「0」,那麼這個元素是* required *只發生一次。所以'null'不會是一個有效的值,所以爲什麼*它應該被支持?在這種情況下,「long」是正確的數據類型。 –
我今天學到了一些東西:D 雖然我對JAXB仍然很陌生。 – Eon