2012-03-02 95 views
7

我已經使用.xsd文件生成Java類,並且使用XML文件,我需要解組。JAXB 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 2012-03-02 11:21:29

+0

和xsd文件。 – 2012-03-03 13:17:28

回答

16

您的xml根缺少名稱空間(uri)屬性。 你最好試試這個在XMLRootElement ...

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

namespace =「」對我至關重要 – dirkoneill 2013-12-11 20:37:10

+0

您的意思是更改自動生成的Java類並將此註釋添加到它? – Line 2017-06-01 08:52:49

+0

如果需要更改生成的代碼,爲什麼不..我的意思是它可能是越野車... – 2017-07-26 23:13:23

4

嘗試

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

我可以使用它與XML字符串? – Line 2017-06-01 09:00:23

+1

@Line StreamSource只接受InputStream,Reader和File源。但是你可以使用'StringReader'來插入你的XML字符串。 'StreamSource streamSource = new StreamSource(new StringReader(xmlText));' – Stroboskop 2017-06-26 15:08:35