这里,用的xfire1.2.6和Spring 2.0,开发工具用的MyEclispe,虽然MyEclipse自带了开发xfire的插件,但为了不依赖开发工具,所以以下为手动创建。
Xfire 可以很好的和Spring 集成,下面分两部分介绍
纯Xfire 的web service
1.1、先建一个web 项目,打开下载到的xfire包,将lib下的所有 Jar包和modules目录下的所有Jar包拷到web 项目的WEB-INF/lib目录下。
1.2、修改web.xml文件,添加如下内容,以支持xfire:
<servlet> <servlet-name>XFireServlet</servlet-name> <servlet-class> org.codehaus.xfire.transport.http.XFireConfigurableServlet </servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
这样,便可以通过http://localhost:8080/projectName/services/ 路径来访问所有发布的web services了。
1.3、在项目下的WEB-INF目录下建立META-INF/xfire/这个目录,在此目录下建立services.xml文件,这个文件用来添写我的要发布的web services。文件内容如下所示:
<beans> <service xmlns="http://xfire.codehaus.org/config/1.0"> <name>HelloService</name> <serviceClass>com.services.HelloService</serviceClass> <implementationClass>com.services.HelloServiceImpl</implementationClass> </service> </beans>
文件的内容如下:
<service></service>:发布一个web service;
<name></name>:发布web service的名称;
<serviceClass></serviceClass>:提供服务的接口类;
<implementationClass></implementationClass>:实现服务接口类的具体类。
注:这里用的Spring 2.0,如果是用xfire 自带的Spring1.2.6,应该将 xmlns="http://xfire.codehaus.org/config/1.0" 放到<bean>里去定义。
1.4、下面,将这个web 项目,发布到tomcat下,便可以使用
http://localhost:8080/xfire/services/HelloService?wsdl
来调用这个web service了。
于Spring 集成的Xfire 开发web services,这里用的是spring 2.0,如果是spring2.5,需要将spring-webmvc.jar添加进来。
下面说与Spring 集成的Xfire开发步骤
Spring 与xfire 有三种结合方式,下面以直接与spring集成的方法说明。
(通过Spring的org.springframework.web.servlet.DispatcherServlet)。
2.1、将xfire与spring的JAR包放到web 项目的classPath
2.2、修改web.xml,使其支持Spring 与xfire,添加如下内容:
<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/conf/applicationContext.xml classpath:org/codehaus/xfire/spring/xfire.xml </param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet> <servlet-name>xfire</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>xfire</servlet-name> <url-pattern>/service/*</url-pattern> </servlet-mapping>
2.3、根据web.xml的内容,创建Spring的配置文件:applicationContext.xml
在本例中,将此文件放在WEB-INF/conf目录下。内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="helloBean" class="com.service.HelloServiceImpl" />
</beans>
这里,定义了一个bean,这里用的是web services接口的实现类。
2.4、在WEB-INF下创建xfire-servlet.xml文件,这里的xfire是org.springframework.web.servlet.DispatcherServlet这个servlet的名称,应该根据自己的进行修改
内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!-- 在这写上这名,这样就可以用applicationContext.xml里定义的Bean --> <import resource="classpath:org/codehaus/xfire/spring/xfire.xml" /> <!-- 这是定义URL映射 --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="urlMap"> <map> <!-- 在这写每一个Web Service的URL映射 --> <entry key="/HelloService"> //URL,访问地址 <ref bean="hello" /> </entry> </map> </property> </bean> <!-- 定义一个基础Service,以下的Service引用它 --> <bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true"> <!-- 引用xfire.xml中定义的工厂 --> <property name="serviceFactory" ref="xfire.serviceFactory" /> <!-- 引用xfire.xml中的xfire实例 xfire是web.xml配置的DispatcherServlet的名称--> <property name="xfire" ref="xfire" /> </bean> <!-- 定义一个Hello 的WebService,这里的serviceClass是接口 --> <bean id="hello" parent="baseWebService"> <property name="serviceBean"> <ref bean="helloBean" /> </property> <property name="serviceClass"> <value>com.service.HelloService</value> </property> </bean> </beans>
这样便生成一个web Service,可以通过域名来访问,并编写客户端代码了。
另一种方式,使用xfire自带的org.codehaus.xfire.spring.XFireSpringServlet这个类进行设置。
方法如下:
修改web.xml,添加如下内容:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!--XFire 配置 --> <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>/service/*</url-pattern> </servlet-mapping>
这样,便不必使用xfire-servlet.xml文件,直接在applicationContext.xml里添加Web Service的Bean就可以了。applicationContext.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!-- web service 配置 --> <import resource="classpath:org/codehaus/xfire/spring/xfire.xml" /> <bean id="HelloServiceImpl" class="com.service.impl.HelloServiceImpl" /> <bean id="HelloService" class="org.codehaus.xfire.spring.remoting.XFireExporter"> <property name="xfire" ref="xfire" /> <property name="serviceBean" ref="HelloServiceImpl" /> <!-- WebService的实现类bean --> <property name="serviceClass" value="com.service.service.HelloService" /> </bean> </beans>
但个Web Service是没有任何安全性可言的,任何拿到WSDL的人都可以轻松地构造客户端程序访问我们的Web Service服务。
<!--EndFragment-->