Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java web服务中为@WebParam定义默认值?_Java_Web Services_Soap_Jaxb_Jax Ws - Fatal编程技术网

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

如何在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

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

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

我的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模式中,这个特定元素有一个默认值,如下所示:

<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

}