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

Mos*_*sha 5 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.

Mos*_*sha 3

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

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