使用xFire和Spring构建WebService

首先感谢阿蜜果,多谢其写的文章,本文几乎完全参考自其文。

 

使用xFireSpring开发WebService

要下载xFireSpring,我用的xFire1.2.6版,不要只下载xFire这一个jar,下载zip的发布版,这样其他依赖的jar包就都包含了。Spring我用的是2.5.6版的。Eclipse我用的3.5的含J2EE的。

先构建Server端,新建Dynamic Web Project,将以下jar包加入到lib中:activation-1.1.jarcommons-codec-1.3.jarcommons-httpclient-3.0.jarcommons-logging-1.0.4.jarjaxen-1.1-beta-9.jarjdom-1.0.jarmail-1.4.jarservlet-api-2.3.jarstax-api-1.0.1.jarwsdl4j-1.6.1.jarxfire-all-1.2.6.jarXmlSchema-1.1.jar以及spring-2.5.6.jarspring-webmvc.jar

配置web.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

  <display-name>WebServiceServer</display-name>

 

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

 

   <context-param>

       <param-name>contextConfigLocation</param-name>

       <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/xfire-servlet.xml</param-value>

    </context-param>

   

    <listener>

       <listener-class>org.springframework.web.context.ContextLoaderListener

       </listener-class>

    </listener>

   

     <listener>

       <listener-class>org.springframework.web.util.IntrospectorCleanupListener

       </listener-class>

    </listener>

 

       <servlet>  

       <servlet-name>xfire</servlet-name>  

       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    </servlet>

     

    <servlet-mapping>

       <servlet-name>xfire</servlet-name>

       <url-pattern>*.ws</url-pattern>

    </servlet-mapping>

   

    <servlet>

       <!-- 配合Spring容器中XFire一起工作的Servlet-->

       <servlet-name>xfireServlet</servlet-name>

       <servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>

    </servlet>

   

    <servlet-mapping>

       <servlet-name>xfireServlet</servlet-name>

       <!-- 在这个URI下开放Web Service服务 -->

       <url-pattern>/service/*</url-pattern>

    </servlet-mapping>      

</web-app>

文件中已指出SpringxFire的配置文件位置,这两个配置文件如下:

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="userService" class="com.viewsky.service.UserServiceImpl" />

</beans>

*******************************************************************************

xFire-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="/userService.ws">                  

                  <ref bean="userWebService" />                

              </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="userWebService" parent="baseWebService">

       <property name="serviceBean" ref="userService" />

       <property name="serviceClass" value="com.viewsky.service.IUserService" />

    </bean>

</beans>

配置文件写好了,需要的类如下:

User.java

 

package com.viewsky.bean;

 

public class User

{

         private String username;

         private int age;

         private String hobby;

        

         public String getUsername()

         {

                   return username;

         }

         public void setUsername(String username)

         {

                   this.username = username;

         }

        

         public int getAge()

         {

                   return age;

         }

         public void setAge(int age)

         {

                   this.age = age;

         }

        

         public String getHobby()

         {

                   return hobby;

         }

         public void setHobby(String hobby)

         {

                   this.hobby = hobby;

         }

        

         public String toString()

         {

                   return "用户:" + username +

                            ",年龄" + age +

                            "时,爱好:" + hobby;

         }

}

*******************************************************************************

IuserService.java

 

package com.viewsky.service;

 

import com.viewsky.bean.User;

 

public interface IUserService

{

         public abstract User findUserHobby(User user) throws Exception;

}

*******************************************************************************

UserServiceImpl.java

 

package com.viewsky.service;

 

import java.util.HashMap;

import java.util.Map;

 

import com.viewsky.bean.User;

 

public class UserServiceImpl implements IUserService

{

         private static final Map<String, String> mapUser =

                   new HashMap<String, String>();

        

         static

         {

                   mapUser.put("jg.sun", "篮球");

                   mapUser.put("lcrystal", "足球");

                   mapUser.put("s0meb0dy", "游泳");

                   mapUser.put("猫来猫去", "睡觉");

                   mapUser.put("小刚", "唱歌");

         }

        

         public User findUserHobby(User user) throws Exception

         {

                   if(user == null)

                   {

                            return null;

                   }

                  

                   String hobby = mapUser.get(user.getUsername());

                  

                   if(hobby == null)

                   {

                            user.setHobby("");

                   }

                   else

                   {

                            user.setHobby(hobby);

                   }

                  

                   return user;

         }

}

一切都好了,只差一个index.jsp了,其代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Server</title>

</head>

<body>

         <%response.sendRedirect("userService.ws?wsdl"); %>

</body>

</html>

现在发布应用,就可以看到相应的wsdl文件了。

编写客户端,导入同样的jar文件,只是额外多一个对刚建的server打的jar包。web.xml配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

  <display-name>WebServiceClientWeb</display-name> 

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list> 

   <context-param>

       <param-name>contextConfigLocation</param-name>

       <param-value>/WEB-INF/client.xml</param-value>

    </context-param>

    <listener>

       <listener-class>org.springframework.web.context.ContextLoaderListener

       </listener-class>

    </listener>

   

    <servlet>  

       <servlet-name>test</servlet-name>  

       <servlet-class>com.viewsky.ws.servlet.TestUserServiceServlet</servlet-class>

    </servlet>  

   

    <servlet-mapping>

       <servlet-name>test</servlet-name>

       <url-pattern>/test</url-pattern>

    </servlet-mapping>

</web-app>

对应的Spring配置文件为client.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="testWebService" class="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean">

             <property name="serviceClass">         

                            <value>com.viewsky.service.IUserService</value>      

         </property> 

          

        <property name="wsdlDocumentUrl">        

                            <value>http://10.227.1.39:8080/WebServiceServer/userService.ws?wsdl</value>      

        </property>    

     </bean>

</beans>

现在只需要一个servlet就一切OK了,TestUserServiceServlet.java内容如下:

package com.viewsky.ws.servlet;

 

import java.io.IOException;

import java.io.PrintWriter;

 

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.springframework.web.context.WebApplicationContext;

import org.springframework.web.context.support.WebApplicationContextUtils;

 

import com.viewsky.bean.User;

import com.viewsky.service.IUserService;

 

public class TestUserServiceServlet extends HttpServlet

{       

         @Override

         protected void doGet(HttpServletRequest req, HttpServletResponse resp)

                            throws ServletException, IOException

         {

                   doPost(req, resp);

         }

        

         @Override

         protected void doPost(HttpServletRequest req, HttpServletResponse resp)

                            throws ServletException, IOException

         {

                   resp.setCharacterEncoding("GBK");

                  

                   ServletContext application;  

        WebApplicationContext wac;  

        application = getServletContext();  

        wac = WebApplicationContextUtils.getWebApplicationContext(application);

       

                   IUserService userService = (IUserService) wac.getBean("testWebService");

                   User user = new User();

                   user.setUsername("lcrystal");

                   user.setAge(27);

                   try

                   {

                            user = userService.findUserHobby(user);

                   }

                   catch(Exception e)

                   {

                            e.printStackTrace();

                   }

                   PrintWriter out = resp.getWriter();

                   out.println(user);             

         }       

}

发布客户端就可以看到利用WebService提供的服务了。需要特别说明的是,在我自己的机子上,同时发布ServerCient是不成功的,只能把ServerClient部署到不同的机器上,这样就可以看到效果了。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值