2010-04-19 20 views
25

की आवश्यकता के लिए हम इस JAXB एनोटेशन है प्रतीत नहीं होता है: यदि कोई Strategy तत्व मौजूद, कोई अपवाद नहीं फेंक दिया जाता है कर रहे हैंJAXB आवश्यक सच =

@XmlElement(name = "Strategy", required = true) 
protected List<Strategy> strategy; 

.. ऐसा क्यों है? क्या हमें अपवाद नहीं मिलना चाहिए?

उत्तर

32

जेएक्सबी संदर्भ कार्यान्वयन सत्यापन के लिए इस विशेषता का उपयोग नहीं करता है, यह पूरी तरह से दस्तावेज़ीकरण उद्देश्यों के लिए है।

आप दस्तावेजों को मान्य करने की जरूरत है, तो आप एक XML स्कीमा को परिभाषित है, और Marshaller या Unmarshaller को इसकी सुई, SchemaFactory का उपयोग कर की जरूरत है।

+0

'मार्शलर'/'Unmarshaller' में उपयोग करने के लिए' 'sAX 'को अपने' JAXBContext' से 'स्कीमा' लोड करने के उदाहरण के लिए [http://stackoverflow.com/a/2696765/12604) देखें। –

+0

मैं नहीं कहूंगा कि यह पूरी तरह से दस्तावेज के लिए है - इसका उपयोग स्कीमा पीढ़ी के लिए भी किया जाता है। जब आप अपने जावा कक्षाओं से एक्सएसडी उत्पन्न करते हैं और आपके पास 'आवश्यक = सत्य' है तो एक्सएसडी में तत्व घोषणा' minOccurs = "1" 'के साथ उत्पन्न की जाएगी। आप एक्सएमएल को वैध करने के लिए एक्सएसडी का उपयोग कर सकते हैं। – Jesper

1

साथ ही, आपको beforeMarshal और afterUnmarshal तरीकों का उपयोग के रूप में Marshaller और Unmarshaller में spec'd आदानों मान्य करने के लिए कर सकता है।

जिस योजना के अंतर्गत इन तरीकों का उपयोग किया जाता है, वह आपको विधि घोषणा के लिए मनमानी throws खंड जोड़ने की अनुमति देगा। इसका अर्थ यह है कि इन विधियों को लागू करते समय, आप सुरक्षित रूप से javax.xml.bind.MarshalException और javax.xml.bind.UnmarshalException(या Exception जो भी चाहते हैं) सुरक्षित रूप से उपयोग कर सकते हैं सत्यापन त्रुटियों को सिग्नल करने के लिए।