java - Could JAXB use the base type for a known element with an unknown type? -


इस तरह एक XSD को देखते हुए:

  & lt;! - ... - - & gt; & Lt; xsd: तत्व का नाम = "माइएलेमेंट" प्रकार = "पेरेन्टटाइप" / & gt; & Lt;! - ... - & gt; & Lt; xsd: जटिल टाइप करें नाम = "पेरेंट टाइप" & gt; & LT; XSD: अनुक्रम & gt; & Lt;! - ... - & gt; & Lt; / XSD: अनुक्रम & gt; & Lt; / XSD: complexType & gt; & Lt; xsd: जटिल टाइप नाम = "चाइल्डटाइप 1" & gt; & LT; XSD: complexContent & gt; & Lt; xsd: extension base = "ParentType" & gt; & LT; XSD: अनुक्रम & gt; & Lt;! - ... - & gt; & Lt; / XSD: अनुक्रम & gt; & Lt; / XSD: विस्तार & gt; & Lt; / XSD: complexContent & gt; & Lt; / XSD: complexType & gt; & Lt;! - ... - & gt;   

JAXB2 को बेस-टाइप पेन्टटाइप पर गिरने के लिए कॉन्फ़िगर किया जा सकता है, जब उसे किसी अज्ञात प्रकार के एक तत्व में एक्सएमआर को जोड़ना पड़ता है, जैसे कि अगले उदाहरण में:

  & lt;! - ... - & gt; & Lt; MyElement xsi: प्रकार = "ChildType2" & gt; & Lt;! - ... - & gt; & Lt; / MyElement & gt; & Lt;! - ... - & gt; आम तौर पर, इस स्थिति में, जेएसीएबी एक अपवाद फेंकता है जो कहता है कि ChildType2 एक अपरिचित प्रकार है।   

यह बिल्कुल वही नहीं है जो आपको चाहिए, लेकिन आप अज्ञात प्रकारों को डीओएम तत्वों के रूप में उपयोग कर सकते हैं।

ग्राहक वर्ग के साथ < कोड> एक्स्ट्रास फ़ील्ड कैच-ऑल @XmlAnyElement के साथ एनोटेट किया गया है।

  @XmlRootElement @XmlAccessorType (XmlAccessType.FIELD) सार्वजनिक क्लास ग्राहक {@XmlElement private स्ट्रिंग का नाम; @ एक्सएमएलएली एलेमेंट निजी सूची & lt; एलिमेंट & gt; एक्स्ट्रास = नए अर्रेलिस्ट & lt; एलिमेंट & gt; (); सार्वजनिक स्ट्रिंग getName () {वापसी का नाम; } सार्वजनिक सूची & lt; Element & gt; GetExtras () {वापसी अतिरिक्त; }}   

नमूना xml:

  & lt;? Xml संस्करण = "1.0" एन्कोडिंग = "UTF-8"? & Gt; & LT; ग्राहक & gt; & Lt; नाम & gt; जॉन डो & lt; / name & gt; & LT; वेतन & gt 1000 & lt; / वेतन & gt; & LT; उम्र & gt; 45 & lt; / उम्र & gt; & Lt; / ग्राहक & gt;  
 

वेतन और आयु अज्ञात प्रकार हैं, और हमारे अतिरिक्त सूची में संग्रहीत हैं, JAXBContext jc = JAXBContext.newInstance (ग्राहक.क्लास); Unmarshaller unmarshaller = jc.createUnmarshaller (); ग्राहक ग्राहक = (ग्राहक) unmarshaller.unmarshal (पाठक); Println (customer.getName ()); (एलीमेंट एल: ग्राहक। गेट एक्टास्ट्रॉस ()) {System.out.println (el.getNodeName) + "- & gt;" + el.getTextContent ()) के लिए;

आउटपुट:

  जॉन डो वेतन-> 1000 आयु-> 45    

Comments

Popular posts from this blog

mysql - BLOB/TEXT column 'value' used in key specification without a key length -

c# - Using Vici cool Storage with monodroid -

python - referencing a variable in another function? -