3

我使用 JAX-WS (v 2.2.5) 的 Metro 实现,并且我的 WSDL 是在服务器上自动生成的。

我已经定义了 WS 方法:

@WebMethod
public String myMethod(@XmlElement(nillable=false) String[] array, @XmlElement(nillable=false) String field);

问题是 'nillable=false' 不适用于数组。自动生成的 WSDL 是:

<xs:element name="array" type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="field" type="xs:string"/>

我在 Metro 源代码中找到了以下片段(类:AbstractWrapperBeanGenerator,方法:processXmlElement):

boolean nillable = nav.isArray(type) || (elemAnn != null && elemAnn.nillable());

如果我将此片段更改为:

boolean nillable = (elemAnn != null && elemAnn.nillable());

一切正常。

你知道为什么会这样吗?

你知道如何改变这种行为,但没有考虑到:

  1. 更改默认 Metro 源代码

  2. 使用包装类而不是数组(对于纯 JAXB 一切正常)

  3. 将我的实现更改为首先使用手动更正的 WSDL

4

0 回答 0