gpt4 book ai didi

java - 如何在 Java Web 服务中为 @WebParam 定义默认值?

转载 作者:行者123 更新时间:2023-11-30 09:06:28 24 4
gpt4 key购买 nike

我一直在努力为这个特定主题寻找解决方案:

可以在@webParam 注释中为基于 SOAP/WSDL 的 Web 服务定义默认值吗?我想要的正是下面的结果:

我的 Web 服务中有一个名为 getCustomers 的@WebMethod,具有以下签名:

@WebMethod(operationName = "getCustomers")
@WebResult(name = "customer")
public Customer[] getCustomers(@WebParam(name = "company") String company,
@WebParam(name = "limitTop") int limitTop){

//Logic of getting customer be here

}

特别是,参数 limitTop 在此方法中不是可选的,此数字表示您希望响应返回多少客户记录,但我希望在我的 xml 架构中,此特定元素具有默认值值(value),像这样:

<xs:complexType name="getCustomers">
<xs:sequence>
<xs:element name="company" type="xs:string" minOccurs="0"/>
**<xs:element name="limitTop" type="xs:int" default="100"/>**
</xs:sequence>
</xs:complexType>

请注意 limitTop 元素中的 default 属性

这是为了允许客户端应用程序在没有 limitTop 元素的情况下发送 SOAP 消息,但仍将返回的记录数限制为 limitTop 元素中给定的默认值。

我正在使用 Java、JAX-WS 和 GlassFish Server 开源版。

感谢您的帮助。

卡洛亚涅斯

最佳答案

您当前的网络服务风格无法实现您所追求的。首先,JAXB 不会将默认值注入(inject)到消息中,如果发送的原始消息中不存在该元素。来自JAXB manual

element defaults do not kick in when the element is absent, so unfortunately we can't change this behavior.

作为解决方法,您可以将您的网络服务样式更改为WRAPPED。使用这种样式,您可以将 Web 服务参数封装在单个父类型中(如果您愿意,可以是一个简单的 RequestWrapper)。鉴于这种灵 active ,您的客户可以提供可能包含也可能不包含这两个参数的单一父类型。您的包装应类似于:

@XmlRootElement
public class YourWrapper {

String company;

@XmlElement(name="limitTop",required="false",defaultValue="100")
int limitTop;

//getters and setters
}

此外,

@RequestWrapper(targetNamespace="http://you.com/ws/types", className="com.you.YourWrapper") 
@WebMethod(operationName = "getCustomers")
@WebResult(name = "customer")
public Customer[] getCustomers(@WebParam(name = "company") String company,
@WebParam(name = "limitTop") int limitTop){

//Logic of getting customer be here

}

鉴于上述情况,JAXB 将能够忽略值的缺失,并可能在解码后设置默认值

关于java - 如何在 Java Web 服务中为 @WebParam 定义默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24441730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com