1. 程式人生 > >axis2學習筆記 第一天

axis2學習筆記 第一天

因為外派到移動公司,專案需要要學習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的專案。

http://localhost:8080/axis2/services/listServices 檢視釋出的webservice 列表

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

一 釋出wenservice

按照資料自己寫的小程式碼

import java.util.Random;



public class HelloWorldService {
	public String sayHello(String name){
		return name+"say hello";
	}
	public int getAge(int i){
		return i+ new Random().nextInt(40);
	}
} 


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中配置程式碼:

<parameter name="hotdeployment">true</parameter>
將true改為false。

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

也在axis2.xml檔案配置程式碼

<parametername="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檔案目錄中客戶端呼叫程式碼 例子

package services;

import javax.xml.namespace.QName;

import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;


public class HelloWorldClient {
	public static void main(String[] args) throws AxisFault {
		RPCServiceClient client = new RPCServiceClient();
		Options options = client.getOptions();
		String address = "http://localhost:8080/axis2/services/HelloWorldService";
		EndpointReference epr = new EndpointReference(address);
		options.setTo(epr);
		Object[] objEntryArgs = new Object[]{"超人"};
		Class[] classes = new Class[]{String.class};
		//QName 就是合格名字 qualified name 是指xml元素名字
		
		QName  qname = new QName("http://ws.apache.org/axis2","sayHello"); 
		Object[] result = client.invokeBlocking(qname, objEntryArgs,classes);
		System.out.println(result[0]);
	}
}

控制檯顯示結果
	這裡講一下

	QName
 1.來歷:qname是qualified name 的簡寫 2.構成:由名字空間(namespace)字首(prefix)以及冒號(:),還有一個元素名稱構成 3.舉例:

<wsdl:definitions targetNamespace="http://ws.apache.org/axis2"> 
<wsdl:types><xs:schema attributeFormDefault="qualified" elementFormDefault="unqualified" targetNamespace="http://ws.apache.org/axis2"> 
<xs:element name="sayHello"> 
<xs:complexType> <xs:sequence> 
<xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/> 
</xs:sequence>
 </xs:complexType> 
</xs:element> 

wsdl是名字空間字首,definitions 是元素名稱,xsl:template 就是一個qname  4.總結:qname無非是有著特定格式的xml元素,其作用主要是增加了名字空間,比如有同樣的元素名稱,而名字空間不同的情況。先了解這麼多,請大家補充。

我的理解可以看做找到targetNamespace是"http://ws.apache.org/axis2" 然後 元素 name是sayHello的方法確定了返回值所在的位置

注意:axis2的WebService客戶端呼叫的返回物件是一個Object的陣列,這點和axis1.x有很大不同。我們一般拿陣列的第一個值,轉換強轉即可。