XJC 生成整数而不是 int

Posted

技术标签:

【中文标题】XJC 生成整数而不是 int【英文标题】:XJC Generating Integer Instead of int 【发布时间】:2011-11-08 09:07:24 【问题描述】:

以下架构应该在Value 类中生成两个原始int 字段,而是为元素 生成原始int 和为属性生成java.lang.Integer

<?xml version="1.0" encoding="UTF-8"?>

<xsd:schema version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.com/test" xmlns:test="http://www.example.com/test"
    elementFormDefault="qualified">

    <xsd:element name="values">
        <xsd:complexType>
            <xsd:sequence minOccurs="0" maxOccurs="unbounded">
                <xsd:element ref="test:value" />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="value">
        <xsd:complexType>
            <xsd:sequence>
                <!-- Is generated as primitive int -->
                <xsd:element name="element" type="xsd:int" />
            </xsd:sequence>
            <!-- Is generated as java.lang.Integer -->
            <xsd:attribute name="attribute" type="xsd:int" />
        </xsd:complexType>
    </xsd:element>

</xsd:schema>

我已经查看了 JAXB documentation 中的任何内容,即属性和元素的生成方式可能不同,但一无所获。

谁能解释一下?是否有解决方法使属性生成为原始int

【问题讨论】:

【参考方案1】:

我不完全确定这就是答案,但我在调试我的应用程序时顿悟了。

XML 架构中 元素 的默认多重性是 1..1 (required),而 属性 的默认多重性是 0..1 (optional)

    因此,由于 元素必需 并且 Java 中的原语具有默认值(很可能是 0),因此生成 @987654325 是有意义的@ 作为 Java 原语。

    由于 属性可选,因此它可能是 nillable,而使用原语是不可能的。 java.lang.Integer 是 Object,因此可以是 null,因此将 &lt;xsd:attribute type="xsd:int" /&gt; 生成为 java.lang.Integer 是有意义的。

如果您将属性设为必需 (&lt;xsd:attribute type="xsd:int" use="required" /&gt;),它将生成为原始int。我还没有看到 JAXB 的文档明确说明了这一点,但这并不意味着它不存在;也许我只是错过了。

【讨论】:

以上是关于XJC 生成整数而不是 int的主要内容,如果未能解决你的问题,请参考以下文章

何时使用 trunc() 而不是 int() 将浮点类型数转换为整数更好?

如何在javascript中进行整数除法(在int中获取除法答案而不是float)? [复制]

使 Int64 成为默认的整数 dtype,而不是 pandas 中的标准 int64

Cakephp:保存数组值而不是整数

雪花数据仓库 - 使用字母数字字符而不是整数生成维度 id

日期只输入一个整数而不是C中的日月年