使用XFire+Spring构建Web Service(二)

  《使用XFire+Spring构建Web Service(一)——helloWorld篇》 文中我们通过一个简单的XFire+Spring 实例,该实例的sayHelloWorld() 方法通过传入一个字符串参数来返回一个字符串,而实际的应用过程中,遇到的情况比这个要复杂得多,例如,传入参数是对象、返回自定义对象、返回数组、返回列表。下面让我们在此文中对XFire+Spring 进行更深层的探讨吧。

一.             本例概述

在本例中,我们将在业务逻辑类是一个用户的业务逻辑类,包括创建用户、获取单个用户、获取用户数组、获取用户列表四个方法,因该文讲的是XFire+Spring构建webservice,所以在该例中我们并不涉及具体的数据库操作,而只是提供模拟实现。方法描述如下:

1) 创建用户方法:createUser(User user)

通过传入User对象作为参数来才创建用户;

2) 通过用户名获取用户信息方法:getUser(String loginName)

根据用户名获取某用户对象,该方法返回的是一个User对象;

3) 返回所有用户的数组方法:getUserArray()

返回为User数组;

4) 返回所有用户的列表的方法:getUserList()

返回为List对象,放入的对象为User类型。

二.             数据对象User.java

在上篇的例子中,src/webservice目录下新建example2目录,并在example2目录下建立User.java文件,下面看看数据对象User.java的内容,代码如下:

package  webservice.example2;

import  java.util.Date;

/** */ /**
 *用户对象.  
 *
@author <a href="mailto:[email protected]">AmigoXie</a>
 *@version1.0
 *Creationdate:2007-9-28-上午10:42:44
 
*/
publicclass User 
implements  java.io.Serializable  {
    privatestaticfinallongserialVersionUID 
=   1L ;

    
/** */ /** 用户名 */
    
private  String loginName;

    
/** */ /** 用户密码 */
    
private  String password;

    
/** */ /** 手机号 */
    
private  String mobile;

    
/** */ /** 创建时间 */
    
private  Date createTime;

    
public  Date getCreateTime()  {
       
return  createTime;
    }


    
public   void  setCreateTime(Date createTime)  {
       
this .createTime  =  createTime;
    }


    
public  String getLoginName()  {
       
return  loginName;
    }


    
public   void  setLoginName(String loginName)  {
       
this .loginName  =  loginName;
    }


    
public  String getMobile()  {
       
return  mobile;
    }


    
public   void  setMobile(String mobile)  {
       
this .mobile  =  mobile;

    }


    
public  String getPassword()  {
       
return  password;
    }


    
public   void  setPassword(String password)  {
       
this .password  =  password;
    }


    
public  String toString()  {
       StringBuffer sb 
=   new  StringBuffer();
       sb.append(
" loginName= "   +   this .loginName);
       sb.append(
" |password= "   +   this .password);
       sb.append(
" |mobile= "   +   this .mobile);
       sb.append(
" |createDate= "   +   this .createTime);
       
return  sb.toString();
    }

}


三.             用户业务类UserService.java及其实现UserServiceImpl.java

下面让我们来看看本例的业务逻辑接口类UserService.java的内容:

package  webservice.example2;

import  java.util.List;

/** */ /**
 *用户业务类.
 *
@author <a href="mailto:[email protected]">AmigoXie</a>
 *@version1.0
 *Creationdate:2007-9-28-上午10:37:09
 
*/
publicinterface UserService 
{
    
/** */ /**
     *获取用户对象.
     *@paramloginName用户名
     *@return返回用户对象
     
*/
    
public  User getUser(String loginName);

    
/** */ /**
     *创建用户.
     *@paramuser用户对象
     *@return返回创建的对象的toString()方法返回的内容
     
*/
    
public  String createUser(User user);

    
/** */ /**
     *获取用户信息数组.
     *@return返回用户信息数组
     
*/
    
public  User[] getUserArray();
    
    
/** */ /**
     *获得用户信息列表.
     *@return返回用户信息列表
     *
@author <a href="mailto:[email protected]">AmigoXie</a>
     *Creationdate:2007-9-28-下午12:55:37
     
*/
    
public  List < User >  getUserList();
}


它的实现类UserServiceImpl.java的内容如下:

package  webservice.example2;

import  java.util.ArrayList;
import  java.util.Date;
import  java.util.List;

/** */ /**
 *用户业务实现类.
 *
@author <a href="mailto:[email protected]">AmigoXie</a>
 *@version1.0
 *Creationdate:2007-9-28-上午10:54:11
 
*/
publicclass UserServiceImpl 
implements  UserService  {
    
/** */ /**
     *获取用户对象.
     *@paramloginName用户名
     *@return返回用户对象
     
*/
    
public  User getUser(String loginName)  {
       User user 
=   new  User();
       user.setLoginName(loginName);
       user.setPassword(
" 12345678 " );
       user.setMobile(
" 13812345678 " );
       user.setCreateTime(
new  Date());
       
return  user;
    }


    
/** */ /**
     *创建用户.
     *@paramuser用户对象
     *@return返回创建的对象的toString()方法返回的内容
     
*/
    
public  String createUser(User user)  {
       user.setCreateTime(
new  Date());
       
return  user.toString();
    }


    
/** */ /**
     *获取用户信息数组.
     *@return返回用户信息数组
     
*/
    
public  User[] getUserArray()  {
       User[] userList 
=   new  User[ 4 ];
       userList[
0 =  getUser( " 阿蜜果 " );
       userList[
1 =  getUser( " sterning " );
       userList[
2 =  getUser( " 娟子 " );
       userList[
3 =  getUser( " 老肖 " );
       
return  userList;
    }


    
/** */ /**
     *获得用户信息列表.
     *@return返回用户信息列表
     *
@author <a href="mailto:[email protected]">AmigoXie</a>
     *Creationdate:2007-9-28-下午12:55:37
     
*/
    
public  List < User >  getUserList()  {
       List
< User >  userList  =   new  ArrayList < User > ();
       userList.add(getUser(
" 阿蜜果 " ));
       userList.add(getUser(
" sterning " ));
       userList.add(getUser(
" 娟子 " ));
       userList.add(getUser(
" 老肖 " ));
       
return  userList;
    }

}

注意:getUserList()方法返回的List中需要采用泛型,不然会部署失败。

到此为止,我们的业务已经完成,剩下的工作只是修改配置文件和编写测试类来进行测试。让我们继续往下走吧。

四.             配置文件applicationContext.xmlxfire-servlet.xml的修改

在本小节中,我们需要修改配置文件。首先在applicationContext.xml文件中添加用户逻辑bean的定义,添加的代码如下:

<bean id="UserBean" class="webservice.example2.UserServiceImpl"/>

接下来我们还需要修改xfire-servlet.xml文件来暴露我们的Web Service,修改后的该文件内容如下所示:

<entry key="/UserService.ws">                    

<ref bean="UserService" />                

</entry>

并添加如下bean的定义:

< bean  id ="UserService"  parent ="baseWebService" >
       
<!--  业务服务bean  -->
       
< property  name ="serviceBean"  ref ="UserBean"   />
       
<!--  业务服务bean的窄接口类  -->
       
< property  name ="serviceClass"  value ="webservice.example2.UserService"   />
    
</ bean >

   我们的Web Service已经开发完成,启动本项目后,可通过浏览器访问:http://localhost:8080/webservice_helloworld/UserService.ws?wsdl,我们可以在浏览器中看到该例的WSDL信息。

五.             Web Service测试

在本小节我们将对上述完成的Web Service进行测试,首先我们在src目录下的client.xml文件增加如下内容:

<!--  获取用户信息的例子  -->
     
< bean  id ="testUserWebService"  class ="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean" >
       
< property  name ="serviceClass" >                < value > webservice.example2.UserService </ value >  
       
</ property >       
        
< property  name ="wsdlDocumentUrl" >          
< value > http://localhost:8080/webservice_helloworld/UserService.ws?wsdl </ value >        
        
</ property >       
     
</ bean >

     接着我们在src/test目录下建立UserServiceClientTest.java类,编写测试代码如下:

package  test;

import  java.util.List;

import  org.springframework.context.ApplicationContext;
import  org.springframework.context.support.ClassPathXmlApplicationContext;

import  webservice.example2.User;
import  webservice.example2.UserService;

/** */ /**
 * 用户业务测试类.    
 * 
@author  <a href="mailto:[email protected]">AmigoXie</a>
 * 
@version  1.0
 * Creation date: 2007-9-28 - 下午12:03:06
 
*/
public   class  UserServiceClientTest  {
    
public   static   void  main(String[] args)  throws  Exception  {
        UserServiceClientTest test 
=   new  UserServiceClientTest();
        test.testClient();
    }
 
    
    
public   void  testClient()  throws  Exception  {
        ApplicationContext ctx 
=   new  ClassPathXmlApplicationContext(
                
" client.xml " );    
        UserService userService 
=  (UserService) ctx.getBean( " testUserWebService " );
        
        
// 测试getUser()方法
        System.out.println( " --------------getUser()------------ " );
        User user 
=  userService.getUser( " 阿蜜果 " );
        System.out.println(user);
        
        
// 测试getArray()方法
        System.out.println( " --------------getUserArray()------------ " );
        User[] userArray 
=  userService.getUserArray();
        
for  ( int  i  =   0 ; i  <  userArray.length; i ++ {
            System.out.println(
" i= "   +  i  +   " | "   +  userArray[i]);
        }

        
        
// 测试createUser()方法
        System.out.println( " --------------createUser()------------ " );
        User newUser 
=   new  User();
        newUser.setLoginName(
" 离离 " );
        newUser.setPassword(
" 123 " );
        newUser.setMobile(
" 13666666666 " );
        String result 
=  userService.createUser(newUser);
        System.out.println(result);
        
        
// 测试getUserList()方法
        List < User >  userList  =  userService.getUserList();
        System.out.println(
" --------------getUserList()------------ " );
        
for  ( int  i  =   0 ; i  <  userList.size(); i ++ {
            System.out.println(
" i= "   +  i  +   " | "   +  userList.get(i));
        }

    }

}

    大家可以运行该类,来查看运行效果。
    运行有问题的人可在此留下你们的email给我,我将这个工程发给你们。

你可能感兴趣的:(web Service)