通过JAXB自定义忽略容器元素

时间:2010-03-10 12:21:45

标签: xml xsd wsdl jaxb jax-ws

我正在努力解决一个简单的JAXB定制问题。我有这样的架构。 (它实际上是Bing Maps Web Services架构的一小部分)

 <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>

现在,当我使用wsimport生成java类时,它会创建如下代码结构:

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

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

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

正如您所注意到的,ArrayOfFilterBase是一个容器类,我想省略它。我想直接在GeocodeOptions类中使用getFilterBaseList()方法。

是否可以通过JAXB自定义来实现?我努力寻找但无法找到解决方案。

感谢您的帮助。

此致 Nabeel Mukhtar

1 个答案:

答案 0 :(得分:5)

是的,您可以使用@XmlElementWrapper注释省略容器。您的代码应如下所示:

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