java webservice之axis2(一)

由於最近做的一個項目需要與SAP通過WebServices進行接口傳輸數據。所以花時間去研究了一下當前的兩種WebServices框架(axis2和XFire)。期間還是碰上了不少的異常, 現在就一起來分享一下我的心得吧!

主要的步驟如下:

1:下載axis2-1.4.1-bin.zip和axis2-1.4.1-war.zip兩個支持包(由於附件大小限制,大家就自己到http://ws.apache.org/axis2/download/1_4_1/download.cgi自行去下載)

2:將兩個包解壓,將axis2.war放到服務器的發佈目錄下。

3: 訪問一下http://localhost:8080/axis2就可以對webservices進行管理了。登錄的用戶名和密碼默認(admin/axis2) 可以在/WEB-INF/conf/axis2.xml 中進行配置.

4: 用eclipse建一個工程。建立一個普通的java類如下:

 

package com.wujianjun.axis2;

public class MyServices {

 public String sayHello(String name) {
  return "你好:"+ name;
 }

}

5:在src目錄下建一個/src/META-INF/services.xml. 裏面進行如下配置

<?xml version="1.0" encoding="UTF-8"?>
<serviceGroup>
 <service name="MyService">
  <description>Service description</description>
  <parameter name="ServiceClass">
   com.wujianjun.axis2.MyServices 
     </parameter>
  <messageReceivers>
   <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
    class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
   <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
    class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
  </messageReceivers>
 </service>
</serviceGroup>

5: 將這個類利用eclipse的功能將src選中後導出成一個jar文件(service.jar)。

6: 訪問http://localhost:8080/axis2進入到管理頁面。再選擇upload services, 再把services.jar 改成services.aar 後上傳到服務器上去。再進入services頁面則可看到剛發佈的web services了。

7: 調用web services : 訪問。我們就可以看到服務器返回給我們的"你好: admin";sayHello?name=admin

客戶端編程:

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;

public class TestClient {
	public static void main(String[] args) {
		try {
			ServiceClient sc = new ServiceClient();
			Options opts = sc.getOptions();
			opts.setTo(new EndpointReference("http://localhost:8080/axis2/services/MyService"));
			opts.setAction("urn:sayHello");
			OMElement res = sc.sendReceive(createPayLoad());
			System.out.println(res);
		} catch (AxisFault e) {
			e.printStackTrace();
		}

	}

	public static OMElement createPayLoad() {
		OMFactory fac = OMAbstractFactory.getOMFactory();
		OMNamespace omNs = fac.createOMNamespace("http://ws.apache.org/axis2","nsl");
		OMElement method = fac.createOMElement("sayHello", omNs);
		OMElement value = fac.createOMElement("name", omNs);
		value.setText("admin");
		method.addChild(value);
		return method;
	}

}

 

我們再講一下services.xml配置方式:

1、第一種配置方式: 按方法名稱進行配置
<operation name="methodName">
 <!--表示有參有返回值的方法-->
 <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
 <!--表示有參沒有返回值的方法-->
 <messageReceiver class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</operation>

2、第二種配置方式:
<messageReceivers>
 <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
 <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</messageReceivers>

3、普通類配置:
<service name="serviceName">
 <Description>服務的描述</Description>
 <parameter name="ServiceClass">全類名</parameter>
 <messageReceivers>
  <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
   class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
  <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
   class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
 </messageReceivers>
</service>

4、與Spring集成配置(web工程):
<service name="MySpringService" targetNamespace="http://www.wujianjun.org">
 <Description>測試spring與axis集成(web工程)</Description>
 <parameter name="ServiceObjectSupplier">org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier</parameter>
 <parameter name="SpringBeanName">springBeanName</parameter>
 <messageReceivers>
  <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
   class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
  <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
   class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
 </messageReceivers>
</service>

5、與Spring集成配置(JAVA工程):
<service name="MySpringService" targetNamespace="http://www.wujianjun.org">
 <Description>測試spring與axis集成(web工程)</Description>
 <parameter name="ServiceObjectSupplier">org.apache.axis2.extensions.spring.receivers.SpringAppContextAwareObjectSupplier</parameter>
 <parameter name="SpringBeanName">springBeanName</parameter>
 <messageReceivers>
  <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
   class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
  <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
   class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
 </messageReceivers>
</service>

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