Spring 作為當前最主流的 JavaEE 框架,雖然功能強大,但若直接使用 Spring-WS 開發 WebService,流程往往顯得繁瑣複雜。XFire 作為一個簡化 WebService 開發的開源專案,與 Spring 結合後,能大幅降低基於 Spring Framework 應用中 WebService 的開發門檻。本文將詳細介紹一種簡單實用的整合方案,採用 Spring 2.0 與 XFire 1.2.6 版本為例。
首先需在 web.xml 中註冊 XFire 的核心 Servlet,並映射兩個常用的 URL 模式:
<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>
Spring 的 ContextLoaderListener 是不可或缺的,同時需指定載入 XFire 內建配置與專案自定義配置:
<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>
遵循介面導向設計,先定義服務介面,再提供實作類:
// 服務介面
package org.ccsoft;
public interface HelloWS {
String sayHello(String name);
}
// 服務實作
package org.ccsoft;
public class HelloWSImp implements HelloWS {
public String sayHello(String name) {
return "Hello " + name;
}
}
在 applicationContext.xml 中將實作類註冊為 Bean,並透過 XFire 的 ServiceBean 將其暴露為 WebService,同時加入 WS-Addressing 處理器:
<beans xmlns="https://www.springframework.org/schema/beans"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.springframework.org/schema/beans
https://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>
完成上述配置後,啟動應用伺服器,即可透過 https://host:port/你的應用/services/helloService?wsdl 存取 WSDL 文檔,驗證服務是否成功發布。這種整合方式不僅配置清晰,更充分發揮了 Spring 的 IoC 優勢,讓 WebService 開發變得輕鬆高效。