8.5.调用SpringBean中特定方法的Webservice
从BDF2-2.0.1开始,在BDF2-WEBSERVICE模块当中,我们提供了一个用于调用当前Webservice所在应用环境当中某个特定的SpringBean方法的Webservice,利用这个现成的Webservice,可以完成一些入参及出参相对简单的目标SpringBean的方法调用,该Webservice的WSDL的访问地址如下:
http://<serverName><:port>/<contextPath>/dorado/webservice/SpringBeanRPC.wsdl
浏览这个WSDL文件,可以看到如下图所示WSDL内容:
从WSDL描述可以看出,这个用于调用当前应用当中SpringBean的某个特定方法的Webservice的入参是一个名为DataRequest的对象,它包含三个参数,分别是:beanId,methodName以及一个集合类型的methodArgements,注意这里的methodArgements是个String组成集合类型,也就是说它可以是一个java.util.Collection也可以是一个String数组。
这个Webservice的出参相对简单,只有successful以及returnValue两个参数,这里的successful是一个布尔类型,用于标识当前调用是否成功,returnValue是个字符串,用于返回调用结果,如果调用成功且调用目标Spring Bean的方法有返回值,那么这里的returnValue就是返回值的toString()的值,如果没有返回值,那么returnValue就是null,但如果调用失败,这里的returnValue则是失败异常的message。
在调用这个Webservice时,如果我们采用BDF2-WEBSERVICE-CLIENT实现,那么对于需要的入参与出参对象,我们可以直接使用BDF2-WEBSERVICE中提供的DataRequest与DataResponse对象,下面是一个利用BDF2-WEBSERVICE-CLIENT对这个Webservice调用的代码示例:
调用示例
DataRequest req=new DataRequest(); req.setBeanId("testBean"); req.setMethodName("testMethod"); WebServiceClient client=new WebServiceClient("http://localhost:8081/bdf2-test/dorado/webservice/SpringBeanRPC"); client.setUsernameToken(username, password, true); client.setMarshallerClasses(new Class<?>[]{DataRequest.class,DataResponse.class}); DataResponse res=(DataResponse)client.sendAndReceive(req); if(!res.isSuccessful()){ System.out.println("失败消息:"+res.getReturnValue()); }else{ System.out.println("调用成功:"+res.getReturnValue()); }
从上面的调用示例代码当中可以看出,这个Webservice在调用时需要进行基于WS-Security的用户名及密码验证,这样就可以防止被人随意调用。