webservice接口开发

      前提: 前两天公司让微信公众号对个人发送消息模板的接口,供其他系统访问,刚开始领导说直接用个action实现,我觉的不安全,加上了des对称加密算法和时间戳做拦截器 把需要的参数编成json,加密后传递,但是后面觉得这种方法太low了,因为还要把des加密的那一块也得在其他系统上面引入,约定算法的key,这个方法显得很野,就百度了webservice的原理及用法,感觉这个最合适,然后自己写了一个demo跑通了,但是有个问题是直接用webservice发布服务器端,不能和tomcat的端口号一样,这个显然不太合适,就百度了cfx,让cfx和spring整合,最后由spring管理webservice的发布。

  webservice本以为很高大声,研究了一下原理其实很简单,就是服务器端(提供接口端)写一个service方法,而这个方法本身想暴露给客户端(使用接口端)调用,实现不同系统直接的方法的调用。就需要先有个webservice类,然后用@webservice注解类,用@WebMethod注解类中暴露的方法,最后把这个类通过webservice的方法发布出去,外界获取了一个wsdl(接口详情清单页)的地址,根据这个页面的信息,通过cmd等命令把webservice编译的代码下载到客户端,最后客户端直接调用生成的代码即实现了不同系统直接方法的调用。

   这里不再赘叙,网上这位朋友讲的很透彻,可以参考:https://blog.csdn.net/yhahaha_/article/details/81395397

客户端
调用
经过测试分了三种方式:
 1     URL wsdlURL = null;
 2         try {
 3             wsdlURL = new URL("http://localhost:6060/fms/soap/wechat_sendMessage?wsdl");
 4         } catch (MalformedURLException e) {
 5             e.printStackTrace();
 6         }
 7         //目标命名空间 这两个wsdl文件里面有说明
 8         String targetNamespace =  "http://impl.service.commom.webchat.bms.vimtech.com/";    
 9         QName serviceName = new QName(targetNamespace,"SendMessageFaceImplService");
10         
11         //获取service 
12         Service service = Service.create(wsdlURL, serviceName);    
13         SendMessageFace ms = service.getPort(SendMessageFace.class);//这个service接口是需要在客户端创建的,包名类名,方法名一致,或者引入服务端的此接口的jar
14         String string = ms.sendMessageByWeTemp("xiaoming", "asdfardf");
15         System.out.println(string);
第一种反向代理,
1 wsimport -s 客户端地址 -p 客户端包名 -keep wsdl的网络地址
2 
3 如:
4 wsimport -s D:\Workspaces\TheClient\src -p com.sl.client -keep http://localhost:9094/Service2/ServiceBora?wsdl
第二种cmd命令生成客户端代码
 1 .spring配置文件信息:
 2 <jaxws:client id="wechat_sendMessagePoint" serviceClass="com.wp.learn.webservice.cxf.service.SendMessageFaceImpl"  address="http://localhost:8080/ws/wechat_sendMessage">
 3 </jaxws:client>
 4 
 5 
 6 //注意,该出的targetNamespace的值必须和webService服务项目中定义的必须一致,否则调用不成功
 7 @WebService(targetNamespace = "http://impl.service.commom.webchat.bms.vimtech.com/", name = "SendMessageFaceImplService")
 8 public interface SendMessageFace{
 9       @WebMethod
10     String sendMessageByWeTemp(String userid,String message);
11 }
第三种是spring配置(推荐)

 

 

 
posted @ 2019-03-11 11:31  升级打怪猴  阅读(2589)  评论(0编辑  收藏  举报