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

use*_*808 4 xml xsd jaxb

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>
Run Code Online (Sandbox Code Playgroud)

这是我的国家/地区 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

包装信息:

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

主要课程

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);
}     
Run Code Online (Sandbox Code Playgroud)

我得到这样的错误:

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)
Run Code Online (Sandbox Code Playgroud)

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

bdo*_*han 9

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

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

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

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