web-services - CXF - 如何声明一个必需且非原始的属性?

标签 web-services cxf

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

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

如果我使用 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/

相关文章:

java - 具有时间延迟的递归函数调用

javascript - 如何将大数据发送到网络服务?

Glassfish 3.0.1 下的 Java Web 服务不将中文字符插入 MySQL 数据库

rest - CXF 休息 : How can I retrieve the POJO object from the message in an interceptor before it gets marshal'd?

java - 我应该使用什么版本的 CXF?

java - Spring ,CXF : Loose coupling between web service client and server

java - JAX-RS - 在 RESTful Web 服务中进行身份验证并获取用户数据

java - Web 服务还是 Web 应用程序?

javascript - 如何封装(和命名空间)现有的大 JavaScript 文件而不修改它?

java - 公开 WCF 服务以便可以从 Java/CXF 轻松使用它的最佳方法是什么?