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

nab*_*tar 0 xml xsd wsdl jax-ws jaxb

我正在努力解决一个简单的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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

public class ArrayOfFilterBase implements Serializable {
...
    public List<FilterBase> getFilterBaseList() {
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

是否可以通过JAXB定制来实现?我努力寻找它但找不到解决方案.

谢谢你的帮助.

关心Nabeel Mukhtar

小智 5

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

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