Reputation: 1189
I'm trying to populate an arraylist after unmarshalling and xml file, but it unmarshals to an object, how can I get each individual item out and copied to something else like an array?
I can marshal and unmarshal, but can't get nothing out of the object except some adress of memory etc..
here is the unmarshalling
try {
File file = new File("xmlFiles/ipAdresses.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(IpAdressXmlHandler.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
IpAdressXmlHandler xmlList = (IpAdressXmlHandler) jaxbUnmarshaller.unmarshal(file);
System.out.println(xmlList);
} catch (JAXBException e) {
e.printStackTrace();
}
how do I get xmlList as an array? or how do I get everything out?
IpAdressXmlHandler class:
@XmlRootElement
public class IpAdressXmlHandler {
private String ipAdress;
@XmlElement
public String getIpAdress() {
return ipAdress;
}
public void setIpAdress(String ipAdress) {
this.ipAdress = ipAdress;
}
UPDATE: xml file:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ipAdressXmlHandler>
<ipAdress>localhost</ipAdress>
</ipAdressXmlHandler>
there more than one ip address later and I need them in an array or arraylist
Upvotes: 1
Views: 1972
Reputation: 373
public class IpAdressXmlHandler {
@XmlElement(name="ipAdress")
private String ipAdress;
public String getIpAdress() {
return ipAdress;
}
public void setIpAdress(String ipAdress) {
this.ipAdress = ipAdress;
}
@XmlRootElement(name="ipAdressXmlHandler")
public class IpAdressListXmlHandler {
@XmlElement(name="ipAdress")
private List<IpAdressXmlHandler> ipAdress;
public List<IpAdressXmlHandler> getIpAdressList() {
return ipAdress;
}
public void setIpAdressList(List<IpAdressXmlHandler> ipAdress) {
this.ipAdress = ipAdress;
}
Use IpAdressListXmlHandler class for unmarshelling..
Upvotes: 2
Reputation: 26961
IpAdressXmlHandler
is the entity representing your XML
, as long as in the XSD
definition of this XML
there is only one tag allowed you will never get a List
.
SOLUTION
Your XSD
definition must have maxoccurs="otbounded"
or similar to allow various <IpAdressXmlHandler>
tags. Once done, JaxB
will auto generate the getter
returning a List<IpAdressXmlHandler>
.
UPDATE
IMO I would create a XSD
file according your xml specs... put it into your workspace and Right click > Generate > JaxB classes
.
If you want to get a List<IpAdressXmlHandler>
you must create a wrapper for your xml that contains a List<IpAdressXmlHandler>
and returns it, but you must unmarshall the wrapper, not IpAdressXmlHandler
.
Something like:
class IpWrapper{
private List<IpAdressXmlHandler> ipList;
@XmlElement
public List<IpAdressXmlHandler> getIpAdressXmlHandler() {
return ipList;
}
}
And:
JAXBContext jaxbContext = JAXBContext.newInstance(IpWrapper.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Upvotes: 1