यह एक अच्छा सवाल है।
टाइप-स्तर पर काम करने के बजाय आप जैक्सब नोड स्तर पर काम कर सकते हैं। लगभग कोई ओवरहेड शामिल नहीं है।
कुंजी आपके व्यापार तर्क वर्गों से JAXBElement
(नोड स्तर तत्व) बनाने/एक्सेस करने और एक्सएमएल-नोड को अनुकूलित करने के लिए QName
परिभाषा के अनुसार प्रस्तुत करता है।
QName
अनुकूलन के लिए कई विकल्प प्रदान करता है, पूरी तरह से योग्य नामस्थानों से लेकर कोई नामस्थान नहीं है। एकमात्र चेतावनी यह है कि उपसर्ग के बिना नामस्थान का उपयोग करना संभव नहीं है। यदि आप एक प्रदान नहीं करते हैं तो जैक्सब डिफ़ॉल्ट नामस्थान का उपयोग करेगा।
उदाहरण:
QName elaborateQName = new QName("http://www.another.org/package", "customer", "myNs");
QName simpleQName = new QName("customer");
JAXBElement jx1 = new JAXBElement(elaborateQName, customer.getClass(), customer);
JAXBElement jx2 = new JAXBElement(simpleQName, customer.getClass(), customer);
m.marshal(jx1, System.out);
m.marshal(jx2, System.out);
यह निम्नलिखित उत्पादन का उत्पादन होगा:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myNs:customer xmlns:myNs="http://www.another.org/package">
<id>123</id>
</myNs:customer>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer>
<id>123</id>
</customer>
उपसर्ग के बिना एक नाम स्थान का उपयोग करना संभव नहीं है। खाली उपसर्ग या समकक्ष XMLConstants.DEFAULT_NS_PREFIX
पैरामीटर एक डिफ़ॉल्ट उपसर्ग का परिणाम देगा के रूप में के साथ एक QName कोशिश कर रहा है (जैसे Ns1 भी) उत्पन्न किया जा रहा:
// QName defaultNs = new QName("http://www.another.org/package", "customer", "");
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:customer xmlns:ns1="http://www.another.org/package">
<id>123</id>
</ns2:customer>
prefix
के लिए पैरामीटर के रूप में अशक्त का उपयोग पैदावार एक अपवाद:
java.lang.IllegalArgumentException: prefix cannot be "null" when creating a QName
at javax.xml.namespace.QName.<init>(QName.java:251)
आप * @ XmlSchema * भाग के लिए एक अतिरिक्त कोड स्निपेट बनाना चाहिए के रूप में यह बहुत ही प्रासंगिक है , लेकिन आसानी से अनदेखा किया जा सकता है। – jah