2011-09-01 13 views
7

Giản đồ sau đây cần được tạo ra hai nguyên thủy int lĩnh vực trong một lớp học Value, nhưng thay vì tạo ra một nguyên thủy int cho yếu tốjava.lang.Integer cho thuộc tính.XJC Tạo Integer Thay vì 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> 

Tôi đã xem qua JAXB documentation vì bất kỳ điều gì nói rằng thuộc tính và thành phần có thể được tạo khác và không tìm thấy gì.

Có ai có thể giải thích điều này không? Có một sửa chữa để làm cho thuộc tính tạo ra như là một nguyên thủy int?

Trả lời

18

Tôi không hoàn toàn chắc chắn đây là câu trả lời, nhưng tôi đã có một hiển linh trong khi gỡ lỗi ứng dụng của mình.

Các đa mặc định cho một yếu tố trong một lược đồ XML là 1..1 (required) nơi như sự đa dạng mặc định cho một thuộc tính0..1 (optional).

  1. Vì vậy, kể từ khi các yếu tố được cần và một nguyên thủy trong Java có một giá trị mặc định (hầu như 0), nó làm cho tinh thần để tạo ra một <xsd:element type="xsd:int" /> như một Java nguyên thủy.

  2. Kể từ khi thuộc tínhtùy chọn có một khả năng mà nó có thể là nillable đó sẽ không thể sử dụng một nguyên thủy. java.lang.IntegerObject và do đó được phép là null, do đó, việc tạo một <xsd:attribute type="xsd:int" />java.lang.Integer là hợp lý.

Nếu bạn thực hiện một thuộc tính được cần (<xsd:attribute type="xsd:int" use="required" />), nó sẽ tạo ra như một nguyên thủy int. Tôi đã không nhìn thấy tài liệu của JAXB rõ ràng nói điều này, nhưng điều đó không có nghĩa là nó không tồn tại; có lẽ tôi đã bỏ lỡ nó.

+4

+1 - Epiphany của bạn là chính xác. –