2010-10-14 13 views
4

J'ai quelque chose commeCan JAXB peut-il produire une ArrayList sous forme de valeurs séparées par des virgules?

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

et qui sort comme

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

Est-il possible de faire de ce projet plus comme

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

Depuis les données que je suis après est tout juste textuel de toute façon?

Répondre

5

Vous pouvez utiliser @XmlList pour définir une valeur séparée par un espace.

Pour une liste séparée par des virgules, vous devrez utiliser un XmlAdapter. Pour plus d'informations sur XmlAdapter voir:

+0

Est-ce vous dites dans la nouvelle classe d'adaptateur alors je voudrais simplement cat ensemble tous les éléments de la liste, et utilisez @XmlValue sur la chaîne nouvellement créée? – Derek

+0

Oui, puis en allant dans l'autre sens, vous pouvez marquer la chaîne sur le caractère ','. –

2

Voici un XmlAdapter pour gérer des listes séparées par des virgules:

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(); 
    } 
} 

On peut l'utiliser comme ceci:

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