XFire + Spring构建Web Services服务器端(二)

本篇介绍XFire + Spring构建Web Services服务器端的第二种办法。

两种办法的不同之处在于:

第一种办法的ServletClass是org.codehaus.xfire.spring.XFireSpringServlet,这种办法服务的声明在Spring配置文件中完成,即applicationContext.xml文件中。

第二种办法的ServletClass是org.springframework.web.servlet.DispatcherServlet,这种办法需要另外在WEB-INF文件夹下新建一个XFireServlet-servlet.xml,服务声明在该文件中(和applicationContext.xml,web.xml在同一目录下),这里的XFireServlet是web.xml文件中servlet的名字,需要保持一致。


1、web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
	<context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>  
            /WEB-INF/XFireServlet-servlet.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.springframework.web.servlet.DispatcherServlet</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>

<servlet>中的servlet-name可自己设定,但是{servlet-name}-servlet必须为新建xml文件的名字,如程序中servlet-name为XFireServlet,则新建的xml文件的名字为:XFireServlet-servlet.xml,而且该文件的路径需要加入<context-param>下面的<param-value>中。(这个地方见到有的例子并没有加入这个文件的路径,而是:classpath:org/codehaus/xfire/spring/xfire.xml,这点我没写例子实践。)

2、接口类和实现类

 package  webservice;
 
 /** 
  *HelloWorld的接口类.
   */ 
 public interface HelloWorld  {
      /** 
      *对名字为name的人打招呼.
      *@paramname名字
      *@return返回打招呼的字符串
       */ 
     String sayHelloWorld(String name);
 } 
 我们还需要建立一个对应的实现类,来实现sayHelloWorld的功能,该实现类即为HelloWorldImpl.java。该类的详细内容如下:
 package  webservice;
 /** 
  *HelloWorld的实现类.
   */ 
 public class HelloWorldImpl  implements  HelloWorld  {
      public  String sayHelloWorld(String name)  {
        String helloWorld  =   " hello, "   +  name;
         return  helloWorld;
     } 
 } 

这个没什么特别的

3、配置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 > 
      < bean  id ="HelloWorldBean"  class ="webservice.HelloWorldImpl" /> 
 </ beans >

4、配置服务(XFireServlet-servlet.xml)

 <? xml version="1.0" encoding="UTF-8" ?> <! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" > < beans > <!-- 引入XFire预配置信息 --> < import resource ="classpath:org/codehaus/xfire/spring/xfire.xml" /> <! —定义访问的url-- > < bean class ="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" > < property name ="urlMap" > < map > < entry key ="/HelloWorldService.ws" > < ref bean ="HelloWorldService" /> </ entry > </ map > </ property > </ bean > <!-- 使用XFire导出器 --> < 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实例 --> < property name ="xfire" ref ="xfire" /> </ bean > < bean id ="HelloWorldService" parent ="baseWebService" > <!-- 业务服务bean --> < property name ="serviceBean" ref ="HelloWorldBean" /> <!-- 业务服务bean的窄接口类 --> < property name ="serviceClass" value ="webservice.HelloWorld" /> </ bean > </ beans > 

如果有多个服务,添加多个<entry></entry>即可


配置完成在浏览器中输入http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl 测试一下是否正常

你可能感兴趣的:(spring,bean,Web,webservice,服务器,encoding)