问题描述
以下模式应该在 Value
类中生成两个原始 int
字段,而是为 生成一个原始 int
元素和java.lang.Integer 用于属性.
The following schema should be generating two primitive int
fields in a Value
class, but instead generates a primitive int
for the element and java.lang.Integer for the attribute.
<?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 文档 任何说明可以生成属性和元素的内容不同,什么也没发现.
I've looked through the JAXB documentation for anything that says that attributes and elements may be generated differently and found nothing.
谁能解释一下?是否有修复方法可以使属性生成为原始 int
?
Can anyone explain this? Is there a fix to make the attribute generate as a primitive int
?
推荐答案
我不完全确定这就是答案,但我在调试我的应用程序时顿悟了.
I'm not entirely sure this is the answer, but I had an epiphany while debugging my app.
XML 模式中元素的默认多重性为1..1(必需)
,其中属性的默认多重性是 0..1(可选)
.
The default multiplicity for an element in an XML schema is 1..1 (required)
where as the default multiplicity for an attribute is 0..1 (optional)
.
因此,由于元素是必需的并且Java中的原语具有默认值(很可能是0),因此生成
<xsd:element type="xsd:int"/>
作为 Java 原语.
So, since the element is required and a primitive in Java has a default value (most likely 0), it makes sense to generate an
<xsd:element type="xsd:int" />
as a Java primitive.
由于属性是可选,所以它可能是nillable
,而使用原语是不可能的.java.lang.Integer 是一个 Objectcode>,因此允许为
null
,因此生成 <xsd:attribute type="xsd:int"/>
作为 java.lang.Integer.
Since the attribute is optional there is a possibility that it may be
nillable
which would not be possible using a primitive. The java.lang.Integer is an Object
and thus allowed to be null
, so it makes sense to generate an <xsd:attribute type="xsd:int" />
as an java.lang.Integer.
如果您将属性设为必需(
<xsd:attribute type="xsd:int" use="required"/>code>),它将生成一个原始的
int
.我还没有看到 JAXB 明确说明这一点的文档,但这并不意味着它不存在;也许我只是错过了.
If you make an attribute be required (
<xsd:attribute type="xsd:int" use="required" />
), it will generate as a primitive int
. I haven't seen documentation by JAXB that explicitly says this, but that doesn't mean it doesn't exist; perhaps I just missed it.
这篇关于XJC 生成整数而不是 int的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!