Khi tạo hạt Java từ XSD với XJC, tôi cần ánh xạ xs:integer
tới Integer
thay vì BigInteger
. Tôi đã thêm một thẻ javaType
vào tệp tùy chỉnh JAXB của tôi (như đã nói trong nhiều câu trả lời từ trang web này) và nó hoạt động tốt.Tùy biến javaType JAXB trên xs: integer tạo @XmlElement với "type = String.class"
Nhưng trong mã được tạo, tôi nhận thấy rằng thẻ @XmlElement
hiện có thông số type=String.class
.
Bây giờ tôi tự hỏi tại sao String
?
Có phải vì phân tích cú pháp và phương thức in đang chuyển đổi từ/sang các đối tượng chuỗi không?
Tôi đã thử với xjc:javaType
thay vì jaxb:javaType
, cho phép tôi thay thế Adapter1<String, Integer>
được tạo bằng tùy chỉnh MyAdapter<BigInteger, Integer>
, nhưng chính xác điều tương tự đã xảy ra.
Nếu đây là hành vi XJC bình thường, bạn có thể tinh chỉnh nó để tạo mã không có tham số này hoặc với giá trị khác hơn String
không?
Lưu ý rằng mọi thứ đều hoạt động tốt, nhưng tôi muốn hiểu.
Ngoài ra tôi đang sử dụng Enunciate để ghi lại API của mình và dường như nó bị nhầm lẫn bởi điều này type
(nhưng điều này có thể là lỗi trong Enunciate).
Tôi đang sử dụng JAXB RI 2.2.6, và đây là một số đoạn mã, để minh họa cho câu hỏi của tôi:
bindings.xjb
<jaxb:bindings version="2.0" ...>
<jaxb:globalBindings>
<jaxb:javaType
name="java.lang.Integer"
xmlType="xs:integer"
parseMethod="..."
printMethod="..." />
</jaxb:globalBindings>
</jaxb:bindings>
nét Field ở XSD
<xs:complexType name="MyType">
<xs:sequence>
<xs:element name="myField" type="xs:integer" />
</xs:sequence>
</xs:complexType>
tạo lĩnh vực Java
@XmlElement(namespace = "...", required = true, type = String.class)
@XmlJavaTypeAdapter(Adapter1.class)
@XmlSchemaType(name = "integer")
protected Integer myField;
Vấn đề với int là nó không hỗ trợ null, Integer thực hiện. –
Tất cả đều đúng, nhưng câu hỏi của tôi không phải về loại java mục tiêu, mà là về chú thích '@ XmlElement' được tạo ra. Ngoài ra nếu tôi có thể thay đổi XSD để sử dụng 'xs: int' (mà tôi không thể, đó là lý do tại sao tôi đang sử dụng một bộ chuyển đổi), tôi nghi ngờ JAXB sẽ tạo một' int' ** OR ** một 'Integer' , tùy thuộc vào tính vô hiệu của trường. –
Chỉ định 'type =" int "' đưa ra 'int', chỉ rõ' minOccurs = 0' với 'type =" int "' tạo ra một 'Integer'. –