2013-06-26 3 views
4

содержание Xml являетсяjavax.xml.bind.UnmarshalException: Неожиданный элемент (URI: "", местные: "" Страна) Ожидаемые элементы <{http://www.w3schools.com} СТРАНА>

<?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

@XmlAccessorType(XmlAccessType.FIELD) 

@XmlType(name = " ", propOrder = { "state" }) 

@XmlRootElement(name = "COUNTRY") 

public class COUNTRY { 

    @XmlElement(name = "STATE", required = true) 
protected List<Districts> state; 

    public List<Districts> getSTATE() { 
     if (state == null) { 
      state = new ArrayList<Districts>(); 
     } 
     return this.state; 
    } 
} 

Пакет Info:

@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 не может be cast to javax.xml.bind.JAXBElement \t at App.main (App.java:20) – user2523808

+0

@ user2523808 - Поскольку ваш класс 'Customer' аннотируется с помощью' @ XmlRootElement', результатом будет экземпляр 'Customer' а не 'JAXBElement '. Полное объяснение см .: http://blog.bdoughan.com/2012/07/jaxb-and-root-elements.html –