breyerml
breyerml

Reputation: 268

JAXB unmarshal wrapped list

Is it possible to directly unmarshal a list of wrapped elements into a List<String> in JAXB?

For example I have a XML like:

<TEST>

  <MIME_INFO>
      <MIME>
        <MIME_SOURCE>foo.png</MIME_SOURCE>
        <MIME_PURPOSE>normal</MIME_PURPOSE>
      </MIME>
      <MIME>
        <MIME_SOURCE>bar.png</MIME_SOURCE>
        <MIME_PURPOSE>normal</MIME_PURPOSE>
      </MIME>
  </MIME_INFO>

</TEST>

So would it be possible to directly unmarshal this XML file into a List<String> only containing { "foo.png", "bar.png" }?

I know that you could create a class hierarchy with the correct annotations to perform this unmarshalling but i would like to have a code like:

import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "TEST")
@XmlAccessorType (XmlAccessType.FIELD)
public class Info {

    // -> what annotation to put here?
    private List<String> infos;

    public List<String> getInfos() {
        return infos;
    }

}

And the main file:

import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

public class UnmarshallingJAXB {

    public static void main(String[] args) throws JAXBException {

        JAXBContext jaxbContext = JAXBContext.newInstance(Info.class);
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

        Info info = (Info) jaxbUnmarshaller.unmarshal(new File("test.xml"));

        // should output foo.png and bar.png
        info.getInfos().forEach(System.out::println);

    }   
}

Is there any way to do that?

Upvotes: 0

Views: 347

Answers (1)

Boandlkramer
Boandlkramer

Reputation: 118

Apologies for answering so late, but this is the first hit on Google if search for related problems so it might help anyway.

Yes, it is possible, using

@XmlElementWrapper

in combination

@XmlElement

See this example for more detailed info.

Upvotes: 1

Related Questions