轉自:https://blog.csdn.net/chenghui0317/article/details/9318317
1、Axis的介紹
Web Service是如今最適合實現SOA的技術,而Axis是實現Web Service的一種技術框架(架構)。html
2、Axis的準備條件
所須要的jar包:java
axis.jarweb
jaxrpc.jarapache
saaj.jartomcat
wsdl4j-1.5.1.jar架構
commons-discovery-0.2.jarapp
xbean.jar
框架
下載地址:http://download.csdn.net/detail/ch656409110/5747129ide
3、建立webservice服務端
一、先將jar包放入lib目錄
二、在web.xml中配置axis監聽器和核心servlet
- <listener>
- <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
- </listener>
- <servlet>
- <display-name>Apache-Axis Servlet</display-name>
- <servlet-name>AxisServlet</servlet-name>
- <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
- </servlet>
- <servlet>
- <display-name>Axis Admin Servlet</display-name>
- <servlet-name>AdminServlet</servlet-name>
- <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
- <load-on-startup>100</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>AxisServlet</servlet-name>
- <url-pattern>/servlet/AxisServlet</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>AxisServlet</servlet-name>
- <url-pattern>/services/*</url-pattern>
- </servlet-mapping>
三、建立一個xml, 名字叫server-config.wsdd 放在WEB-INF根目錄
- <?xml version="1.0" encoding="UTF-8"?>
-
- <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
- <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
-
- <service name="houseWebService" provider="java:RPC">
- <parameter name="allowedMethods" value="*"/>
- <parameter name="className" value="com.struts2.webservice.server.HouseWebServiceImpl"/>
- </service>
-
- <transport name="http">
- <requestFlow>
- <handler type="URLMapper"/>
- </requestFlow>
- </transport>
- </deployment>
四、根據配置再建立webservice服務端的實現類
一、定義接口HouseWebService.java
ui
public String getHouseList(String xmlStr);
二、實現該接口HouseWebServiceImpl.java
能夠隨便返回一些字符串便可。
五、保存,發佈項目,啓動tomcat
在地址欄輸入:http://localhost:8080/house/services/houseWebService?wsdl 便可看到發佈的服務端的明細。
以下:
這就表示Axis發佈的webservice服務端成功了。
六、經過客戶端調用服務端webservice
-
- public String invoke(String endpoint,String methodName,String xmlStr){
- Service service = new Service();
- Call call = null;
- try {
- call = (Call) service.createCall();
- } catch (ServiceException e) {
- e.printStackTrace();
- }
- QName qn = new QName(methodName);
- call.setOperationName(qn);
- call.setTargetEndpointAddress(endpoint);
- call.setUseSOAPAction(true);
- String result = "";
- try {
-
- result = (String) call.invoke(new Object[] { xmlStr });
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- System.out.println("result is " + result);
- return result;
- }
-
- public List<House> getHouseList() {
- String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- + " <house>"
- + " <condition>"
- + " <title>便宜</title>"
- + " <price></price>"
- + " <streetname></streetname>"
- + " <typename></typename>"
- + " <floorage>100</floorage>"
- + " <pageno></pageno>"
- + " <pagesize></pagesize>"
- + " </condition>"
- + " </house>";
- String result = invoke("http://localhost:8080/house/services/houseWebService","getHouseList",xmlStr);
- }
在這裏面傳遞的xml規範由 服務端本身規範好了,而後去解析、獲取參數,執行相應的操做,返回想要的結果給調用的客戶端。。
若是用axis調用axis的服務端使用使用起來很方便,可是調用cxf的服務端容易出錯。
好比:若是在調用的時候沒有指定命名空間,就不行。
在調用的時候不指定調用的參數以及返回的結果類型,就收不到客戶端發送的參數。能夠看看:http://blog.csdn.net/ch656409110/article/details/9310789