什么是webservice
webservice是SOA面向服务编程的一种实现;
主要是用来实现易购平台通信,也就是不同平台不同项目之间的数据传输,从而避免信息孤岛的问题,它之所以能够进行易购平台通信是因为它完全是基于xml的,所以说,webservice是跨平台的,跨语言,跨框架的~
在java中通常有三种技术框架分别是xfire,cxf,axis2,为了保证webservice的安全性我们采用了基于ws-Security标准的安全验证(使用回调函数)
webservice的三要素
- wsdl (webservice description language):用来描述发布的接口(服务)
- soap(simple object access protocol) :xml和http的结合,是webservice的数据通信协议
- uddi:用来管理,查询webservice的服务
webservice三种实现方式
三种技术框架的区别
[注]:jdk1.6 自带的webservice jws
- Axis2: 可以用多种语言开发,是一个重量级的框架,功能非常强大,但是它的性能比较低
- xfire: 它相比于Axis2来说是一个轻量级的框架,它的性能要比Axis2高
- cxf:是xfire的升级版,就好比是,struts是webwork的升级,然后cxf和spring集成非常方便,简易,性能方面也要比xfire高
webservice服务端配置流程
- 首先在web.xml中引入cxfServlet核心类
- 指定以/cxf开头的url路径提供webservice服务
- 在要发布的webservice接口添加@webservice注解
- 在实现类添加同样的webservice注解并且说明实现那个接口
- 在spring-webservice.xml中发布webservice服务
- 通过jaxws:endpoint这个标签,在标签配置implementor和address来表明实现服务的类以及发布的地址
- 最后在浏览器中输入相关的webservice地址?wsdl来验证服务是否发布成功
webservice客户端的配置
- 首先通过wsdl2java根据发布的webservice服务端地址的wsdl生成客户端调用的中间桥梁Java类
- 将生成的java类拷贝到客户端项目中
- 配置spring-client.xml文件
- 通过jaxws:client定义一个bean
- 通过address属性指明要访问的webservice的服务地址
- 通过serviceClass指明充当中间桥梁的服务类,
- 之后获取该bean,就可以通过它来访问发布的webservice接口的方法
webservice的业务场景
例如:我之前做项目时候,遇到一个功能是需要进行两个项目之间的数据的传输
我们老大让我去完成这个任务,我根据以往的项目经验想要两种解决方案:第一种就是开放另外一个项目的数据库权限给我,然后我直接通过访问另外一个项目的数据库,来得到需要的信息,但后来进过分析,觉得这种方式不安全,而且当时这个项目是另外一家公司负责在做,所以数据库里边的表结构,以及以后牵涉到的责任问题有很多,所以我最终采用第二种方案,就是通过webservice的方式,进行易购系统之间的数据的传递,webservice的具体事项,有xfire,cxf,axis2,我根据以往的项目经验,了解到cxf是xfire的升级版本,适用于java语言,xfire/cxf性能要比axis2高,并且和spring整合起来比较方便,而axis2支持更多的原因,性能相对于cxf要低,通过上面的分析,综合我们目前的两个项目都是基于java语言,所以我采用cxf方式实现两个项目之间数据的传递,我们为了保证webservice的安全性我们采用了基于ws-Security标准的安全验证(使用CXF回调函数)