我使用JAX-WS的Metro实现(v 2.2.5),我的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());
一切都按照假设运作。
你知道为什么会这样吗?
您是否知道如何改变这种行为,但没有考虑到:
更改dafault metro源代码
使用包装类而不是数组(对于纯JAXB而言) 工作正常)
首先通过手动更正将我的实施更改为合同 WSDL