franklinexpress
franklinexpress

Reputation: 1189

Unmarshalling to an array or arrayList in Java

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

Answers (2)

Ragu
Ragu

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

Jordi Castilla
Jordi Castilla

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

Related Questions