2013-04-29 4 views
6

जब 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; 

उत्तर

6

मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन लोगों के लिए अभी भी एक जवाब की तलाश में: प्रकार xs:intxs:integer के बजाय का उपयोग कर Biginteger के बजाय एक सामान्य जावा पूर्णांक पैदा करेगा।

+0

int के साथ समस्या यह है कि यह शून्य होने का समर्थन नहीं करता है, इंटीजर करता है। –

+0

सब सच है, लेकिन मेरा सवाल लक्ष्य जावा प्रकार के बारे में नहीं था, लेकिन उत्पन्न '@ XmlElement' एनोटेशन के बारे में था। अगर मैं एक्सएसडी को 'xs: int' (जो मैं नहीं कर सकता, इसलिए मैं एडाप्टर का उपयोग कर रहा हूं) का उपयोग करने के लिए बदल सकता हूं, मुझे संदेह है कि जेएक्सबी एक' int' ** या ** 'इंटीजर' उत्पन्न करेगा , क्षेत्र की शून्यता के आधार पर। –

+2

'type =" int "' निर्दिष्ट ''निर्दिष्ट' निर्दिष्ट करता है, 'minOccurs = 0'' टाइप =" int "के साथ निर्दिष्ट '' इंटीजर' उत्पन्न करता है। –

संबंधित मुद्दे