axis實現webservices分布式通信
分布式通信原理
基本原理:stub和skeleton作為client和服務端傳輸的中介,stub和skeleton也是編碼和解碼的核心。
Wsdl :
Webservices描寫敘述文件。xml定義的一套Webservices標準,描寫敘述服務端相應方法。參數以及返回值。
可依據配置生成相應操作類。
其它常見的webservices實現
Corba
相對與webservices.編程復雜,而傳輸快。
UDDI
簡單來講,uddi中主要還是利用註冊中心。服務端通過註冊中心發送數據給相應的client,順便告知相應的client傳輸數據到註冊中心的信息。這樣來講,有這樣一個中介也避通過協議來直接傳輸龐大數據的缺點。
UDDI:http://blog.sina.com.cn/s/blog_645f168c0100i9pj.html
axis配置
一.配置webservice
1.將axis引擎部署到tomcat
axis-1_4\webapps\axis目錄拷貝到 apache-tomcat-7.0.54-windows-x64\apache-tomcat-7.0.54\webapps下。
2.編輯相應的java類到axis中。並又一次啟動tomcat
新建jws
publicclass MyWebService{ publicString sayHello(String x){ return"helloaxis"+x; } }
保存到axis根文件夾
3.訪問相應http://localhost:8080/axis/MyWebService.jws
Click to see the WSDL,看到MyWebService.jws相應的xml文件。相當於一個反向project,通常情況下利用這個xml文件就可以生成相應的java代碼。
至此webservices環境配置完畢
二.驗證調用
1.導入.jar
\axis-1_4\lib下的jar所有導入
2.client調用
publicstatic void main(String[] args){ //指明服務所在位置 Stringurl="http://localhost:8080/axis/MyWebService.jws?wsdl"; //axis相應服務 Serviceservice =new Service(); try{ //為Call設置服務的位置 Callcall=(Call)service.createCall(); call.setTargetEndpointAddress(newURL(url)); try{ Stringrs=(String) call.invoke("sayHello", new Object[] {"cfl"}); System.out.print(rs); }catch (AxisFault e) { //TODO Auto-generated catch block e.printStackTrace(); } }catch(ServiceExceptione){ e.printStackTrace(); }catch (MalformedURLException e) { //TODO Auto-generated catch block e.printStackTrace(); } }
調式日誌
錯誤1.
Error compiling 無法訪問 java.lang.Object
錯誤2.
java.lang.RuntimeException: No compiler found in your classpath!(you may need to add ‘tools.jar‘)
以上兩個錯誤,僅僅需將jdk下的tools.jar以及dt.jar復制到axis的lib文件下就可以。
警告3.
-Unable to find required classes (javax.activation.DataHandler andjavax.mail.internet.MimeMultipart).
Attachmentsupport is disabled.
將activation.jar、mail.jar導入到axis相應的lib就可以,消除警告。
詳情操作:http://blog.csdn.net/chastel/article/details/2084076
後序
Webservices作為異構語言之間共享或者說是交流的一種分布式技術,主要涉及到soap、wsdl等技術。
wsdl是用來描寫敘述服務端調用對象的,soap則是用來數據傳輸的。
另外以stub和skeleton來作為中介。另外,從個人角度來講分布式與遠程調用還是不一樣的,應該講Webservices是遠程調用的一種解決方式。
文中是一個小的不能再小的demo。原理如此。實際運用還須要再做研究。
axis的另外幾種實現:http://www.cnblogs.com/mingzi/archive/2009/03/22/1419120.html
axis實現webservices分布式通信