3

我发现了一些非常奇怪的东西,而且可能微不足道。当您在 XSD 中定义一个具有 type 的 Elementxs:long并且您没有设置minOccurs="0"并且通过 JAXB 运行它时,生成的元素是 type long。但是,当您minOccurs="0"在 XSD 元素中设置时,结果元素的类型为Long. long注意和LongDataType之间的区别

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

结果变成了

public class ReportRequestWrapper {

    protected long queryId;
    protected long reportId;

我只是觉得这很好奇,想要更多关于这个的信息。

4

1 回答 1

4

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

所以正如你所说的long不能null,所以不能模拟它不存在的情况Long

而当您不指定minOccurs = "0"这意味着无论值是什么null即不存在的其他值),queryId都会存在。所以本案完全满意,long不需要Long

于 2012-12-05T10:20:04.453 回答