使用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<ahref="mailto:xiexingxing1121@126.com">AmigoXie</a>
*@version1.0
*Creationdate:2007-9-28-上午10:42:44
*/

publicclassUser
implements java.io.Serializable {
privatestaticfinallongserialVersionUID
=1L;

/***//**用户名*/
privateStringloginName;

/***//**用户密码*/
privateStringpassword;

/***//**手机号*/
privateStringmobile;

/***//**创建时间*/
privateDatecreateTime;

publicDategetCreateTime(){
returncreateTime;
}


publicvoidsetCreateTime(DatecreateTime){
this.createTime=createTime;
}


publicStringgetLoginName(){
returnloginName;
}


publicvoidsetLoginName(StringloginName){
this.loginName=loginName;
}


publicStringgetMobile(){
returnmobile;
}


publicvoidsetMobile(Stringmobile){
this.mobile=mobile;

}


publicStringgetPassword(){
returnpassword;
}


publicvoidsetPassword(Stringpassword){
this.password=password;
}


publicStringtoString(){
StringBuffersb
=newStringBuffer();
sb.append(
"loginName="+this.loginName);
sb.append(
"|password="+this.password);
sb.append(
"|mobile="+this.mobile);
sb.append(
"|createDate="+this.createTime);
returnsb.toString();
}

}


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

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

package webservice.example2;

import java.util.List;

/***/ /**
*用户业务类.
*
@author<ahref="mailto:xiexingxing1121@126.com">AmigoXie</a>
*@version1.0
*Creationdate:2007-9-28-上午10:37:09
*/

publicinterfaceUserService
{
/***//**
*获取用户对象.
*@paramloginName用户名
*@return返回用户对象
*/

publicUsergetUser(StringloginName);

/***//**
*创建用户.
*@paramuser用户对象
*@return返回创建的对象的toString()方法返回的内容
*/

publicStringcreateUser(Useruser);

/***//**
*获取用户信息数组.
*@return返回用户信息数组
*/

publicUser[]getUserArray();

/***//**
*获得用户信息列表.
*@return返回用户信息列表
*
@author<ahref="mailto:xiexingxing1121@126.com">AmigoXie</a>
*Creationdate:2007-9-28-下午12:55:37
*/

publicList<User>getUserList();
}


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

package webservice.example2;

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

/***/ /**
*用户业务实现类.
*
@author<ahref="mailto:xiexingxing1121@126.com">AmigoXie</a>
*@version1.0
*Creationdate:2007-9-28-上午10:54:11
*/

publicclassUserServiceImpl
implements UserService {
/***//**
*获取用户对象.
*@paramloginName用户名
*@return返回用户对象
*/

publicUsergetUser(StringloginName){
Useruser
=newUser();
user.setLoginName(loginName);
user.setPassword(
"12345678");
user.setMobile(
"13812345678");
user.setCreateTime(
newDate());
returnuser;
}


/***//**
*创建用户.
*@paramuser用户对象
*@return返回创建的对象的toString()方法返回的内容
*/

publicStringcreateUser(Useruser){
user.setCreateTime(
newDate());
returnuser.toString();
}


/***//**
*获取用户信息数组.
*@return返回用户信息数组
*/

publicUser[]getUserArray(){
User[]userList
=newUser[4];
userList[
0]=getUser("阿蜜果");
userList[
1]=getUser("sterning");
userList[
2]=getUser("娟子");
userList[
3]=getUser("老肖");
returnuserList;
}


/***//**
*获得用户信息列表.
*@return返回用户信息列表
*
@author<ahref="mailto:xiexingxing1121@126.com">AmigoXie</a>
*Creationdate:2007-9-28-下午12:55:37
*/

publicList<User>getUserList(){
List
<User>userList=newArrayList<User>();
userList.add(getUser(
"阿蜜果"));
userList.add(getUser(
"sterning"));
userList.add(getUser(
"娟子"));
userList.add(getUser(
"老肖"));
returnuserList;
}

}

注意: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<ahref="mailto:xiexingxing1121@126.com">AmigoXie</a>
*
@version1.0
*Creationdate:2007-9-28-下午12:03:06
*/

public class UserServiceClientTest {
publicstaticvoidmain(String[]args)throwsException{
UserServiceClientTesttest
=newUserServiceClientTest();
test.testClient();
}


publicvoidtestClient()throwsException{
ApplicationContextctx
=newClassPathXmlApplicationContext(
"client.xml");
UserServiceuserService
=(UserService)ctx.getBean("testUserWebService");

//测试getUser()方法
System.out.println("--------------getUser()------------");
Useruser
=userService.getUser("阿蜜果");
System.out.println(user);

//测试getArray()方法
System.out.println("--------------getUserArray()------------");
User[]userArray
=userService.getUserArray();
for(inti=0;i<userArray.length;i++){
System.out.println(
"i="+i+"|"+userArray[i]);
}


//测试createUser()方法
System.out.println("--------------createUser()------------");
UsernewUser
=newUser();
newUser.setLoginName(
"离离");
newUser.setPassword(
"123");
newUser.setMobile(
"13666666666");
Stringresult
=userService.createUser(newUser);
System.out.println(result);

//测试getUserList()方法
List<User>userList=userService.getUserList();
System.out.println(
"--------------getUserList()------------");
for(inti=0;i<userList.size();i++){
System.out.println(
"i="+i+"|"+userList.get(i));
}

}

}

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

package com.xfire.core.client; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.codehaus.xfire.client.XFireProxyFactory; import org.codehaus.xfire.service.Service; import org.codehaus.xfire.service.binding.ObjectServiceFactory; import com.xfire.core.entity.UserInfo; import com.xfire.core.service.IUserInfoService; /** *@author jilongliang *@Date 2012-3-5 * */ public class UserInfoClient { public static void main(String[] args) { getServiceList(); setServiceList(); } static String url = "http://localhost:8081/xfire/services/UserInfo"; /** * */ public static void getServiceList() { Service service = new ObjectServiceFactory() .create(IUserInfoService.class); try { IUserInfoService iAddressService = (IUserInfoService) new XFireProxyFactory() .create(service, url); List list = (ArrayList) iAddressService .getAddressList(); System.out.println("一共多少条数据:" + list.size()); for (Iterator iter = list.iterator(); iter.hasNext();) { UserInfo a = iter.next(); System.out.println(a); } } catch (MalformedURLException e) { e.printStackTrace(); } } public static void setServiceList() { Service service = new ObjectServiceFactory() .create(IUserInfoService.class); try { IUserInfoService iAddressService = (IUserInfoService) new XFireProxyFactory() .create(service, url); List listAdd = new ArrayList(); UserInfo address = new UserInfo(); address.setIdentifier(1); address.setCountry("中國"); address.setProivice("廣東省"); address.setCity("陽江"); address.setAddress("廣東陽春"); address.setPostCode("1111111"); address.setExist(false); address.setArrary(new String[] { "22", "23", "24" }); listAdd.add(address); address.setIdentifier(2); address.setCountry("中國"); address.setProivice("廣東省"); address.setCity("陽江"); address.setAddress(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值