myItems = new ArrayList<...">

Can JAXB output ArrayList as comma separated values?

I have something like

@XmlElementWrapper(name="Mylist") List<Items> myItems = new ArrayList<Items>() 

and it looks like

 <Mylist> <myItems>item 1</myItems> <myItems>item 2</myItems> <myItems>item 3</myItems> </Mylist> 

Is it possible to make it more like

 <Mylist> <myItems>item 1, item 2, item 3</myItems> </Mylist> 

So how is the data that I get, still text?

+4
source share
2 answers

You can use @XmlList to make it a space separated.

For a comma separated list, you will need to use the XmlAdapter . For more information on the XmlAdapter, see:

+5
source

Here's the XmlAdapter for handling comma separated lists:

 import java.util.ArrayList; import java.util.List; import javax.xml.bind.annotation.adapters.XmlAdapter; public class CommaSeparatedListAdapter extends XmlAdapter<String, List<String>> { @Override public List<String> unmarshal(final String string) { final List<String> strings = new ArrayList<String>(); for (final String s : string.split(",")) { final String trimmed = s.trim(); if (trimmed.length() > 0) { strings.add(trimmed); } } return strings; } @Override public String marshal(final List<String> strings) { final StringBuilder sb = new StringBuilder(); for (final String string : strings) { if (sb.length() > 0) { sb.append(", "); } sb.append(string); } return sb.toString(); } } 

You would use it as follows:

 @XmlElementWrapper(name="Mylist") @XmlJavaTypeAdapter(CommaSeparatedListAdapter.class) List<Items> myItems = new ArrayList<Items>() 
+2
source

All Articles