php調用webservice,webservice wsdl 生成服務

 2023-11-19 阅读 27 评论 0

摘要:由于之前的示例是在當前項目下發布的server,也是在當前項目下訪問的server發布的webservice。但在實際應用中,我們的服務端往往是和客戶諯分離的,甚至它們是不同的項目中不同的人寫的。而像之前的在當前項目中使用服務端的接口類:IMyService就不

由于之前的示例是在當前項目下發布的server,也是在當前項目下訪問的server發布的webservice。但在實際應用中,我們的服務端往往是和客戶諯分離的,甚至它們是不同的項目中不同的人寫的。而像之前的在當前項目中使用服務端的接口類:IMyService就不太現實了。因為此時你只有服務端的wsdl,怎么可以直接用服務端的接口類接收并測試呢。如何解決這個問題?

?

JDK的bin目錄下自帶就有一個工具,wsimport。一個用來導出webservice的東東,服務端可以導其導出后生成jar文件,然后客戶端引用不就行了?

php調用webservice?好的,我們下面來看下怎么使用它。

它有幾個很重要的參數,

-d 表示輸出的目錄,目錄必須事先存在,否則導出失敗。

webservice調用方式,?-keep表示導出webservice的class文件時是否也導出源代碼java文件。

-verbose表示詳細信息。

看我們的導出命令。我們直接導在d盤中。

?

[plain]?view plaincopyprint?
  1. wsimport?-d?d:?-keep?-verbose?http://localhost:7777/tudou?wsdl??

webService、

?

我們導出的文件目錄是D:\com\whaty\platform\ws\server這個目錄大家有沒有發現,正好和我們之前的服務器端目錄是一樣的,但實際上在wsdl中namespace是相反的http://server.ws.platform.whaty.com/。也就是說服務端生成wsdl時反過來生成了namespace,而wsimport根據wsdl生成時又反過來給還原了去。

?

webserviceclient,我們直接把生成的目錄放在第2個建好的項目中去。這樣我們客戶端的項目就可以直接使用服務端的接口IMyservice了。順便我們把前一章的client訪問類也拷過來測試一下。目錄結構如下【注意這是一個新的項目】:

直接運行MyClient測試一下。

?

[java]?view plaincopyprint?
  1. package?com.whaty.platform.ws.client;??
  2. ??
  3. import?java.net.MalformedURLException;??
  4. import?java.net.URL;??
  5. ??
  6. import?javax.xml.namespace.QName;??
  7. import?javax.xml.ws.Service;??
  8. ??
  9. import?com.whaty.platform.ws.server.IMyservice;??
  10. ??
  11. /**?
  12. ?*?@className:MyClient.java?
  13. ?*?@Desc:訪問發布的服務?
  14. ?*?@author:lizhuang?
  15. ?*?@createTime:2012-12-21?上午01:23:57?
  16. ?*/??
  17. public?class?MyClient?{??
  18. ????public?static?void?main(String[]?args)?{??
  19. ??
  20. ????????try?{??
  21. ????????????//服務WSDL?Document的地址??
  22. ????????????URL?url?=?new?URL("http://localhost:7777/tudou?wsdl");??
  23. ????????????//1.Qnameqname是qualified?name?的簡寫??
  24. ????????????//2.構成:由名字空間(namespace)前綴(prefix)以及冒號(:),還有一個元素名稱構成??
  25. ????????????//由發布的wsdl可知namespace為http://server.ws.platform.whaty.com/,??
  26. ????????????QName?qname=new?QName("http://server.ws.platform.whaty.com/","MyServiceImplService");??
  27. ????????????Service?service=Service.create(url,?qname);??
  28. ????????????IMyservice?ms=service.getPort(IMyservice.class);??
  29. ????????????ms.add(1,?4);??
  30. ????????????ms.minus(1,?4);??
  31. ????????}?catch?(MalformedURLException?e)?{??
  32. ????????????e.printStackTrace();??
  33. ????????}??
  34. ????}??
  35. }??

webservice客戶端生成、
控制臺打印:

?

a+b=5
a-b=-3

?

webservice客戶端調用?看到沒有,和之前我們在服務端測試的效果是一樣的,不同的是文件不一樣。wsimport生成的文件將服務端的webservice折成若干文件了。每一個方法和請求分別對應2個文件。你會發現其中有個類MyServiceImplService:

?

[html]?view plaincopyprint?
  1. @WebServiceClient(name?=?"MyServiceImplService",?targetNamespace?=?"http://server.ws.platform.whaty.com/",?wsdlLocation?=?"http://localhost:7777/tudou?wsdl")??
  2. public?class?MyServiceImplService??


這個類是注解好的客戶端程序,它里面有個方法:

?

soap webservice、?

[html]?view plaincopyprint?
  1. /**??
  2. ????*???
  3. ????*?@return??
  4. ????*?????returns?IMyservice??
  5. ????*/??
  6. ???@WebEndpoint(name?=?"MyServiceImplPort")??
  7. ???public?IMyservice?getMyServiceImplPort()?{??
  8. ???????return?super.getPort(new?QName("http://server.ws.platform.whaty.com/",?"MyServiceImplPort"),?IMyservice.class);??
  9. ???}??


直接幫我們生成了一個qname訪問程序。既然如何,我們就不用自己寫qname了,直接拿來用測試豈不更好?

?

簡化后的客戶端測試方法如下:

webservice 調用、?

[java]?view plaincopyprint?
  1. package?com.whaty.platform.ws.client;??
  2. ??
  3. import?com.whaty.platform.ws.server.IMyservice;??
  4. import?com.whaty.platform.ws.server.MyServiceImplService;??
  5. ??
  6. /**?
  7. ?*?@className:MyClient2.java?
  8. ?*?@Desc:使用JDK?wsimport生成的MyServiceImplService快速訪問我們的服務。?
  9. ?*?@author:lizhuang?
  10. ?*?@createTime:2012-12-22?上午12:24:37?
  11. ?*/??
  12. public?class?MyClient2?{??
  13. ????public?static?void?main(String[]?args)?{??
  14. ????????MyServiceImplService?myServiceImplService=new?MyServiceImplService();??
  15. ????????IMyservice?msis=?myServiceImplService.getMyServiceImplPort();??
  16. ????????msis.add(1,?4);??
  17. ????????msis.minus(1,?4);??
  18. ????}??
  19. }??


你會發現結果是一樣的。

轉載于:https://www.cnblogs.com/Struts-pring/p/5025866.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/180678.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息