2012-03-02 14 views
7

मैंने जावा कक्षाएं उत्पन्न करने के लिए .xsd फ़ाइल का उपयोग किया है, और एक XML फ़ाइल के साथ, मुझे unmarshall की आवश्यकता है।जेएक्सबी Unmarshall अपवाद - अप्रत्याशित तत्व

मैं इस कोड का उपयोग कर रहा हूँ:

JAXBContext objJAXBContext = JAXBContext.newInstance("my.test"); 

// create an Unmarshaller 
Unmarshaller objUnmarshaller = objJAXBContext.createUnmarshaller(); 

FileInputStream fis = new FileInputStream("test.xml"); 

JAXBElement<Root> objMyRoot = (JAXBElement<Root>) objUnmarshaller.unmarshal(fis); 

Root mRoot = objMyRoot.getValue(); 

और मैं इस त्रुटि हो रही है:

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"Root"). Expected elements are (none) 

मैं कई समाधान देखा है लेकिन कुछ भी अपने प्रोजेक्ट में काम करता है।

मैं क्या करने का प्रयास कर सकता हूं?

+0

आप हमें 'test.xml' की सामग्री को दिखा कर शुरू कर सकते हैं। – skaffman

+0

और xsd फ़ाइल। –

उत्तर

16

आपके xml रूट में नेमस्पेस (uri) विशेषता अनुपलब्ध है। बेहतर होगा कि तुम XMLRootElement पर इस कोशिश ...

@XmlRootElement(name = "root", namespace="") 
+0

नेमस्पेस = "" मेरे लिए महत्वपूर्ण था – dirkoneill

+0

क्या आपका मतलब ऑटो से जेनरेट की गई जावा क्लास बदलना और इस एनोटेशन को इसमें जोड़ना है? – Line

+0

यदि यह जेनरेट कोड बदलने के लिए लेता है, क्यों नहीं .. मेरा मतलब है कि यह छोटी हो सकती है ... –

4

प्रयास करें

StreamSource streamSource = new StreamSource("test.xml") 
JAXBElement<Root> objMyRoot = (JAXBElement<Root>) objUnmarshaller.unmarshal(streamsource, Root.class); 
+0

क्या मैं इसे एक्सएमएल स्ट्रिंग के साथ उपयोग कर सकता हूं? – Line

+1

@Line StreamSource केवल इनपुटस्ट्रीम, रीडर और फ़ाइल स्रोत स्वीकार करता है। लेकिन आप अपने एक्सएमएल स्ट्रिंग में प्लग करने के लिए 'स्ट्रिंग रीडर' का उपयोग कर सकते हैं। 'स्ट्रीमसोर्स स्ट्रीमसोर्स = नया स्ट्रीमसोर्स (नया स्ट्रिंग रीडर (xmlText)); ' – Stroboskop