我有一个接收对象的网络服务方法。其中一个属性是“间隔”,它是一个整数。
我想将此属性设为必需但不提供任何默认值 - 我希望要求用户显式设置一个值。
如果我使用 int interval
- 属性作为 int 公开,如果用户没有明确设置属性,将发送零(Java 默认为原始 int)。
如果我使用 Integer interval
- 该属性公开为整数,并在 WSDL 中声明为可选,因此用户在发送请求之前看不到它是必需的。
如果我使用 Integer interval
与 @XmlElement(required = true)
或 @XmlElement(nillable = false)
- 属性公开为 int。
该属性可以有任何整数 - 负数、零和正数,因此我不能使用默认值来指示该属性未显式设置。
我可以使用 BigInteger interval
与 @XmlElement(required = true)
但比我们缺少使用核心类型整数的优势。
我想将属性公开为整数,因此如果用户没有设置属性,我将得到 null,同时我希望 WSDL 公开该属性是必需的,这样用户只需查看即可知道它是必需的WSDL。
最佳答案
与 @XmlElement(required = true)
WSDL 是正确的,但问题是在我的 WSDL 上使用 org.apache.cxf.tools.wsdlto.WSDLToJava 工具时,生成了客户端
与 int interval
而不是 Integer interval
.
解决方案是将“-b”选项传递给 wsdl2java 工具,其中包含一个 jaxb 绑定(bind)文件的路径,该文件将 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>
使用
@XmlElement(required = true)
和 "-b "选项,保留所需的元素 (minOccurs="1") 并将其作为 Integer 公开给 Java 客户端。更多信息:http://cxf.547215.n5.nabble.com/How-to-declare-an-attribute-required-and-non-primitive-td4815370.html
关于web-services - CXF - 如何声明一个必需且非原始的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7414734/