Web service学习心得
一、Web Service的概念
异构平台
EAI:企业应用集成或整合,是一种在企业中集成应用程序和数据以便达到自动业务处理的规则。IDC统计,过去10年,全球信息系统投资了18万亿美元。一家典型的大型企业平均有49个系统,大部分不能互联互通,形成信息孤岛。集成广度:部门内部、部门之间、企业级信息系统集成、与合作伙伴;集成深度:数据集成、应用系统集成、业务流程集成。如微软BizTalk Server。EAI五个技术层面:
接口:与平台组件模型或应用程序变成接口实现互操作。
转换:数据格式之间的映射。
传输:点到点或消息如发行/预订。
服务:处理速度有快慢如用消息队列,消息优先、交易的完整性。
业务处理过程支持:定义消息规则、智能路由
SOA:面向服务的集成(SOI),或SOA(service-oriented architecture)为了解决在Internet环境下业务集成的需要,SOA不是一种语言,也不是一种具体的技术而是一种软件系统架构,它更像一种模式(Pattern)。在于解决在Internet环境下的不同商业应用之间的业务集成问题。常用实现如web服务器,webService。SOA三大基本特征
独立的功能实体:传统的组件技术,如EJB,COM或者CORBA,都需要有一个宿主(Host或者Server)来存放和管理这些功能实体;当宿主本身或者其它功能部分出现问题的时候,在该宿主上运行的其它应用服务就会受到影响。SOA架构中非常强调实体自我管理和恢复能力。常见的用来进行自我恢复的技术,比如事务处理(Transaction),消息队列(Message Queue),冗余部署(Redundant Deployment)和集群系统(Cluster)在SOA中都起到至关重要的作用。
大数据量低频率访问:EJB或者XML-RPC这些传统的分布式计算模型而言,他们的服务提供都是通过函数调用的方式进行的,一个功能的完成往往需要通过客户端和服务器来回很多次函数调用才能完成。因此SOA系统推荐采用大数据量的方式一次性进行信息交换。
基于文本的消息传递:由于Internet中大量异构系统的存在决定了SOA系统必须采用基于文本而非二进制的消息传递方式。在COM、CORBA这些传统的组件模型中,从服务器端传往客户端的是一个二进制编码的对象。
基于异构平台的互联互通,微软、IBM各自提出了软件部件的接口标准,其中最有代表性的有以下几种:
Microsoft提出的组件对象模型/分布式组件对象模型COM/DCOM,现在已演变成为.NET;不支持异构平台,故不是开放式组件,必须依赖web service封装。
OMG标准组织提出的CORBA:开放式组件。
Sun提出的EJB(具体参见EJB3.0学习心得+http://student.csdn.net/space.php?uid=40568&do=blog&id=4129),现已朝着Sun One/j2ee演变;EJB虽然是分布式组件,但不支持异构平台,故不是开放式组件,必须依赖web service封装。
WebService
不同的平台和操作系统上的Web Service的实现,这就使异构平台上应用的集成变得很容易。
实现不同应用的接口,进行相应调试;实际运行,应用程序间进行协同调试。
二、Web Service简介
定义
Web Service是为实现“基于web无缝集成”的目标,能够用“软件-软件对话”的方式相互调用。是构建互联网分布式系统的基本部件。是企业应用集成(Enterprise Application Integration)的有效平台。是一种新的Web应用程序分支,它们是自包含、自描述,模块化的应用,可以在网络中被描述、发布、查找以及通过Web调用。
Web service 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API. 是一个能通过网络,特别是互联网来描述、发布、定位及调用的服务
各式各样的Web Service解决方案
Sun : java
Microsoft : .NET
SOAP协议
Web Service通过标准通信协议用SOAP来作通信协议。
Simple Object Access Protocol-V1.2简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML和http的协议,前身是XML-RPC 基于XML 的远程方法调用。
它包括四个部分:SOAP封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则表示应用程序需要使用的数据类型的实例; SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定;SOAP绑定(binding)使用底层协议交换信息。
SOAP共支持四种消息传递模式:RPC/Literal 、Document/Literal 、RPC/Encoded 和Document/Encoded模式,远程调用方式是对象封装的访问方式,而Document则是文本方式。
SOAP=RPC(document)+HTTP+XML
WSDL
Web Service提供一份详细的接口说明书,来帮助用户构建应用程序,这个接口说明书叫作WSDL
WSDL:(Web Service Description Language)-V3.0是一种XML文档,用于描述服务端所提供哪些服务,即提供的调用方法,以及调用时所要遵循的格式,比如调用参数和返回值的格式等等。这样便于与异构平台下的客户端进行通信
UDDI
通常已发布的Web Service要注册到管理服务器,这样便于使用者查询和使用。这个是通过UDDI(Universal Discovery Description and Integration V1.2)来完成的。
UDDI可以比喻成电话本,电话本里记录的是电话信息,而UDDI记录的是Web Service信息。你可以不把Web Service注册到UDDI。但如果要让全球的人知道你的Web Service,最好还是注册到UDDI。
UDDI目录说明文件也是一个XML文档,它包括三个部分。“白页(White Paper)”说明提供Web Service的公司(人)信息,比如说名称、地址和联系方式等等。“黄页(Yellow Paper)”说明UDDI目录的分类,比如说金融、服务和印刷等等。“绿页(green Paper)”说明接口(Web Service 提供的)的详细信息。
WS-Inspection
Web Services Inspection Language (WS-Inspection) 1.0:web service查找语言,获取网络上的 Web Services有关訊息更加简单。
JAX-WS
Java API for XML-Based Web Services (JAX-WS) 2.0:JAX-RPC1.1的后续发行版本,简化了使用 Java 技术开发 Web 服务的工作。使用 JAXB 2.0 提供数据绑定服务,我们可以仅仅使用简单的Annotations注释从一个Java类创建Web Services;随后,我们在调用这个服务的时候使用JAX-WS2.0。
JAX-RPC
Java API for XML-Based RPC (JAX-RPC) 1.1:JAX-RPC 定义并使用了一种基于 XML 的远程过程调用机制。它使服务器(即服务提供者)能够用标准的 API 定义其服务并且能够用 WSDL 描述其服务;它使客户机(即服务消费者)能够用标准的 API 与服务器进行通信。
JAXB
Java Architecture for XML Binding (JAXB) 2.0:是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。
SAAJ
SOAP with Attachments API for Java (SAAJ )1.2:对webService服务的访问即发送和接收soap消息有SAAJ、基于Java API for XML 的RPC(JAX-RPC)和Web服务调用框架(WSIF)。SAAJ是支持带附件的SOAP消息的基于XML消息传递的API规范。JAXM 1.0的理念是通过提供消息传递和SOAP API编写支持消息传递标准的业务应用程序。随着JAXM 1.1版的推出,SOAP API (javax.xml.soap)被分割成了SAAJ1.1规范和JAXM1.1,JAXM1.1只包含基于消息传递的API(javax.xml.messaging)。SAAJ 1.2 API主要由javax.xml.soap包组成。
StAX
Streaming API for XML(StAX):DOM或简单的API for XML(SAX)来分析XML文档。其中DOM分析之前创建一个完整的XML文档的内存结构消耗大量的内存,SAX 实例了一种推分析模型API,分析器不断地生成事件,直到XML文档被完全分析结束。XML的流式API(StAX)是一种针对XML的流式拉分析API,是JDK6.0提供的一种新特征,它是由应用程序生成的,代码更简单比推分析有更少的库,客户端能同时读多个XML文档,允许你过滤XML文档并且跳过分析事件。
Web Services Metadata
Web Services Metadata for the Java Platform:Web Services Metadata详细说明了Annotations的使用,对于Java开发者来说,比起通过WSDL文件创建Web Service来说通过Java类使用Annotation是创建Web Services更加自然的方法
SOAP引擎
SOAP引擎有:xfile,axis
XFire 是 codeHaus 组织提供的一个开源框架,它构建了 POJO 和 SOA 之间的桥梁,主要特性就是支持将 POJO 通过非常简单的方式发布成 Web 服务,这种处理方式不仅充分发挥了 POJO 的作用,简化了 Java 应用转化为 Web 服务的步骤和过程,也直接降低了 SOA 的实现难度,为企业转向 SOA 架构提供了一种简单可行的方式。
Axis全称Apache eXtensible Interaction System,是apache组织下的一个开源项目,有java/c++实现,其前身最早是IBM的SOAP4J,后来捐给Apache后改名AXIS,支持SOAP1.2等等
UDDI服务
uddi4j是一个JAVA类库,提供了一个API来与web服务UDDI注册中心相结合。UDDI4J得到了HP, IBM和SAP的支持。
jUDDI,发音(Judy),是服务于WebServices 的UDDI的java实现开源包。下载地址:http://ws.apache.org/juddi/releases.html
三、WebService开发步骤
配置Web Service环境Soap
编写服务java或C++
发布到web Service
(可选)注册到UDDI服务器
产生WSDL
客户端利用WSDL调用Web Service服务
1. 首先建立一个webservice project,下一步直到完成
2. 查看对应的web.xml的配置,自动生成了相应的内容
3. 创建一个websercies对外的类的方法。在src上新建-其它-myEclipse-web service-勾上create new javaBean-next-填写web service的名字hello,再填写一个包可以先new一个再填-finish
注意:不要直接选web service,一定是myEclipse下
可以看一下自动创建对应的实现类和接口。也可以改生成的方法。
再看service.xml下自动生成类和对应的配置
4. 部署在tomcat下,和部署web应用一样
5. 测试,通过webservices视图来测试webservices,注意记住开始起的Web Service的名字。
http://localhost:8080/[web应用的名字]/services/[web服务名字]?WSDL
如:http://127.0.0.1:8080/ws/services/hello?WSDL
6. 通过在ie中间来输入地址来测试
http://localhost:8080/[web应用的名字]/services/[web服务名字]?WSDL
如果看到对应的xml文件,就说明正确发布了
7. 注册webService,在uddi中。点击工具栏上的launch webservice explorer-点击右上角的wsdl page-再单击左边栏上的wsdl main-再填写右边栏上的wsdl url,即刚才我们请求过的URL-点击go-左边有类的所有暴露的方法-点击方法可以在右边进行测试
8. 导出wsdl文件,供客户端调用。点击左边的URL地址-在右边的other actions-import wsdl to fileSystem或workbench即可,这时在工程目录下即可看到多了一个wsdl文件,这个是描述了客户端如何使用与webservice通信
9. 建立测试客户端来进行测试
建立一个java工程
拷贝这个wsdl文件在这个工程目录下
然后new-other-web service(注意勾上show all wizards)-web serivice客户端-next-选择刚才的wsdl文件(在工程或文件夹下)-再next-完成即可
这时注意看src下生成了很多的类,我们在HelloPortTypeProxy写个main方法即可测试,也可以自己再写一个类来测试
HelloPortTypeProxy proxy = new HelloPortTypeProxy();
proxy.getHello("你好,webService!");
10. 功能加强,用webService传javaBean对象;
定义一个接口: public UserBean getUser();
其实wsdl中会将这个对象定义成一个复杂的数据类型,根本不用担心传不了。
小小心得,不足之处还望指正