axis2使用教程、webservices自定義引數,webservices自定義返回值
Java Axis2 1.6.2使用說明
下載axis
下載最新的axis2jar包以及配置檔案。下載地址:
貌似需要翻牆。我用的是火狐外掛翻牆的。絕體步驟你不懂得可以百度一下吧。
配置axis2
首先你的需要安裝好一個tomcat。版本這個用6、7都可以。至於5以下的我沒試過可否支援axis2。
首先配置和tomcat
Tomcat的配置步驟
這裡我不詳細說了,不知道的朋友可以百度一下,網上這種帖子多的是。
配置axis2
將axis2-1.6.2-war.zip檔案解壓到相應的目錄,將目錄中的axis2.war檔案放到<Tomcat安裝目錄>\webapps目錄下,並啟動Tomcat。
在瀏覽器位址列中輸入如下的URL:
如果在瀏覽器中顯示出wellcome頁面,則表示Axis2安裝成功。
釋出webservices
編寫一段java程式碼,然後編譯成class檔案。將編譯後的class檔案放到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\pojo目錄中(如果沒有pojo目錄,則建立該目錄)。
這樣就可以釋出webservices服務了。
比方說
public class Hello{
public String hello(){
return "hello";
}
}
將編譯後的class檔案放到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\pojo目錄中。然後進入http://localhost:8080/axis2點選頁面的services 。然後就顯示出來webservices服務了。
配置axis2熱部署和熱釋出。避免每次釋出需要重啟tomcat。
開啟<Tomcat安裝目錄>\webapps\axis2\WEB-INF\conf\axis2.xml,找到如下的配置。把false改為true即可。如下:
<parameter name="hotdeployment">true</parameter>
<parameter name="hotupdate">true</parameter>
然後重新啟動一下tomcat。
注意:
1. POJO類不能使用package關鍵字宣告包。
2. 在瀏覽器中測試WebService時,如果WebService方法有引數,需要使用URL的請求引數來指定該WebService方法引數的值,請求引數名與方法引數名要一致。
3. 釋出WebService的pojo目錄只是預設的,如果想在其他的目錄釋出WebServices,可以開啟axis2.xml檔案,並在<axisconfig>元素中新增如下的子元素:
<deployer extension=".class" directory="mypojo" class="org.apache.axis2.deployment.POJODeployer"/>
上面的配置允許在<Tomcat安裝目錄>\webapps\axis2\WEB-INF\mypojo目錄中釋出WebService。
使用axis2實現webservices自定義引數,webservices自定義返回值
對於配置axis2的過程不是很麻煩。可能很多人對於如何呼叫webservices比較疑惑。下面我將介紹給大家如何使用axis2使用自定義型別的引數、獲取自定義型別的返回值、獲取返回List<自定義泛型>型別的資料。
下面為我自己封裝的請求webservices的類核心程式碼
/**
* 執行webservices方法
*
* @return List<HashMap<String,String>>型別的結果集
* @throws AxisFault
* Axis異常
*/
publicList<HashMap<String, Object>> invokeBlocking() throws AxisFault {
List<HashMap<String,Object>> returns = new ArrayList<HashMap<String, Object>>();
RPCServiceClient serviceClient = new RPCServiceClient();
Optionsoptions = serviceClient.getOptions();
EndpointReference targetEPR = new EndpointReference(url);
options.setTo(targetEPR);
QName opAddEntry = new QName(targetNamespace, method);
Object[] so = serviceClient.invokeBlocking(opAddEntry, parameters,
newClass[] { returnType });
if(so.length > 0) {
if(so[0] instanceof Object[]) {
Object[] elements = (Object[]) so[0];
for(Object o : elements) {
HashMap<String,Object> maps = new HashMap<String, Object>();
OMElementImpl ome = (OMElementImpl) o;
maps.put(ome.getLocalName(),ome.getText());
while (ome.getNextOMSibling() != null) {
ome= (OMElementImpl) ome.getNextOMSibling();
maps.put(ome.getLocalName(),ome.getText());
}
returns.add(maps);
}
}else {
Objectob = so[0];
if(ob instanceof OMElementImpl == false) {
HashMap<String,Object> maps = new HashMap<String, Object>();
maps.put("simple",ob);
returns.add(maps);
}else {
OMElementImpl ome = (OMElementImpl) so[0];
HashMap<String,Object> maps = new HashMap<String, Object>();
maps.put(ome.getLocalName(),ome.getText());
returns.add(maps);
}
}
return returns;
}else {
return null;
}
}
下面是程式碼裡面提到的變數,以及說明
/**
* url :webservices 連線地址不包含方法及引數
*
* 例如: http://127.0.0.1:8080/axis2/services/Hello
*/
private String url;
/**
* method :呼叫webservices的方法名稱例如: getTime
*/
private Stringmethod;
/**
* targetNamespace :webservices的targetNamespace名詞
* 預設值為:http://ws.apache.org/axis2
*/
private StringtargetNamespace = "http://ws.apache.org/axis2";
/**
* parameters :請求方法的引數
*
*/
private Object[]parameters;
/**
* returnType :方法返回值型別
*/
@SuppressWarnings("rawtypes")
private ClassreturnType;
程式碼裡用到的到均可以在axis2-bin包下找到。
axiom-api-1.2.13.jar
axiom-impl-1.2.13.jar
axis2-adb-1.6.2.jar
axis2-kernel-1.6.2.jar
axis2-metadata-1.6.2.jar
axis2-transport-http-1.6.2.jar
axis2-transport-local-1.6.2.jar
commons-codec-1.3.jar
commons-httpclient-3.1.jar
commons-logging-1.1.1.jar
htpcore-4.0.jar
mail-1.4.jar
neethi-3.0.2.jar
wsdl4j-1.6.2.jar
XmlSchema-1.4.7.jar
這些包一個不能多,多了也沒用。一個也不能少,少了就報錯。是我整理的1.6.2最新的jar包。
原始碼我也提供給大家。你們可以在我的csdn上下載。
原始碼包含:webservices程式碼和client端程式碼。裡面有詳細的註釋。可以借鑑學習使用axis2使用自定義型別的引數、獲取自定義型別的返回值、獲取返回List<自定義泛型>型別的資料。
Jar包和axis2的配置檔案,提供另外一個下載地址。無須積分即可下載。[由於csdn檔案大小限制,所以分開下載]
本人web、android開發 、qq群255825960