【问题标题】:CXF - How to declare an attribute required and non-primitive?CXF - 如何声明一个必需且非原始的属性?
【发布时间】:2011-09-14 10:24:27
【问题描述】:

我有一个接收对象的网络服务方法。其中一个属性是“interval”,它是一个整数。

我想将此属性设为必需,但不提供任何默认值 - 我希望要求用户明确设置一个值。

如果我使用int interval - 属性公开为 int 并且如果用户没有明确设置属性,则将发送零(Java 默认为原始 int)。

如果我使用Integer interval - 该属性公开为整数并在 WSDL 中声明为可选,因此用户在发送请求之前看不到它是必需的。

如果我将 Integer interval@XmlElement(required = true)@XmlElement(nillable = false) 一起使用 - 该属性将显示为 int。

该属性可以有任何整数 - 负数、零和正数,因此我不能使用默认值来指示该属性未明确设置。

我可以将BigInteger interval@XmlElement(required = true) 一起使用,但我们缺少使用核心类型Integer 的优势。

我想将属性公开为整数,因此如果用户没有设置属性,我将获得 null,同时我希望 WSDL 公开该属性是必需的,这样用户就会知道它是必需的通过查看 WSDL。

【问题讨论】:

    标签: web-services cxf


    【解决方案1】:

    使用@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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多