由於最近做的一個項目需要與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) { } |
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>