Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"COUNTRY") Expected elements are <{http://www.w3schools.com}COUNTRY>

Tags:

xml

jaxb

xsd

Xml content is

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

This is my country class 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;
    }
}

Package Info:

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

Main class

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

I got error like this:

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)

dont know where the fault is, I tried a lot, but I am unable to figure it out..

like image 701
user2523808 Avatar asked Jan 13 '23 01:01

user2523808


1 Answers

Based on your mappings the JAXB impl expects the XML document to be namespace qualified. You can fix it in one of the following ways:

  1. Add the namespace qualification to the XML document.

     <COUNTRY xmlns="http://www.w3dchools.com">
    
  2. Remove the namespace metadata from the JAXB mappings. You have specified it using the package level @XmlSchema annotation.

    • http://blog.bdoughan.com/2010/08/jaxb-namespaces.html
  3. Use an XmlFilter to apply the correct namespace information to your current XML document.

    • JAXB unmarshal with declared type does not populate the resulting object with data
like image 190
bdoughan Avatar answered Jan 16 '23 01:01

bdoughan