जब XJC के साथ एक XSD से जावा सेम पैदा करने, मैं Integer
बजाय BigInteger
को xs:integer
मैप करने के लिए की जरूरत है। मैंने अपनी जेएक्सबी अनुकूलन फ़ाइल (जैसा कि इस साइट से कई उत्तरों में कहा गया है) में javaType
टैग जोड़ा है, और यह ठीक काम करता है।XS पर JAXB javaType अनुकूलन: पूर्णांक "प्रकार = String.class" के साथ @XmlElement पैदा करता
लेकिन जेनरेट कोड में मैंने देखा कि @XmlElement
टैग में अब type=String.class
पैरामीटर है।
तो अब मुझे आश्चर्य है, क्यों String
?
क्या ऐसा इसलिए है क्योंकि पार्स और प्रिंट विधियां स्ट्रिंग ऑब्जेक्ट्स से/कनवर्ट कर रही हैं?
मैं xjc:javaType
बजाय jaxb:javaType
साथ की कोशिश की, मुझे एक कस्टम MyAdapter<BigInteger, Integer>
साथ उत्पन्न Adapter1<String, Integer>
को बदलने के लिए अनुमति देता है, लेकिन वास्तव में एक ही बात हुआ।
यदि यह सामान्य एक्सजेसी व्यवहार है, तो क्या यह पैरामीटर के बिना कोड उत्पन्न करने के लिए इसे ट्विक करना संभव है, या String
से दूसरे मान के साथ?
ध्यान दें कि सब कुछ ठीक काम कर रहा है, लेकिन मैं समझना चाहता हूं।
इसके अलावा मैं अपने एपीआई को दस्तावेज करने के लिए अनुनाद का उपयोग कर रहा हूं और ऐसा लगता है कि यह type
चीज से उलझन में है (लेकिन यह संभवतः Enunciate में एक बग है)।
मैं JAXB आरआई 2.2.6 कोड के कुछ टुकड़े का उपयोग कर रहा है, और यहाँ कर रहे हैं, मेरे सवाल का वर्णन करने के लिए:
bindings.xjb में
<jaxb:bindings version="2.0" ...>
<jaxb:globalBindings>
<jaxb:javaType
name="java.lang.Integer"
xmlType="xs:integer"
parseMethod="..."
printMethod="..." />
</jaxb:globalBindings>
</jaxb:bindings>
फील्ड परिभाषा एक्सएसडी
<xs:complexType name="MyType">
<xs:sequence>
<xs:element name="myField" type="xs:integer" />
</xs:sequence>
</xs:complexType>
जनरेट किया गया जावा क्षेत्र
@XmlElement(namespace = "...", required = true, type = String.class)
@XmlJavaTypeAdapter(Adapter1.class)
@XmlSchemaType(name = "integer")
protected Integer myField;
int के साथ समस्या यह है कि यह शून्य होने का समर्थन नहीं करता है, इंटीजर करता है। –
सब सच है, लेकिन मेरा सवाल लक्ष्य जावा प्रकार के बारे में नहीं था, लेकिन उत्पन्न '@ XmlElement' एनोटेशन के बारे में था। अगर मैं एक्सएसडी को 'xs: int' (जो मैं नहीं कर सकता, इसलिए मैं एडाप्टर का उपयोग कर रहा हूं) का उपयोग करने के लिए बदल सकता हूं, मुझे संदेह है कि जेएक्सबी एक' int' ** या ** 'इंटीजर' उत्पन्न करेगा , क्षेत्र की शून्यता के आधार पर। –
'type =" int "' निर्दिष्ट ''निर्दिष्ट' निर्दिष्ट करता है, 'minOccurs = 0'' टाइप =" int "के साथ निर्दिष्ट '' इंटीजर' उत्पन्न करता है। –