1. 程式人生 > >WebService-axis2

WebService-axis2

cat tar sts .com cme args clas test static

WebService框架有好多,常用的cxf,axis2等,axis2的配置過程相對簡單,不用編寫接口,在實現。只需要一個Service服務類即可。配置過程大致如下:

1,導入jar包(這裏我是把axis2使用的所有jar全部放到項目當中,可以根據自己使用的功能進行增刪,使用的版本是1.6.2,開發環境jdk 1.6):

技術分享

技術分享

技術分享

2,實現服務端WebService服務,會使用到javax.ws的註解

  

import javax.jws.WebMethod;
import javax.jws.WebService;

public class TestService {

@WebMethod(action="sayHello",operationName="sayHello")
public String sayHello(String name){

return "hello "+name;
}
}

3,修改Web.xml文件,添加如下內容:

  

<servlet>
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache-Axis Servlet</display-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>AxisAdminServlet</servlet-name>
<servlet-class>org.apache.axis2.webapp.AxisAdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

4,創建service.xml,測試用的service.xml文件內容如下:

  

<serviceGroup>
<!-- servlet攔截serices/後面的請求,此處配置為TestService對應的服務名稱,則訪問時為/services/services/mehtod?param=xxx -->
<service name="TestService" scope="application">
<parameter name="ServiceClass">com.sample.axis2.serivce.TestService</parameter>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/ns/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
<messageReceiver mep="http://www.w3.org/ns/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
</service>
</serviceGroup>

5,發布服務,通過瀏覽器訪問:

  技術分享

技術分享

6,測試,axis2屬於resetFul WebService,即可以通過post請求傳入參數,例如:http://localhost:8090/axis2-webService/services/TestService/sayHello?name=test%20for%20axis2

返回值就會出現如下內容: 

  技術分享

7,通過應用程序調用webserice服務:

  aixs2的調用方可以直接使用webservice地址進行,也可以將webservice接口文件下載本地進行調用,不同方式獲取接口文件的可以查看 http://axis.apache.org/axis2/java/core/docs/quickstartguide.html官網地址給出的內容。

  1)在測試程序裏,使用動態代理的方式進行調用,內容如下:

  

public static String RPCInvoke() throws AxisFault{

RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
Class<?>[] opReturnType = new Class[] { String[].class };//返回值類型
EndpointReference targetEPR = new EndpointReference(
"http://localhost:8090/axis2-webService/services/TestService?wsdl");
options.setTo(targetEPR);
QName opAddEntry = new QName("http://serivce.axis2.sample.com", "sayHello");//調用webservice方法

Object[] opAddEntryArgs = new Object[] { "test" };//傳入參數
Object[] res = serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs,opReturnType);//調用方法並獲取返回值
System.out.println(((String[]) res[0])[0]);//輸出返回值
return ((String[]) res[0])[0];

}

2)另一種調用方式會顯得麻煩一些,使用OMElement,在調用請求之前你需要創建這個對象,OMElement繼承自OMNode對象,如果想要更深入了解可以查看這個鏈接:http://ws.apache.org/axiom/apidocs/org/apache/axiom/om/OMElement.html下的doc說明。

public static OMElement getEchoOMElement() { //這個方法主要是創建OMElement對象
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace(
"http://serivce.axis2.sample.com", "example1");//webservice的targetNameSpaces,
OMElement method = fac.createOMElement("sayHello", omNs); //調用的webservice方法
OMElement value = fac.createOMElement("name", omNs);//參數名稱
value.addChild(fac.createOMText(value, "Axis2 Echo String "));//參數
method.addChild(value);

return method;
}

public static void OMEInvoke() throws AxisFault{ //調用webservice,這種調用方式和在瀏覽器裏調用返回結構相同。所以你需要將返回值在xml和object之間進行轉換,獲得需要數據

Options options = new Options();
EndpointReference targetEPR = new EndpointReference(
"http://localhost:8090/axis2-webService/services/TestService");
options.setTo(targetEPR);
options.setAction("urn:echo");

//Blocking invocation
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
OMElement result = sender.sendReceive(getEchoOMElement());

System.out.println(result);
}

可以看一下他的返回值:

<ns:sayHelloResponse xmlns:ns="http://serivce.axis2.sample.com"><ns:return>hello Axis2 Echo String </ns:return></ns:sayHelloResponse>

  

  

  

WebService-axis2