An SO User
An SO User

Reputation: 25028

JAXB unmarshaling issue

I am attempting to unmarshal an XML file. However, I end up with :

unexpected element (uri:"", local:"show-list"). Expected elements are <{}showList>

My code:

Show:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = { "title", "description", "host", "logo", "feed" })
public class Show {
    private String title;
    private String description;
    private String host;
    private String logo;
    private String feed;  
        // getter, setter  

}  

ShowList:

@XmlRootElement
public class ShowList {

    @XmlElementWrapper(name = "shows")
    @XmlElement(name = "show")
    private ArrayList<Show> shows;

    public ArrayList<Show> getList() {
        return shows;
    }

    public void setList(ArrayList<Show> shows) {
        this.shows = shows;
    }

}  

XML:

<?xml version="1.0" encoding="utf-8"?>
<show-list count="23">
    <show>
        <title>TQA Weekly</title>
        <description>
            <![CDATA[
            Technology Show, dedicated to those who wish to learn about new electronics that they have bought, or will buy soon. 
            We will explaining in each episode new ways of doing things like protecting your identity online, file backup and storage, encryption, using email wisely, and each show we will be giving you new tools to do so. 
            You may visit our web-site for show notes, lists of software, links to sites, other suggested web-sites, or to send e-mails to Steve Smith with questions, comments or concerns.
            ]]>
        </description>
        <host>Steve Smith</host>
        <logo>http://images.tqaweekly.com/tqa-weekly-logo.png</logo>
        <feed>http://feeds.podtrac.com/tTKj5t05olM$</feed>
    </show>  
...  
</show-list>    

main()

public static void main(String[] args) {
        JAXBContext context;
        try {
            context = JAXBContext.newInstance(ShowList.class);
            Unmarshaller um = context.createUnmarshaller();
            ShowList list = (ShowList) um.unmarshal(new File("D:/Program Files/apache-tomcat-7.0.35-windows-x86/apache-tomcat-7.0.35/webapps/xml/show.xml"));
            System.out.println(list.getList().size());
        } catch (JAXBException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

Where have I made a mistake?

Upvotes: 1

Views: 76

Answers (1)

Sotirios Delimanolis
Sotirios Delimanolis

Reputation: 280138

Set the value of your @XmlRootElement name attribute

@XmlRootElement(name = "show-list")

otherwise JAXB uses the name of the class.

Also, get rid of

@XmlElementWrapper(name = "shows")

That would work if your XML was like

<show-list count="23">
    <shows>
        <show>
            <title>TQA Weekly</title>
            <description>
            <![CDATA[
            Technology Show, dedicated to those who wish to learn about new electronics that they have bought, or will buy soon. 
            We will explaining in each episode new ways of doing things like protecting your identity online, file backup and storage, encryption, using email wisely, and each show we will be giving you new tools to do so. 
            You may visit our web-site for show notes, lists of software, links to sites, other suggested web-sites, or to send e-mails to Steve Smith with questions, comments or concerns.
            ]]>
            </description>
            <host>Steve Smith</host>
            <logo>http://images.tqaweekly.com/tqa-weekly-logo.png</logo>
            <feed>http://feeds.podtrac.com/tTKj5t05olM$</feed>
        </show>
    </shows>
</show-list>  

Upvotes: 3

Related Questions