2011-09-01 56 views
7

以下模式應產生兩個原始int字段在一個類Value,而是產生用於元件java.lang.Integer屬性一個原始intXJC生成整數代替INT

<?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

回答

18

我不完全確定這是答案,但我在調試我的應用程序時有一個頓悟。

用於在XML模式的元件默認多樣性是1..1 (required)其中作爲用於屬性默認多樣性是0..1 (optional)

  1. 因此,由於元件需要和在Java中的原語具有默認值(最有可能的0),是有意義的產生<xsd:element type="xsd:int" />作爲Java原語。

  2. 由於屬性可選有一種可能性,即它可以是nillable使用原始這將是不可能的。 java.lang.IntegerObject,因此允許爲null,因此生成<xsd:attribute type="xsd:int" />作爲java.lang.Integer是有意義的。

如果做了屬性需要<xsd:attribute type="xsd:int" use="required" />),它會產生一個原始int。我沒有看到JAXB明確說明這一點的文檔,但這並不意味着它不存在;也許我只是錯過了它。

+4

+1 - 你的頓悟是正確的。 –