2013-06-26 30 views
4

XML內容是javax.xml.bind.UnmarshalException:意想不到元件(URI: 「」,本地: 「國家」)預期元素是<{http://www.w3schools.com} COUNTRY>

<?xml version="1.0" encoding="UTF-8"?> 
<COUNTRY xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.w3schools.com Country_Details.xsd"> 

    <STATE name="AndhraPradesh"> 
     <DISTRICT name="Chittoor"> 
      <PHONENO>255258</PHONENO> 
      <ADDRESS>bazarr Street</ADDRESS> 
     </DISTRICT> 
     <DISTRICT name="Kadapa"> 
      <PHONENO>24137457</PHONENO> 
      <ADDRESS>congtres Street</ADDRESS> 
     </DISTRICT> 
    </STATE> 
    <STATE> 
     ... 
    </STATE> 
</COUNTRY> 

這是我的祖國類 Country.java

​​3210

軟件包信息:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.w3schools.com", 
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 
package com.kk; 

主要類

public class App { 

public static void main(String[] args) throws JAXBException { 

    JAXBContext context = JAXBContext.newInstance(AddressDetails.class, 
     COUNTRY.class, Details.class, Districts.class, ObjectFactory.class); 
    Unmarshaller um = context.createUnmarshaller(); 
    JAXBElement<COUNTRY> jaxb = (JAXBElement<COUNTRY>) um 
     .unmarshal(new File("src//Country.xml")); 
    COUNTRY value = jaxb.getValue(); 
    System.out.println(value); 
}  

我有錯誤是這樣的:

Exception in thread "main" 
javax.xml.bind.UnmarshalException:unexpected element(uri:"", local:"COUNTRY"). 
Expected elements are <{http://www.w3schools.com}COUNTRY> 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent 
     (UnmarshallingContext.java:642) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:254) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:249) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement 
(Loader.java:116) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1049) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:478) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:459) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:148) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source) 

    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source) 
    at App.main(App.java:20) 

不知道是哪裏的故障,我嘗試了很多,但我無法弄清楚..

回答

9

根據您的映射,JAXB impl期望XML文檔具有名稱空間限定。您可以通過以下方式之一修復它:

  1. 將名稱空間限定添加到XML文檔。

    <COUNTRY xmlns="http://www.w3dchools.com"> 
    
  2. 從JAXB映射刪除的命名空間的元數據。您已使用包級別@XmlSchema註釋指定它。

  3. 使用XmlFilter正確的命名空間信息應用到當前的XML文檔。

+0

感謝您的答覆。我試過第二個選項,我得到這個異常:在線程異常「主要」 java.lang.ClassCastException:com.kk.COUNTRY不能被轉換爲javax.xml.bind.JAXBElement \t在App.main(App.java:20) – user2523808

+0

@ user2523808 - 因爲你'Customer'類都被註解'@ XmlRootElement'結果將是Customer'的'實例而不是'JAXBElement '。有關完整的解釋,請參閱:http://blog.bdoughan.com/2012/07/jaxb-and-root-elements.html –

相關問題