在JAXB中,当定义minOccurs时,为什么有些元素生成的数据类型是Long,而另一些元素生成的是Long



我发现了一些非常奇特的东西,可能是微不足道的。当您在XSD中定义一个类型为xs:long的元素,而不设置minOccurs="0",并通过JAXB运行它时,得到的元素类型为long。但是,当您在XSD元素中设置minOccurs="0"时,结果元素的类型为Long。注意longLong数据类型之间的差异

现在,通过我所做的工作,我做了一些if (thisVariable == null)测试,当然,long不能为null。CCD_ 10可以。

*我想知道的是,这是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>

CCD_ 11和CCD_

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;

我只是觉得这个很奇怪,想了解更多关于这个的信息。

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

所以正如你所说的long不可能是null,所以如果没有Long,就无法模拟它不存在的情况。

当您不指定minOccurs = "0"时,这意味着无论值是什么(除了null,即不存在),queryId都将存在。因此,这种情况完全满足long,而不需要Long

最新更新