Игнорирование элементов контейнера через настройку JAXB - PullRequest
0 голосов
/ 10 марта 2010

Я борюсь с простой проблемой настройки JAXB. У меня есть такая схема. (на самом деле это фрагмент схемы веб-служб Bing Maps)

 <xs:complexType name="GeocodeOptions">
  <xs:sequence>
    <xs:element minOccurs="0" name="Count" nillable="true" type="xs:int" />
    <xs:element minOccurs="0" name="Filters" nillable="true" type="ArrayOfFilterBase" />
  </xs:sequence>
</xs:complexType>
<xs:complexType name="ArrayOfFilterBase">
  <xs:sequence>
    <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterBase" nillable="true" type="FilterBase" />
  </xs:sequence>
</xs:complexType>

Теперь, когда я генерирую Java-классы, используя wsimport, он создает структуру кода, такую ​​как:

public class GeocodeOptions implements Serializable {
...
    public ArrayOfFilterBase getFilters() {
    ...
    }

    public void setFilters(ArrayOfFilterBase value) {
    ...
    }
}

public class ArrayOfFilterBase implements Serializable {
...
    public List<FilterBase> getFilterBaseList() {
    ...
    }
}

Как вы заметили, ArrayOfFilterBase - это контейнерный класс, который я хотел бы опустить. Я хотел бы иметь метод getFilterBaseList () непосредственно внутри класса GeocodeOptions.

Возможно ли сделать это через настройку JAXB? Я долго искал его, но не смог найти решение.

Спасибо за вашу помощь.

С уважением Набиэль Мухтар

1 Ответ

5 голосов
/ 27 октября 2010

Да, вы можете опустить контейнер, используя аннотацию @XmlElementWrapper. Ваш код должен выглядеть примерно так:

public class GeocodeOptions implements Serializable {
       @XmlElementWrapper(name = "...")
       @XmlElement(name = "...")
      public List<FilterBase> getFilterBaseList() {
       ...
      }
}
...