我有一个web sercice方法来接收一个对象。其中一个属性是“interval”,它是一个整数。
我想使这个属性成为必需但不提供任何默认值 - 我希望用户需要明确设置一个值。
如果我使用int interval
- 该属性公开为int,如果用户没有显式设置该属性,则将发送零(原始int的Java默认值)。
如果我使用Integer interval
- 该属性公开为Integer并在WSDL中声明为可选,因此用户在发送请求之前无法看到它是必需的。
如果我将Integer interval
与@XmlElement(required = true)
或@XmlElement(nillable = false)
一起使用 - 该属性会以int形式公开。
该属性可以包含任何整数 - 负数,零和正数,因此我无法使用默认值来指示未明确设置该属性。
我可以将BigInteger interval
与@XmlElement(required = true)
一起使用,但我们缺少使用核心类型Integer的优势。
我想将属性公开为Integer,所以如果用户没有设置属性我会得到null,同时我希望WSDL公开该属性是必需的,这样用户就会知道它只是简单的通过查看WSDL。
答案 0 :(得分:3)
使用@XmlElement(required = true)
WSDL是正确的,但问题是在我的WSDL上使用org.apache.cxf.tools.wsdlto.WSDLToJava工具时,生成了客户端
使用int interval
代替Integer interval
。
解决方案是将“-b”选项传递给wsdl2java工具,其中包含将xsd:int映射到java.lang.Integer
的jaxb绑定文件的路径:
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
jaxb:version="2.0">
<jaxb:globalBindings>
<jaxb:javaType name="java.lang.Integer"
xmlType="xsd:int" />
</jaxb:globalBindings>
</jaxb:bindings>
使用@XmlElement(required = true)
和“-b”选项保留所需元素(minOccurs =“1”)并将其作为整数公开给Java客户端。