Webservice理解和使用小记
最近,需要通过Webservice访问不同的数据接口,也试用了不同方式的调用webservice服务。在这里简单整理,做下笔录,供参考和备忘。博文主要参考了《彻底理解webservice SOAP WSDL》(http://www.voidcn.com/article/p-ryejjwwh-ry.html)?、《Web Services 中XML、SOAP和WSDL的一些必要知识》(http://www.voidcn.com/article/p-ybeojeuk-bhm.html)和《JAVA的 WebService规范 JAX-WS实现例子 一、Webservice的理解 1.概念:Web 服务定义了如何在异构系统之间实现通信的标准化方法,从而就使得 Web 服务可以跨越运行平台和实现语言,同时也使得 Web 服务成为了实现 SOA 中服务的主要技术。Web Services 是由xml来定义数据格式的,通过SOAP协议(可类似看做Http协议)在各个系统平台中传输。 在Web?服务的体系结构中,涉及到三个角色,一个是 Web?服务提供者(即服务器端),一个是 Web 服务中介者(即代理),还有一个就是 Web 服务请求者(客户端),同时还涉及到三类动作,即发布,查找,绑定。 2.Webservice的主要元素 (1)SOAP? SOAP?即 Simple Object AccessProtocol?也就是简单对象访问协议,是一种用于访问 Web 服务的协议。SOAP 基于XML 和 HTTP ,其通过XML 来实现消息描述,然后再通过 HTTP 实现消息传输,用于在应用程序之间进行通信的一种通信协议,因为是基于 XML 和HTTP 的,所以其独立于语言,独立于平台,并且扩展性很好。SOAP 协议的一个重要特点是它独立于底层传输机制,Web 服务应用程序可以根据需要选择自己的数据传输协议,可以在发送消息时来确定相应传输机制。 一个典型的SOAP请求格式的结构如下: (2)WSDL?
WSDL?即Web Services Description Language也就是 Web 服务描述语言,是基于 XML的用于描述 Web 服务以及如何访问 Web 服务的语言。服务提供者通过服务描述将所有用于访问 Web服务的规范传送给服务请求者,要实现 Web服务体系结构的松散耦合,服务描述是一个关键,不管是请求者还是服务提供者,通过服务描述便可以不必了解对方的底层平台,编程语言等,服务描述与底层的 SOAP?基础结构相结合,足以封装服务请求者的应用程序和服务提供者的 Web服务之间的这个细节。 WSDL?描述了 Web服务的三个基本属性:服务所提供的操作、如何访问服务、服务位于何处(URL地址) WSDL是用来描述WebService的,它用XML的格式描述了WebService有哪些方法、参数类型、访问路径等等。我们要使用一个WebService肯定首先要获取它的WSDL,这些工作由开发环境帮我们做了,开发环境根据WSDL文档给Web Service生成了相应的代理类供我们使用。 3.Webservice使用 Web 服务分为Server和Client 两部分,Server 公开Web 服务,Client 调用Web 服务,JAX-WS 的服务端、客户端双方传输数据使用的SOAP 消息格式封装数据。 (1)整体流程 引入cxf相关jar包 公开Webservice服务接口、接口实现类、涉及的实体类、发布Web服务、访问和查看WSDL和客户端调用。 (2)创建服务端 定义接口及其实现类,并加上Webservice注解。 @WebService ?@XmlRootElement(name = "XXX") ?Endpoint.publish("http://127.0.0.1:8080/XXXService",new XXXServiceImpl()); (3)客户端请求服务 Web 服务只向客户端暴漏WSDL,那么客户端必须将WSDL 转换为自己的编程语言书写的代码.JAX-WS 的各种实现都提供相应的工具进行WSDL 与JAVA 之间的互相转换,你可以在CXF 的运行包中找到bin 目录,其中的wsdl2java.bat 可以将WSDL转换为JAVA 类,bin 目录的各种bat 的名字可以很容易知道其作用,但要注意JAVA 类转换为WSDL 最好使用前面的URL?wsdl 的方式获得,因为这样得到的是最准确的.你可以在命令行将当前目录切换到CXF 的bin 目录,然后运行wsdl2java –h 查看这个批处理命令的各个参数的作用,常用的方式就是 wsdljava –p 包路径 –d 目标文件夹 wsdl 的 url地址.现在我们将前面的WSDL生成客户端代码: wsdl2java -p com.xx.xxx.xxx –d E: http://127.0.0.1:8080/xxxService?wsdl 如果你使用Eclipse的新建工程方式,可以按照如下步骤从WSDL 生成客户端代码: New--->Other--->Eclipse--->Web Services--->Web Services Client,然后依据设置向导即可完成。 在 CXF 中使用JaxWsProxyFactoryBean 客户端代理工厂调用Web 服务。如果跟spring框架结合的话,可以通过application-context.xml进行配置,主要是服务类位置和服务地址,调用时直接得到对应的bean,然后直接调用方法。 也可以直接在程序代码中来创建代理工厂类调用服务,如下来调用: JaxWsProxyFactoryBean soapFactoryBean = new JaxWsProxyFactoryBean(); 大致应用了以上提到的几种方式,后续还需去仔细体会Webservice这种服务方式,再补充。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |