I had the same problem .. It helped me, I specify the same field names of my classes as the tag names in the XML file (the file comes from an external system).
For example:
My xml file:
<Response> <ESList> <Item> <ID>1</ID> <Name>Some name 1</Name> <Code>Some code</Code> <Url>Some Url</Url> <RegionList> <Item> <ID>2</ID> <Name>Some name 2</Name> </Item> </RegionList> </Item> </ESList> </Response>
My Response Class:
@XmlRootElement(name="Response") @XmlAccessorType(XmlAccessType.FIELD) public class Response { @XmlElement private ESList[] ESList = new ESList[1];
My ESList class:
@XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name="ESList") public class ESList { @XmlElement private Item[] Item = new Item[1];
My Item Class:
@XmlRootElement(name="Item") @XmlAccessorType(XmlAccessType.FIELD) public class Item { @XmlElement private String ID;
My RegionList class:
@XmlRootElement(name="RegionList") @XmlAccessorType(XmlAccessType.FIELD) public class RegionList { Item[] Item = new Item[1];
My DemoUnmarshalling class:
public class DemoUnmarshalling { public static void main(String[] args) { try { File file = new File("..."); JAXBContext jaxbContext = JAXBContext.newInstance(Response.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); jaxbUnmarshaller.setEventHandler( new ValidationEventHandler() { public boolean handleEvent(ValidationEvent event ) { throw new RuntimeException(event.getMessage(), event.getLinkedException()); } } ); Response response = (Response) jaxbUnmarshaller.unmarshal(file); ESList[] esList = response.getESList(); Item[] item = esList[0].getItem(); RegionList[] regionLists = item[0].getRegionList(); Item[] regionListItem = regionLists[0].getItem(); System.out.println(item[0].getID()); System.out.println(item[0].getName()); System.out.println(item[0].getCode()); System.out.println(item[0].getUrl()); System.out.println(regionListItem[0].getID()); System.out.println(regionListItem[0].getName()); } catch (JAXBException e) { e.printStackTrace(); } } }
He gives:
1 Some name 1 Some code Some Url 2 Some name 2
Aleksey Bykov Sep 21 '15 at 11:57 2015-09-21 11:57
source share