Как обернуть коллекцию в один родительский тег - PullRequest
4 голосов
/ 04 января 2012

У меня есть класс с именем XmlSource, который содержит коллекцию объектов типа XmlSourceAudioLang, а класс XmlSourceAudioLang имеет поле с именем language, которое мне нужно преобразовать в XML, т.е.

@XmlAccessorType(XmlAccessType.FIELD)
public class XmlSource {

  @XmlElement(name="original_audio_language", nillable=true) 
  protected Set<XmlSourceAudioLang> originalAudio;

}

и

@XmlAccessorType(XmlAccessType.FIELD)
public class XmlSourceAudioLang {

  @XmlElement(nillable = true)
  private String language;

}

При такой настройке JAXB генерирует тег original_audio_language для каждого объекта в коллекции:

<original_audio_language>
  <language>Ukrainian</language>
</original_audio_language>
<original_audio_language>
  <language>Russian</language>
</original_audio_language>

Есть ли способ настроить привязку так, чтобы был только один родительский тег original_audio_language?

1 Ответ

9 голосов
/ 04 января 2012

Предполагая, что вы хотите этого:

<original_audio_language>
  <language>Ukrainian</language>
  <language>Russian</language>
</original_audio_language>

Тогда попробуйте это:

@XmlAccessorType(XmlAccessType.FIELD)
public class XmlSource {
  @XmlElementWrapper(name="original_audio_language") 
  @XmlElement(name="language")
  protected Set<XmlSourceAudioLang> originalAudio;
}

@XmlAccessorType(XmlAccessType.FIELD)
public class XmlSourceAudioLang {  
  @XmlValue
  private String language;    
}
...