मैं @XMLType साथ कक्षाएं व्याख्या किया गया है जब संरचना जब यह केवल एक बार इस्तेमाल किया जाएगा एक बार से अधिक प्रयोग किया जाता है एक XML स्कीमा के भीतर और @XMLRootElement साथ होगा - यह सबसे अच्छा तरीका है?
यह जानना एक बात यह है कि न तो @XmlRootElement
या @XmlType
एनोटेशन आवश्यक है। वे जेपीए से @Entity
के बराबर नहीं हैं। आप किसी भी टिप्पणियां क्या इतना कभी बिना एक JAXB (JSR-222) कार्यान्वयन का उपयोग कर सकते हैं:
मैं नीचे व्याख्या करेंगे @XmlRootElement
और @XmlType
है।
@XmlRootElement
अपने JAXB कार्यान्वयन केवल XML तत्व संसाधित किया जा रहा के आधार पर एक वस्तु का दृष्टांत करने की जरूरत है जब वहाँ कई बार कर रहे हैं। @XmlRootElement
एनोटेशन इस एसोसिएशन को निर्दिष्ट करने का प्राथमिक माध्यम है। नोट एक वर्ग एक से अधिक XML तत्व तो @XmlElementDecl
एनोटेशन इस्तेमाल किया जाना चाहिए insteat,
भूमिका # 1 से मेल खाती है, तो - रूट वस्तु
@XmlRootElement
निर्दिष्ट करना मुख्य रूप से जड़ वस्तु निर्दिष्ट करने के लिए प्रयोग किया जाता है। ऐसा इसलिए होता है जब आपका जेएक्सबी कार्यान्वयन एक एक्सएमएल दस्तावेज़ को अनचाहे करना शुरू करता है, यह जानता है कि किस ऑब्जेक्ट को तत्काल करना है। लगभग सभी बाद की टिप्पणियां अभिभावक वर्ग से एकत्र की गई जानकारी पर आधारित होंगी।
फू
@XmlRootElement(name="root")
public class Foo {
private String name;
}
बार
public class Bar {
private String name;
}
एक्सएमएल
<root>
<name>Jane Doe</name>
</root>
डेमो
Foo foo = (Foo) unmarshaller.unmarshal(xml);
Bar bar = unmarshaller.unmarshal(xml, Bar.class).getValue();
भूमिका # 2 - प्रतिस्थापन समूह
@XmlElementRef
एनोटेशन प्रतिनिधियों वस्तु के प्रकार के नाम करने के लिए instantiated/तत्व की uri। यह मैपिंग को विरासत का प्रतिनिधित्व करने के लिए प्रतिस्थापन समूहों की अवधारणा को सक्षम बनाता है।
भूमिका # 3 - किसी भी सामग्री
@XmlAnyElement
आप अपने XML दस्तावेज़ की वाइल्ड कार्ड अनुभाग मैप करने के लिए अनुमति देता है। यदि आप @XmlAnyElement(lax=true)
निर्दिष्ट करते हैं तो डोमेन ऑब्जेक्ट्स से जुड़े तत्व संबंधित डोमेन ऑब्जेक्ट में परिवर्तित हो जाएंगे।
@XmlType
भूमिका # 1 - स्कीमा जनरल
डिफ़ॉल्ट रूप से एक नामित जटिल प्रकार प्रत्येक जावा के लिए जाना जाता वर्ग के लिए उत्पन्न होता है जेएक्सबी संदर्भ। आप @XmlType
एनोटेशन का उपयोग करके इस प्रकार के नाम को नियंत्रित कर सकते हैं, या निर्दिष्ट कर सकते हैं कि नाम को ""
के रूप में निर्दिष्ट करके अज्ञात जटिल प्रकार उत्पन्न किया जाना चाहिए।
भूमिका # 2 - विरासत और xsi: प्रकार
डिफ़ॉल्ट JAXB द्वारा विरासत संकेतक के रूप में xsi:type
विशेषता का लाभ उठाता है। इस विशेषता का मान उस नाम और नामस्थान से मेल खाता है जिसे आपने @XmlType
एनोटेशन पर निर्दिष्ट किया है, या कक्षा के आधार पर डिफॉल्ट किया गया है।
भूमिका # 3 - आदेश
आप आप संपत्ति आदेश निर्दिष्ट करने के लिए उपयोग कर सकते हैं @XmlType
उल्लेख के रूप में प्रोप।
भूमिका # 4 - फैक्टरी के तरीके
@XmlType
आप एक कारखाने वर्ग और/या विधि कि डिफ़ॉल्ट के बजाय डोमेन वस्तु का दृष्टांत किया जा सकता है निर्दिष्ट कर सकते हैं निर्माता।
एक अलग लेकिन संबंधित सवाल जो मैं यहाँ शामिल करेंगे। @XMLType एनोटेशन में एक प्रोपॉर्डर विशेषता है जिसमें निर्दिष्ट किया गया है कि यह तत्व दिखाई देता है - क्या @XMLRootElement के बराबर है?
नहीं, propOrder
पहलू @XmlType
एनोटेशन से संबंधित है। यह समझ में आता है क्योंकि जटिल प्रकार (या कमी) आदेश निर्दिष्ट करने के लिए जटिल प्रकार जिम्मेदार होते हैं। आप निश्चित रूप से एक ही समय में इन एनोटेशन का उपयोग कर सकते हैं।
@XmlRootElement
@XmlType(propOrder={"foo", "bar"}
public class Root {
...
}