因項目需要,與其他的系統做對接,我方需提供webService接口,在老大的指點下,採用了Axis+spring的方式來創建webService,全程參考了點擊打開鏈接一文,本文的目的僅爲鞏固自己今天所做的工作,爲以後類似的工作提供參考依據。
1.在網站發佈的根目錄下的web-inf/web.xml加上如下配置。本項目網站的路徑爲webroot/web-inf/web.xml加上如下配置,
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
但是要注意,首先必須引入axis2的jar包,且不要與本項目的jar包發生衝突。axis2-adb-1.6.2.jar , axis2-kernel-1.6.2.jar ,axis2-spring-1.6.2.jar ,axis2-transport-http-1.6.2.jar ,axis2-transport-local-1.6.2.jar , axiom-impl-1.2.13.jar ,axiom-api-1.2.13.jar, neethi-3.0.2.jar,XmlSchema-1.4.7.jar, wsdl4j-1.5.1.jar ,woden-api-1.0M9.jar。但是這些jar包可能還不是很全,可以根據項目所報的錯誤引入相應的jar包。
2.在網站的根目錄下新建一個axis-web目錄,裏面新建一個listServices.jsp文件,具體的目錄結構如下:webroot/axis-web/listServices.jsp。
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ page import="org.apache.axis2.Constants, org.apache.axis2.description.AxisOperation, org.apache.axis2.description.AxisService, java.util.Collection, java.util.HashMap, java.util.Iterator" %><html> <head><title>List Services</title> <style> h2{margin:20 0 5 0;} ul{margin-top:5;} </style> </head> <body> <h1>Available services</h1> <% HashMap serviceMap = (HashMap) request.getSession().getAttribute(Constants.SERVICE_MAP); Collection servicecol = serviceMap.values(); if(servicecol.size()==0){%>Available services is Empty.<%} for (Iterator iterator = servicecol.iterator(); iterator.hasNext();) { AxisService axisService = (AxisService) iterator.next(); Iterator opItr = axisService.getOperations(); String serviceName = axisService.getName(); %> <h2><font color="blue"><a href="<%=serviceName %>?wsdl" target="_blank"><%=serviceName%></a></font></h2> <i>Available Operations</i> <ul> <% while (opItr.hasNext()) { AxisOperation axisOperation = (AxisOperation) opItr.next(); %><li><%=axisOperation.getName().getLocalPart()%></li><% } %> </ul> <% } %> </body> </html>
重新啓動tomacat,訪問localhost:8080/mm/services/listServices/即可看到Available services is Empty的提示信息。
3.在web-inf目錄下新建一個services文件夾,在services文件夾下新建一個meta-inf文件夾,在文件夾中新建services.xml文件。具體的目錄結構爲:webroot/web-inf/services/meta-inf/services.xml.
<serviceGroup> <service name="WeatherService"> <description>WeatherService:Spring POJO Axis2 Service Sample</description> <parameter name="ServiceClass">sample.weatherservice.service.IWeatherService</parameter> <parameter name="ServiceObjectSupplier"> org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier </parameter> <parameter name="SpringBeanName">weatherService</parameter> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </messageReceivers> </service> </serviceGroup>
4.新建service.java、serviceImpl.java文件,如下所示:
//IWeatherService.java package sample.weatherservice.service; import sample.weatherservice.bean.Weather; public interface IWeatherService { void setWeather(Weather w); Weather getWeather(); }
//WeatherService.java package sample.weatherservice.service.impl; import sample.weatherservice.bean.Weather; import sample.weatherservice.service.IWeatherService; public class WeatherService implements IWeatherService { Weather weather; public void setWeather(Weather w) { weather = w; } public Weather getWeather() { return weather; } }
//Weather.java package sample.weatherservice.bean; public class Weather { float temperature; String forecast; boolean rain; float howMuchRain; public void setTemperature(float temp) { temperature = temp; } public float getTemperature() { return temperature; } public void setForecast(String fore) { forecast = fore; } public String getForecast() { return forecast; } public void setRain(boolean r) { rain = r; } public boolean getRain() { return rain; } public void setHowMuchRain(float howMuch) { howMuchRain = howMuch; } public float getHowMuchRain() { return howMuchRain; } }
5.新建webService.xml文件,裏面用來描述注入所寫的service及bean。並將此文件import到spring.xml文件中。
6.重新訪問localhost:8080/mm/services/listServices,即可看到名爲WeatherService的服務。