codecamp

8.4.编写Webservice时的注意事项

对于Webservice的编写,我们可能会犯错的地方应该就是入参与出参了,以上面我们编写的Webservice为例,它的入参是UserRequest对象,出参是UserResponse对象,可以看到它的入参与出参都只是一个,这并不是巧合,而是故意为之,是一种最佳实践。

对于入参,UserRequest对象包含两个属性,一个是userCount,一个是targetCompany,也就是说我们的Webservice服务类需要两个参数,但在编写Webservice的Endpoint时,我们并没发将其作为两个入参处理,而是将这两个参数以属性的形式放在一个对象当中,作为一个入参处理。这样做的好处是避免了我们手工解析RequestPayload中的XML可能会出现的错误(Spring-WS允许我们方法调用参数当中解析RequestPayload中的XML以实现多个入参),同时即使我们的服务类需要再多的其它类型的参数(或者只有一个参数),我们也可以将其作为这个UserRequest对象的一个属性处理,简单且容易理解。

可能你会遇到一种相对较为简单的入参情况,那就是这个入参只有一个值,比如只有一个String类型的值,那么对于这种情况我们又该如何处理呢?同样遵行我们一个参数的原则,将我们需要端所需要的一个参数也放在一个我们自定义的对象当中,作为这个对象的属性实现数据的传递。比如我们之前的例子当中,如果服务端只需要一个userCount参数,而不需要targetCompany参数,同样我们也需要将这个userCount参数作为一个Javabean的属性。

讨论完入参后,我们来看看出参。对于出参而言,我们同样要遵循一个参数的原则,以我们上面所举的示例来说,出参是一个UserResponse对象,它有一个集合类型的User对象属性,也就是说,它的出参实际上也是一个值,一个集合类型的值,但我们并没有将这个集合直接作为出差使用,那是因为系统无法将集合值直接序列化成SOAP的消息部分内容,所以我们将这个集合放在一个我们自定义的名为UserResponse对象当中,这样在返回值时,系统会按照UserResponse对象当中定义的Annotation将这个返回值序列化成SOAP的消息部分内容。

通过以上对入参及出参的讨论,我们总结出一个结论,我们基于Spring-WS编写的Webservice的服务端方法,无论出参还是入参都只能是一个参数,而不能是多个,同时这个参数必须是我们自己定义的且添加了相关Annotation(比如@XmlRootElement等)的Javabean,对于服务端执行业务时需要的参数(无论是一个还是多个)都放到这个自定义的Javabean中,作为这个Javabean的标准属性实现参数值的传递。

8.3.为Webservice添加Security认证
8.5.调用SpringBean中特定方法的Webservice
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }