Web Service零碎基础知识+采用CXF访问调用Web Service服务

1. Web Service体系结构的三个角色

  • 服务提供者(Service Provider):提供服务的平台,就是服务的生产者。

  • 服务请求者(Service Requester):服务的消费者,需要请求特定功能的企业,就是查找和调用服务的客户端应用程序。

  • 服务代理(Service Broker):服务中介,用来存储服务描述信息的信息库,服务提供方在这里发布服务,服务的请求方在这里查找服务,获取服务的绑定信息。

    (PS:Web Service与SOA的关系是:实现SOA的最常见技术标准是Web Services)

2. Web Service最基本的平台是:XML、HTTP

  • XML:Web Service实现的语言基础是XML,Web Service的其他协议规范都是以XML形式来描述和表达的。

  • HTTP:HTTP为Web Service组件通过Internet交互奠定了协议基础。

3. 基本的Web Service规范:SOAP、WSDL、UDDI

  • SOAP(简单对象访问协议):SOAP提供了一种标准的方法,是基于XML的简易协议,使得运行在不同操作系统并使用不同技术和编码语言的应用程序在HTTP之上进行信息交换。SOAP定义服务请求者与服务提供者之间的消息传输规范,用XML格式化消息,用HTTP承载消息。SOAP包括三部分:
    (1)SOAP封包:定义了描述消息和如何处理消息的框架的封包
    (2)SOAP编码规则:表达应用程序定义的数据类型实例的编码规则
    (3)SOAP RPC 表示:描述远程过程调用和应答的协定

  • WSDL(Web 服务描述语言):WSDL以XML格式描述Web Service以及如何对它们进行访问,是Web服务的接口定义语言。通过WSDL可描述Web服务的三个基本属性:
    (1)服务能做什么(服务所提供的方法)
    (2)服务在哪里(URL)
    (3)如何调用服务(和服务交互的数据格式以及协议)

  • UDDI(统一描述、发现和集成):UDDI是一个主要针对Web服务生产方和请求方的应用。UDDI应用中的成员可以通过UDDI Business Register(UBR)来操作Web Service 的调用,UBR是一个全球性的服务。Web服务商可以通过UDDI提供的标准接口在UBR中描述并注册他们的服务,为了让需要该服务的用户发现和使用它,用户可以在UBR中查找并定位那些需要的服务。

4. Java的Web Service规范——JAX-WS规范
JAX-WS(Java API for XML-Based Web Service)规范:该规范是一组XML Web Service的Java API。JAX-WS规范用于简化使用Java构造Web Service和Web Service客户机的工作的技术。使用JAX-WS,在服务器端,用户只需通过Java语言定义远程调用所需要实现的接口SEI(Service Endpoint Interface),并提供对应的实现,通过调用JAX-WS的服务发布接口就可以将其发布为Web Service接口。在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象替代远程的服务)来实现对于远程服务器端的调用。通过Web Service所提供的互操作环境,开发人员可以用JAX-WS规范轻松实现Java平台与其他编程环境的互操作。
5. 采用CXF访问Web Service

  • 安装CXF
    Apache CXF框架是一个开源的Web Service框架,可以在http://cxf.apache.org/download.html这个下载页面下载,选择Binary distribution中的压缩包,然后配置环境变量(这个网上一大堆的例子,很容易就可以配置)。接下来就是验证CXF是否安装成功,在dos环境下输入wsdl2java命令,出现如下图,就说明安装成功了,下图显示的错误是命令没有带参数。
    在这里插入图片描述
    若安装CXF的时候报错,这时候检查环境变量配置是否有问题,若准确无误,又检查不出具体的问题(我遇到的就是这个问题),则采用低版本的CXF(我从apache-cxf-3.2.6换成apache-cxf-3.1.16后就成功解决了,别忘了更改环境变量)。

  • 创建一个JAX-WS服务项目
    在MyEclipse中new一个名称为cxf的java项目,下图是我已经创建完成的项目结构,接下来会一步一步介绍如何用cxf的方式来访问服务
    在这里插入图片描述
    在新建的项目cxf中添加CXF所依赖的jar包,方法是右键项目——>Build Path——>Configue Build Path…——>Add Enternal JARs…——>找到CXF的安装包,把lib文件夹下的jar包添加进来(jar包比较多,添加的方式是点击第一个jar包按住shift键,再点击最后一个jar包,这样就可以选中所有的jar包,一次性添加~),如下图所示
    在这里插入图片描述

  • 编写服务端程序(接口+实现类)
    在cxf项目下,右键src,然后new一个名为HelloWorld的interface(接口),包名为com.cxf.hello,如下图(忽略Type already exists的错误)
    在这里插入图片描述
    接口创建完成后,定义接口的内容如下
    在这里插入图片描述
    在cxf项目下new一个名为HelloWordImpl的实现类,具体细节如下(忽略提醒的错误,该类已存在)
    在这里插入图片描述
    该实现类的内容如下
    在这里插入图片描述

  • 发布服务
    在cxf项目下创建一个包名为com.cxf.hello.server,类名为server的类来发布服务,具体操作如下(忽略提醒错误)
    在这里插入图片描述
    server类的内容如下,其中Thread.sleep(30000)是为了给访问服务时间,如果丢了这句会出现refuse connection的错误或者无法访问此网站的错误,看不到WSDL
    在这里插入图片描述
    运行server类,然后在网址输入http://localhost:9001/Service/HelloWorld?wsdl(别忘了?wsdl),会出现WSDL,如下图,则发布成功了。
    在这里插入图片描述
    以上网址务必在Server exiting(运行server类,在Console会有提示)之前打开,不然会报错。

  • 利用CXF来访问调用服务
    在cxf项目下创建一个包名为com.cxf.hello.client,类名为cxf_client的类来调用服务,具体操作如下(忽略提醒错误)
    在这里插入图片描述
    cxf_client类的内容如下
    在这里插入图片描述
    运行(调用服务)cxf_client之前要先运行server类,并且要在Server exiting之前运行,才能调用成功。
    在这里插入图片描述
    (PS:中秋节快乐,在理性代替情绪成为本能的路上,愿你越来越洒脱,我喜欢感性那个词! 2018/9/23 明天是中秋节 )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值