如何在java web服务中为@WebParam定义默认值?
我一直在努力为这一特定主题找到解决方案: 是否可以在基于SOAP/WSDL的Web服务的@webParam注释中定义默认值?我想要的正是以下结果: 我的web服务中有一个名为getCustomers的@WebMethod,签名如下:如何在java web服务中为@WebParam定义默认值?,java,web-services,soap,jaxb,jax-ws,Java,Web Services,Soap,Jaxb,Jax Ws,我一直在努力为这一特定主题找到解决方案: 是否可以在基于SOAP/WSDL的Web服务的@webParam注释中定义默认值?我想要的正是以下结果: 我的web服务中有一个名为getCustomers的@WebMethod,签名如下: @WebMethod(operationName = "getCustomers") @WebResult(name = "customer") public Customer[] getCustomers(@WebParam(name = "company") S
@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模式中,这个特定元素有一个默认值,如下所示:
<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服务器开源版本
谢谢你的帮助
卡洛·亚涅斯(Carlo Yañez)您所追求的东西无法用您当前的Web服务风格实现。首先,如果发送的原始消息中不存在元素,JAXB将不会将默认值注入到消息中。从 元素不存在时,元素默认值不会生效,因此很遗憾,我们无法更改此行为 作为一种解决方法,您可以将您的Web服务样式更改为
WRAPPED
。使用这种样式,您可以将webservice参数封装在一个父类型中(如果愿意,可以使用简单的RequestWrapper
)。鉴于这种灵活性,您的客户机可以提供可能包含或不包含这两个参数的单亲类型。您的包装应该类似于:
@XmlRootElement
public class YourWrapper {
String company;
@XmlElement(name="limitTop",required="false",defaultValue="100")
int limitTop;
//getters and setters
}
而且
鉴于上述情况,JAXB将能够忽略没有值的情况,并可能在解组后设置默认值好的,kolossus,感谢您的帮助,我已经非常清楚地了解了您建议的解决方案,但我根本不清楚所提到的webservice样式更改为WRAPPED,我应该怎么做才能改变我的Web服务风格?无论如何,你的回答帮助我澄清了我对这个问题的疑虑。再次感谢。@CarloYañez-看一看非常感谢Kolossus。
@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
}