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配置(推薦)

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM