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 测试一下是否正常

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值