axis2學習

首先我也是找了axis2 的學習資料 主要記錄一些 資料中講的不清楚,或者自己疑問的地方。

myeclipse 8.5按照資料的方法始終安裝不起,

官網下載只有  

org.apache.axis2.eclipse.codegen.plugin_1.6.2.jar

org.apache.axis2.eclipse.service.plugin_1.6.2.jar

這兩個 放到myeclipse 8.5安裝目錄下面的dropins文件夾下 始終沒反應

最後還是在csdn上找到了1.62的  myeclips 插件

好像多了幾個jar文件

javax.xml_1.3.4.v201005080400.jar

javax.xml.bind_2.1.9.v201005080401.jar

javax.xml.stream_1.0.1.v201004272200.jar

所以自己也上傳到自己資源空間也怕以後沒了 又要下載 要積分啊。。。

so 放上我自己上傳的地址:

http://download.csdn.net/detail/zbz0425/4558471


接下來下載下來的axis2的jar包,地址http://axis.apache.org/axis2/java/core/download.cgi

下載兩個

Binary Distribution  和
WAR Distributio


其中有一個axis2-1.6.2-bin.zip的庫文件,目錄結構如下:

bin文件夾是axis2的常用工具,其中有將wsdl文件轉換成客戶端調用的wsdl2java工具及將java轉換成wsdl文件的工具

conf是axis2的配置文件

lib運行所要的依賴庫

repository是發佈過的axis服務和文件

sample是示例

webapp是web文件和jsp頁面等


我們需要將下載下來的axis2-1.6.2-war.zip中的axis2.war這個文件放在我們的tomcat目錄下,啓動tomcat就會把war文件轉成一個可以跑起來的axis2的項目。

Tomcat啓動後,在瀏覽器中輸入:http://localhost:8080/axis2/你可以看到

http://localhost:8080/axis2/services/listServices 查看發佈的webservice 列表


感謝 資料作者  感謝授人以漁的   作者 博客 blog.csdn.net/IBM_hoojo http://hoojo.cnblogs.com/

一 發佈wenservice

按照資料自己寫的小代碼

[html] view plaincopy
  1. import java.util.Random;  
  2.   
  3.   
  4.   
  5. public class HelloWorldService {  
  6.     public String sayHello(String name){  
  7.         return name+"say hello";  
  8.     }  
  9.     public int getAge(int i){  
  10.         return i+ new Random().nextInt(40);  
  11.     }  
  12. }   


HelloWorldService是沒有package的,然後去workspace裏找到這個HelloWorldService的class 字節碼文件

然後放到Tomcat 6.0\webapps\axis2\WEB-INF\pojo 文件夾中


在編寫、發佈和測試配置的WebService時應注意如下幾點:

   1. POJO類不能使用package關鍵字聲明包。

  2. Axis2默認情況下可以熱發佈WebService,將WebService.class文件複製到Tomcat 6.0\webapps\axis2\WEB-INF\pojo文件夾中,Tomcat不需要重新啓動就可以自動發佈WebService。如果想取消Axis2的熱發佈功能,可以在Tomcat 6.0\webapps\axis2\WEB-INF\conf\axis2.xml中配置代碼:

[html] view plaincopy
  1. <parameter name="hotdeployment">true</parameter>  
將true改爲false。

Axis2雖然是熱發佈,但不是熱更新,成功發佈了WebService,再想更新該WebService,就必須重啓Tomcat。所以可以需要的話,可以將Axis2設爲熱更新。

也在axis2.xml文件配置代碼

[html] view plaincopy
  1. <parameternameparametername="hotupdate">false</parameter>  

false改爲true

   3. 測試WebService時,如果WebService方法有參數,需要使用URL的請求參數來指定該WebService方法參數的值,請求參數名與方法參數名要一致,例如,要測試

sayHello方法,請求參數名應爲name,那url應該如下
http://localhost:8080/axis2/services/HelloWorldService/sayHello?name=zhangsan<ns:sayHelloResponse><return>zhangsansay hello</return></ns:sayHelloResponse>

發佈的文件夾是默認的,如果要在其他的文件目錄發佈,可以在文件中加一個配置模仿原來 代碼中設置pojo的代碼首先看默認

pojo


<deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>

然後我們在這句下面添加一句相似的即可 direcory 改爲你要命名的文件目錄 如:

<deployer extension=".class" directory="newpojo" class="org.apache.axis2.deployment.POJODeployer"/>


二 java編寫客戶端代碼調用webservice編寫這個需要先導入axis2包  在前面下的 在lib文件夾下,最好全部複製吧可以自己定義libary 或者放到webroot下web-info下的lib文件目錄中客戶端調用代碼 例子


[html] view plaincopy
  1. package services;  
  2.   
  3. import javax.xml.namespace.QName;  
  4.   
  5. import org.apache.axis2.AxisFault;  
  6. import org.apache.axis2.addressing.EndpointReference;  
  7. import org.apache.axis2.client.Options;  
  8. import org.apache.axis2.rpc.client.RPCServiceClient;  
  9.   
  10.   
  11. public class HelloWorldClient {  
  12.     public static void main(String[] args) throws AxisFault {  
  13.         RPCServiceClient client = new RPCServiceClient();  
  14.         Options options = client.getOptions();  
  15.         String address = "http://localhost:8080/axis2/services/HelloWorldService";  
  16.         EndpointReference epr = new EndpointReference(address);  
  17.         options.setTo(epr);  
  18.         Object[] objEntryArgs = new Object[]{"超人"};  
  19.         Class[] classes = new Class[]{String.class};  
  20.         //QName 就是合格名字 qualified name 是指xml元素名字  
  21.           
  22.         QName  qname = new QName("http://ws.apache.org/axis2","sayHello");   
  23.         Object[] result = client.invokeBlocking(qname, objEntryArgs,classes);  
  24.         System.out.println(result[0]);  
  25.     }  
  26. }  
  27.   
  28. 控制檯顯示結果  
  29.     這裏講一下  
  30.   
  31.     QName  
  32.  1.來歷:qname是qualified name 的簡寫 2.構成:由名字空間(namespace)前綴(prefix)以及冒號(:),還有一個元素名稱構成 3.舉例:  
  33.   
  34. <wsdl:definitions targetNamespace="http://ws.apache.org/axis2">   
  35. <wsdl:types><xs:schema attributeFormDefault="qualified" elementFormDefault="unqualified" targetNamespace="http://ws.apache.org/axis2">   
  36. <xs:element name="sayHello">   
  37. <xs:complexType> <xs:sequence>   
  38. <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/>   
  39. </xs:sequence>  
  40.  </xs:complexType>   
  41. </xs:element>   
  42.   
  43. wsdl是名字空間前綴,definitions 是元素名稱,xsl:template 就是一個qname  4.總結:qname無非是有着特定格式的xml元素,其作用主要是增加了名字空間,比如有同樣的元素名稱,而名字空間不同的情況。先了解這麼多,請大家補充。  
  44.   
  45. 我的理解可以看做找到targetNamespace是"http://ws.apache.org/axis2" 然後 元素 name是sayHello的方法確定了返回值所在的位置  



注意:axis2的WebService客戶端調用的返回對象是一個Object的數組,這點和axis1.x有很大不同。我們一般拿數組的第一個值,轉換強轉即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章