java - JAXB, xs:any and targetNamespace -


मेरे पास एक XSD है जो निम्नलिखित स्कीमा को परिभाषित करता है:

  & lt; xs: स्कीमा संस्करण = "1.0" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns = "http://example.com/2010/aa/" xmlns: jaxb = "http: // जावा Sun.com/xml/ns/jaxb "xmlns: xjc =" http://java.sun.com/xml/ns/jaxb/xjc "xmlns: एए =" http://example.com/2010/aa/ "TargetNamespace =" http://example.com/2010/aa/ "elementFormDefault =" योग्य "& gt; ... & lt; xs: तत्व का नाम = "उपयोगकर्ता" प्रकार = "एए: उपयोगकर्ता" / & gt; & Lt; x: जटिल टाइप नाम = "उपयोगकर्ता" & gt; & LT; XS: अनुक्रम & gt; & Lt; xs: तत्व रिफ = "एए: प्रथम नाम" मिनट ऑसकर्स = "0" अधिकतम ओकर्स = "1" / & gt; & Lt; xs: तत्व रिफ = "एए: अंतिम नाम" मिनट ऑसकर्स = "0" अधिकतम ओकर्स = "1" / & gt; ... & lt; xs: कोई नाम स्थान = "## लक्ष्य नेमस्पेस" प्रक्रियासंसाधन = "छोड़ें" maxOccurs = "unbounded" / & gt; & Lt; / XS: अनुक्रम & gt; & Lt; xs: कोई भी विशेषता प्रक्रियासंसाधन = "छोड़ें" / & gt; & Lt; / XS: complexType & gt; & Lt; xs: तत्व का नाम = "प्रोफ़ाइल" प्रकार = "एए: प्रोफ़ाइल" / & gt; & Lt; x: जटिल टाइप नाम = "प्रोफ़ाइल" & gt; & LT; XS: अनुक्रम & gt; & Lt; xs: तत्व रिफ = "एए: यूज़रनेम" मिन ओकर्स = "0" अधिकतम ओकर्स = "1" / & gt; & Lt; xs: तत्व रिफ = "एए: खातास्थटस" minOccurs = "0" maxOccurs = "1" / & gt; & Lt; xs: तत्व रिफ = "एए: रोलिड" मिनिऑकर्स = "0" अधिकतम ओकर्स = "1" / & gt; ... & lt; xs: तत्व रिफ = "एए: यूजरआईड" / & gt; & Lt; / XS: अनुक्रम & gt; & Lt; xs: कोई भी विशेषता प्रक्रियासंसाधन = "छोड़ें" / & gt; & Lt; / XS: complexType & gt;  

जब JAXB उत्पन्न ऑब्जेक्ट को मारशल कर रहा है, तो यह निम्नलिखित को परिभाषित करता है:

  & lt;? Xml संस्करण = "1.0" एन्कोडिंग = "यूटीएफ -8" स्टैंडअलोन ? = "हाँ" & gt; & Lt; उपयोगकर्ता xmlns: ns2 = "http://example.com/2010/aa/" & gt; ... & lt; / उपयोगकर्ता & gt; & Lt;? Xml संस्करण = "1.0" एन्कोडिंग = "यूटीएफ -8" स्टैंडअलोन = "हां"? & Gt; & Lt; प्रोफ़ाइल xmlns = "http://example.com/2010/aa/" & gt; ... & lt; / प्रोफ़ाइल & gt;  

देखें कि कैसे एक नाम स्थान xmlns: ns2 है और दूसरा xmlns है। यह इसलिए है क्योंकि उपयोगकर्ता के सभी तत्व ए नामों के लिए योग्य हैं, लेकिन xs: कोई भी टैग द्वारा परिभाषित हैं, इसलिए दो नामस्थानों को परिभाषित करने की आवश्यकता है

प्रोफ़ाइल में एक्सएस नहीं है: कोई भी टैग और एक से अधिक नाम स्थान को परिभाषित करने की आवश्यकता नहीं है यह मेरी व्याख्या है, क्योंकि अगर मैं एक्सएस को निकालता हूं: किसी भी उपयोगकर्ता परिभाषा से यह एक्सपोर्ट एक्सएमएल से एनएस 2 को हटा देगा।

मैं कैसे बता सकता हूं कि दोनों ही < लक्ष्य नामस्थान और एए समान नाम स्थान हैं, इसलिए इसमें दोनों शामिल नहीं हैं?

आप पहले स्थान पर उपसर्ग कैसे जनरेट किए जाते हैं, यह ओवरराइड करने के लिए नामस्थानपेफ़िक्समैपर का उपयोग करने की कोशिश कर सकते हैं:

  नामस्थानपेफ़िक्समैपर mapper = new namespacePrefixMapper () {सार्वजनिक स्ट्रिंग getPreferredPrefix (स्ट्रिंग नामस्थान यूरी, स्ट्रिंग सुझाव, बूलीयन की आवश्यकता हैफिरफिक्स) {वापसी ""; }}; Marshaller.setProperty ("com.sun.xml.bind.namespacePrefixMapper", मैपर);  

मैं "" लौट रहा हूं, इसलिए केवल एक डिफ़ॉल्ट उपसर्ग होगा; आवश्यक रूप से एक और अधिक परिष्कृत संस्करण को लागू करें।

यह एक सन क्लास पर निर्भरता पैदा करता है, जो एक जेएसीएबी की वजह से समस्या है। समीक्षा करें । नीचे दिए गए उत्तर से पता चलता है कि कैसे इसे प्राप्त करने के लिए package-info.java को संशोधित करें।


Comments