CXF - 如何声明所需的属性和非原始属性?

时间:2011-09-14 10:24:27

标签: web-services cxf

我有一个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。

1 个答案:

答案 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客户端。

更多信息:http://cxf.547215.n5.nabble.com/How-to-declare-an-attribute-required-and-non-primitive-td4815370.html