在JAXB中,为什么某些元素使用Long数据类型生成,而其他元素在定义minOccurs时生成长数据类型?

时间:2012-12-05 10:08:59

标签: java xsd jaxb

我发现了一些非常奇特的东西,可能是微不足道的。当您在XSD中定义类型为xs:long的元素,并且未设置minOccurs="0",并且通过JAXB运行它时,生成的元素的类型为long。但是,当您在XSD元素中设置minOccurs="0"时,结果元素的类型为Long。请注意longLong DataType

之间的区别

现在,通过我的工作,我做了一些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"  />

结果变为

public class ReportRequestWrapper {

    protected long queryId;
    protected long reportId;

我刚发现这很好奇,想要了解更多这方面的信息。

1 个答案:

答案 0 :(得分:4)

不,这不是错误,因为当你说minOccurs = "0"时,这意味着queryId可能存在或不存在。

正如您所说,long不能null,因此如果没有Long,就无法模拟不存在的情况。

当你没有指定minOccurs = "0"时,这意味着无论价值null即不存在),queryId将是当下。因此,此案例完全符合long,并且不需要Long