我有一个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.
WSDL 是正确@XmlElement(required = true)的,但问题是,当在我的 WSDL 上使用 org.apache.cxf.tools.wsdlto.WSDLToJava 工具时,客户端是使用int interval而不是Integer interval.
解决方案是将“-b”选项传递给 wsdl2java 工具,并提供 jaxb 绑定文件的路径,该文件将 xsd:int 映射到java.lang.Integer:
<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>
Run Code Online (Sandbox Code Playgroud)
使用@XmlElement(required = true)“-b”选项,保留所需的元素(minOccurs =“1”)并将其作为整数公开给Java客户端。
| 归档时间: |
|
| 查看次数: |
4345 次 |
| 最近记录: |