用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就先写这么多,以后有需求再进行补充。