用XFire 实现webservice

Web Services:是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务(来自百度百科,详情请移步http://baike.baidu.com/view/837392.htm)。

在构建和使用Web Service时,主要用到以下几个关键的技术和规则:

  1.XML:这个大家都很熟悉了,不多说。
  2.SOAP: 全称为 简单对象访问协议(Simple Object Access Protocol),主要用来交换WEB服务信息。
  3.WSDL:Web服务描述语言,用来详细说明webservice的接口信息.
  4.UDDI(Universal Description, Discovery and Integration):通用描述、发现与集成,它是一种独立于平台的,基于XML语言的用于在互联网上描述商务的协议,主要对Web services 进行注册和搜索。我们的webservice主要就是通过它来实现功能的。

好了,话不多说,跨平台的咱就不多少了,在这里我们主要说说用java来实现webservice,我们简单模拟一个商城和支付的两个系统的调用,主要分三步:

      一、我们要去下载xfire包,http://xfire.codehaus.org/Download,这里下载,解压之后把xfire-all-1.2.6.jar和lib文件夹下的jar包都准备好,这些都是我们需要的。

     二、开发服务器端。

1、新建web项目,命名为WSService,导入刚才的jar包。

2、新建一个接口,命名为com.webservice.ws.PayService,其中只有一个方法。其代码如下:

package com.webservice.ws;

public interface PayService {
	
	public int pay(String name,double money);
	
}

    3、实现这个接口,其实现类是com.webservice.ws.impl.PayServiceImpl,其代码如下:

package com.webservice.ws.impl;


import com.webservice.ws.PayService;

public class PayServiceImpl implements PayService {

	public int pay(String name, double money) {
		
		if("admin".equals(name)){//判断用户名是否正确,(当然,数据应该从数据库来,我们这里只是模拟)

			if(money < 2000){//判断余额是否足够,如果小于2000,则不足,返回1
				return 1;
			}else{
				return 2;//余额足够,返回2
			}
			
		}

		return 0;//用户名不正确,返回0
	}
}

4、在项目的src目录下新建META-INF文件夹,下面新建xfire文件夹,在xfire下新建services.xml文件,结构目录如下图所示

                               

 services.xml用来发布接口,其代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns='http://xfire.codehaus.org/config/1.0' >
	<service>
		<name>PayService</name>
		<serviceClass>com.webservice.ws.PayService</serviceClass>
		<implementationClass>com.webservice.ws.impl.PayServiceImpl</implementationClass>
	</service>
</beans>
5、最后,在web.xml中配置拦截,一般都是用servlet进行配置,其代码如下:

<servlet>
		<servlet-name>xfireservlet</servlet-name>
		<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>xfireservlet</servlet-name>
		<url-pattern>/services/*</url-pattern>
	</servlet-mapping>

好了,现在我们的webservice的服务器端就配置好了,我们可以进行发布访问了。访问

http://127.0.0.1:8081/WSService/services/PayService?wsdl,就可以看见配置信息了,wsdl就是用在这里的,用来详细说明webservice的接口信息,这里描述了我们刚才发布的那个接口,
三、开发客户端程序。我们这里用一个方法来模拟客户端程序,对刚才的服务器发布的接口进行调用。

1、新建一个项目,因为webservice是跨平台的分布式应用,所以这里用什么项目都可以,我们就用普通的java项目好了,命名为WSClient。

2、导入jar包。在项目的src下新建lib目录,将第一步的jar包导入,添加到path路径中。

3、新建一个和服务器端一样的接口。实际项目中根据WSDL可以建立,因为在wsdl文件中我们已经拿到了所需要的接口名称、返回值类型和参数列表了,代码和第二部一样,我们就不贴了。

4、实现类,对接口进行调用,代码如下:

package com.webservice.cs;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;

public class Test {
	public static void main(String[] args) {
		//这个url是服务器发布的接口的地址,也是我们在WSDL中可以看见的,直接复制过来即可。
		String url="http://127.0.0.1:8081/WSService/services/PayService";
		//新建Service服务接口模板
		Service service = new ObjectServiceFactory().create(PayService.class);
		//创建代理工厂
		XFireProxyFactory factory = new XFireProxyFactory( XFireFactory.newInstance().getXFire());
		try {
			//在这里调用方法
			PayService ps = (PayService) factory.create(service, url);
			String name="admin";
			double money = 2100;
			int rs = ps.pay(name, money);
			switch (rs) {
			case 0:
				System.out.println("用户名不存在,请核实");
				break;
			case 1:
				System.out.println("支付成功");
				break;
			case 2:
				System.out.println("支付失败【余额不足】");
				break;
			default:
				System.out.println("支付失败【原因未知】");
				break;
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}
最后运行程序,就能看到运行结果了。在这里,用一个项目去调用另外一个项目,写的比较简单,只有一个方法,但是在实际项目中是一样的用法。

好了,webservice就先写这么多,以后有需求再进行补充。


posted @ 2012-04-23 12:54  Cilimer  阅读(210)  评论(0编辑  收藏  举报