Axis2與spring結合創建webService

因項目需要,與其他的系統做對接,我方需提供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的服務。

發佈了16 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章