WebService 基础

来源:互联网 发布:广联达软件视频教学 编辑:程序博客网 时间:2024/05/20 20:58

  • WebService 是什么
  • SOAP通讯协议
  • WebService 调用原理
  • WSDL
    • Wsdl文档解读
    • 获取Wsdl
    • Wsdl 生成java代码
    • CXF 项目获取客户端代码
    • 通过XSD文件生成JavaBean
  • WebService 发布
    • Notices
  • WebService 场景应用
    • 跨越防火墙通信
    • 应用程序集成
    • 软件复用

WebService 是什么?

webservice是一种跨编程语言和跨操作系统平台的远程调用技术.

跨编程语言就是服务端程序采用Java语言编写,客户端程序则可以采用其他编程语言编写,反之亦然.
所谓的跨操作系统平台就是服务端程序和客户端程序可以在不同的操作系统平台上运行.

除了webservice外,常用的远程调用技术还有RMI(Remote Method Invoke)和CORBA,由于webservice的跨编程语言和跨平台的特点,因此比其他两种技术应用更为广泛,但性能略低.

SOAP(通讯协议)

Simple Object Accrss Protocol,简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议,它包括四个部分:

  • SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它,以及如何处理它们的框架;
  • SOAP编码规则,用于表示应用程序需要使用的数据类型的实例
  • SOAP RPC 表示远程过程调用和应答的协定。
  • SOAP绑定(binding),使用底层协议交换信息。

WebService 调用原理

WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么)。

WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议(simple object access protocol,简单对象访问协议) 。

SOAP协议 = HTTP协议 + XML数据格式 SOAP协议是基于HTTP协议的,两者的关系就好比高速公路是基于普通公路改造的,在一条公路上加上隔离栏后就成了高速公路。

商店的服务员只要收到了钱就给客户提供货物,商店服务员不用关心客户是什么性质的人,客户也不用关心商店服务员是什么性质的人。同样, WebService客户端只要能使用HTTP协议把遵循某种格式的XML请求数据发送给WebService服务器, WebService服务器再通过HTTP协议返回遵循某种格式的XML结果数据就可以了,WebService客户端与服务器端不用关心对方使用的是什么编程语言。

HTTP协议和XML是被广泛使用的通用技术,各种编程语言对HTTP协议和XML这两种技术都提供了很好的支持,WebService客户端与服务器端使用什么编程语言都可以完成SOAP的功能,所以,WebService很容易实现跨编程语言,跨编程语言自然也就跨了操作系统平台。

WSDL

WSDL文件 好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。

WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。

WSDL(webservice description language)是基于XML格式的,它是WebService客户端和服务器端都能理解的标准格式,其中描述的信息可以分为what, where,how等部分! WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。

客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址: 注册到UDDI服务器,以便被人查找 直接告诉给客户端调用者,例如,在自己网站给出信息或邮件告诉。

Wsdl文档解读

  • Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。(入参和出参的数据类型) .
  • Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构(入参和出参).
  • Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对(方法).
  • PortType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持(服务类).
  • Binding - 特定服务访问点与具体服务类的绑定(不看内容,看关系)。.
  • Port - 定义为webservice单个服务访问点。.
  • Service- 相关服务访问点的集合.

获取Wsdl

WebService 的URL + ?wsdl

Wsdl 生成java代码

    wsimport –s . http://xxxx.xx.xx/xxx?wsdl

CXF 项目获取客户端代码

    wsdl2java –d . http://127.0.0.1:6666/helloworld?wsdl

Notes : -s不能分开,-s后面有个小点,用于指定源代码生成的目录。点即当前目录。如果使用了-s参数则会在目录下生成两份代码,一份为.class代码。一份为.java代码.

通过XSD文件生成JavaBean

xjc *.xsd -p *.bean

第一个文件path, 第二个 生成bean的包path

WebService 发布

用Jdk1.6.0_21以后的版本发布一个WebService服务.与Web服务相关的类,都位于javax.xml.ws.*包中.

  • @WebService 它是一个注解,用在类上指定将此类发布成一个webservice服务.
  • Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。Endpoint是jdk提供的一个专门用于发布服务的类,它的publish方法接收两个参数,一个是本地的服务地址,二是提供服务的类。它位于javax.xml.ws.*包中。
    static Endpoint.publish(String address, Object implementor) 在给定地址处针对指定的实现者对象创建并发布端点。stop方法用于停止服务。

Notices

  • 给类添加上@WebService注解后,类中所有的非静态方法都将会对外公布。不支持静态方法,final方法。
  • 如果希望某个方法(非static,非final)不对外公开,可以在方法上添加@WebMethod(exclude=true),阻止对外公开。
  • 如果一个类上,被添加了@WebService注解,则必须此类至少有一个可以公开的方法,否则将会启动失败。
  • 服务类中不能没有方法
  • @WebMethod(exclude=true)屏蔽方法

WebService 场景应用

跨越防火墙通信

客户端和服务器端之间通信都会有防火墙或者代理服务器。传统的实现互相通信的方法是在分布式对象,如DCOM、CORBA之间进行相互的远程过程调用(TCP/IP),但在这种场合下HTTP协议的特性没有得到应用,因此在Internet环境下的远程过程调用不是一件容易的事情,同时在Internet上使用远程过程调用还存在安全问题,防火墙和代理服务器还有可能阻挡这种类型的数据传输。HTTP是在Internet上发送消息的标准协议。Web服务使用基于XML消息处理作为基本的数据通信方式,应用程序可以使用HTTP和XML消息等标准在基于Web的应用程序之间交换信息,从而跨越防火墙.

应用程序集成

企业里经常要把不同语言写成的在不同平台上运行的各种程序集成起来。大型公司常常有很多部门,每个部门都使用最适合自己特定需要的应用程序和平台。为了能够让公司各部门之间进行通信,首先应该将公司内部的应用程序和商业过程集成在一起。Web服务的开放标准使组织创建可重用的应用程序接口。当被包装成一个或一组Web服务之后,任何应用程序理论上都可以通过SOAP消息与任何其他应用程序进行通信

软件复用

软件复用是在软件开发中避免重复劳动的解决方案。Web服务实现了业务级别的软件复用,例如在B2B的集成中,各企业之间通过互相调用Web服务,实现了Web服务的共享,Web服务的使用企业不需要再重新开发其他企业中已经存在的服务.