Spring是目前最流行的 JavaEE Framework,但是使用 Spring的 Spring-WS开发 WebService却十分繁琐。 XFire是一个简化 WebService开发的开源项目,通过 Spring和 XFire的结合可以大大简化基于 Spring Framework的应用中的 WebService开发。
Spring和 XFire可以通过多种方式结合,下文介绍的是笔者常用的一种简单而实用的方法。所用的 Spring版本为 2.0,XFire版本为 1.2.6。
1 配置 XFire Servlet
在 web.xml中加入如下配置:
< servlet >
< servlet-name > XFireServlet </ servlet-name >
< servlet-class >
org.codehaus.xfire.spring.XFireSpringServlet
</ servlet-class >
</ servlet >
< servlet-mapping >
< servlet-name > XFireServlet </ servlet-name >
< url-pattern > /servlet/XFireServlet/* </ url-pattern >
</ servlet-mapping >
< servlet-mapping >
< servlet-name > XFireServlet </ servlet-name >
< url-pattern > /services/* </ url-pattern >
</ servlet-mapping >
2 配置 Spring 的监听器,同基于 spring 的 Web 项目一样 Spring 的监听器是必不可少的。
< context-param >
< param-name > contextConfigLocation </ param-name >
< param-value >
classpath:org/codehaus/xfire/spring/xfire.xml,
/WEB-INF/applicationContext.xml
</ param-value >
</ context-param >
< listener >
< listener-class >
org.springframework.web.context.ContextLoaderListener
</ listener-class >
</ listener >
以下是完整的 web.xml 配置文件
<? xml version = "1.0" encoding = "UTF-8" ?>
< web-app version = "2.4"
xmlns = "http://java.sun.com/xml/ns/j2ee"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
< context-param >
< param-name > contextConfigLocation </ param-name >
< param-value >
classpath:org/codehaus/xfire/spring/xfire.xml,
/WEB-INF/applicationContext.xml
</ param-value >
</ context-param >
< listener >
< listener-class >
org.springframework.web.context.ContextLoaderListener
</ listener-class >
</ listener >
< servlet >
< servlet-name > XFireServlet </ servlet-name >
< servlet-class >
org.codehaus.xfire.spring.XFireSpringServlet
</ servlet-class >
</ servlet >
< servlet-mapping >
< servlet-name > XFireServlet </ servlet-name >
< url-pattern > /servlet/XFireServlet/* </ url-pattern >
</ servlet-mapping >
< servlet-mapping >
< servlet-name > XFireServlet </ servlet-name >
< url-pattern > /services/* </ url-pattern >
</ servlet-mapping >
</ web-app >
3 定义接口及实现服务
定义接口,这个接口中定义要通过 WebService 暴露的方法
package org.ccsoft;
public interface HelloWS {
public String sayHello(String sb);
}
实现服务
package org.ccsoft;
public class HelloWSImp implements HelloWS {
public String sayHello (String sb) {
// TODO Auto-generated method stub
return "Hello " +sb;
}
}
4 配置服务
将上文中实现的服务,加入到 spring 的配置文件中。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="helloWS" class="org.ccsoft.HelloWSImp"/>
<bean name="helloService" class="org.codehaus.xfire.spring.ServiceBean">
<property name="serviceBean" ref="helloWS"/>
<property name="serviceClass" value="org.ccsoft.HelloWS"/>
<property name="inHandlers">
<list>
<ref bean="addressingHandler"/>
</list>
</property>
</bean>
<bean id="addressingHandler" class="org.codehaus.xfire.addressing.AddressingInHandler"/>
</beans>
好了现在你可以通过 http://127.0.0.1:8080/XFireWS1/services/HelloWS?wsdl 来验证是否部署成功了。