zoukankan      html  css  js  c++  java
  • 用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就先写这么多,以后有需求再进行补充。


  • 相关阅读:
    JavaScript设计模式与开发实践——读书笔记1.高阶函数(下)
    JavaScript设计模式与开发实践——读书笔记1.高阶函数(上)
    js 去除字符串中的空格
    js 运算符 || && 妙用
    判断一个js对象是不是数组
    Javascript中的异步
    js异步处理工作机制(setTimeout, setInterval)
    移动端html页面优化
    编写高效的jQuery代码
    JavaScript学习笔记 isPrototypeOf和hasOwnProperty使用区别
  • 原文地址:https://www.cnblogs.com/Cilimer/p/4075215.html
Copyright © 2011-2022 走看看