javax.xml.bind.UnmarshalException:意外元素(uri:“”,local:“COUNTRY”)预期元素是< {http://www.w3schools.com} COUNTRY>

时间:2013-06-26 11:57:38

标签: xml jaxb xsd

Xml内容

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

套餐信息:

@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)

不知道故障在哪里,我尝试了很多,但我无法弄清楚..

1 个答案:

答案 0 :(得分:9)

根据您的映射,JAXB impl期望XML文档是名称空间限定的。您可以通过以下方式之一修复它:

  1. 将命名空间限定添加到XML文档。

     <COUNTRY xmlns="http://www.w3dchools.com">
    
  2. 从JAXB映射中删除命名空间元数据。您已使用包级别@XmlSchema注释指定了它。

  3. 使用XmlFilter将正确的命名空间信息应用于当前的XML文档。