1. Java中的Web Service规范

Java 中共有三种WebService 规范,分别是JAX-WS(JAX-RPC)、JAX-RS、JAXM&SAAJ(废弃)。

1.1 JAX-WS规范

JAX-WS 的全称为Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(Java API For XML-Remote Procedure Call)目前已经被JAX-WS 规范取代。从java5开始支持JAX-WS2.0版本,Jdk1.6.0_13以后的版本支持2.1版本,jdk1.7支持2.2版本。

  • 采用标准SOAP(Simple Object Access Protocol) 协议传输,soap属于w3c标准。Soap协议是基于http的应用层协议,soap协议传输是xml数据。
  • 采用wsdl作为描述语言即webservice使用说明书,wsdl属w3c标准。
  • xml是webservice的跨平台的基础,XML主要的优点在于它既与平台无关,又与厂商无关。
  • XSD,W3C为webservice制定了一套传输数据类型,使用xml进行描述,即XSD(XML Schema Datatypes),任何编程语言写的webservice接口在发送数据时都要转换成webservice标准的XSD发送。

1.2 JAX-RS规范

JAX-RS 是JAVA 针对REST(Representation State Transfer)风格制定的一套Web 服务规范,由于推出的较晚,该规范(JSR 311,目前JAX-RS 的版本为1.0)并未随JDK1.6 一起发行。

支持JAX-RS服务规范的框架有:

  • CXF——XFire和Celtix的合并(一个由IONA赞助的开源ESB,最初寄存在ObjectWeb上)。
  • Jersey——Sun公司的JAX-RS参考实现。
  • RESTEasy——JBoss的JAX-RS项目。
  • Restlet——也许是最早的REST框架了,它JAX-RS之前就有了。

注:REST 是一种软件架构模式,只是一种风格,rest服务采用HTTP 做传输协议。

2. Web Service三要素(基于JAX-WS规范)

Web Service规范了体系中的各种关键技术,包括服务描述、发布、发现以及消息传输等,参考模型如图所示。

其中最重要的三要素如下:

  • WSDL: 用来描述如何访问具体的服务。
  • SOAP: 基于HTTP协议,采用XML格式,用来传递信息的格式。
  • UDDI: 用户自己可以按UDDI标准搭建UDDI服务器,用来管理,分发,查询WebService 。其他用户可以自己注册发布WebService调用。

2.1 WSDL

WSDL(Web Service Description Language/Web服务描述语言)是用XML文档来描述Web服务的标准,通过WSDL可描述Web服务的三个基本属性:

  • 服务能做什么(服务所提供的操作/方法)
  • 如何访问服务(和服务交互的数据格式以及协议)
  • 服务位于何处(与协议相关的服务地址,如URL)

WSDL文档以端口集合的形式来描述Web服务,WSDL服务描述包含对一组操作和消息的一个抽象定义、绑定到这些操作和消息的一个具体协议、以及一个网络端点规范。WSDL文档被分为服务接口(Service Interface/抽象)定义和服务实现(Service Implementation/具体实现)定义,WSDL基本结构如图所示。

2.1.1 WSDL文档中主要元素:

抽象定义

  • Types:定义Web服务使用的所有数据类型集合,可被元素的各消息部件所引用。
  • Messages:通信消息数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构,包括函数参数或文档描述。
  • PortTypes:引用消息部分中消息定义来描述函数签名(操作名、输入参数、输出参数)。

具体定义

  • Operation:对服务中操作的抽象描述。一个Operation描述了一个访问入口的请求/响应消息对。
  • Bindings:portType部分的操作在此绑定实现,包含了如何将抽象接口的元素转变为具体表示的细节。
  • Port:定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。
  • Services:确定每个绑定的端口地址。

portType、message和type描述了Web服务是什么,binding描述了如何使用Web服务,port和service描述了Web服务的位置。

2.1.2 WSDL阅读方法

是从下往上读,每个wsdl有且只有一个Service节点。

  1. 先找Service节点
  2. Service节点中找port节点。每个port对应一个PortType。
  3. Port节点对应一binding节点。每个binding节点对应一个PortType
  4. PortType中有operation 节点就是服务的方法。
  5. operation 中有Input(参数)和output(返回值)
  6. Input(参数)和output(返回值)对应message节点
  7. Message对应element节点。Element节点对应complexType节点描述了参数及返回值的数据类型。

2.2 SOAP(通讯协议)

SOAP(Simple Object Access Protocol/简单文件传输协议)是一个轻量的、简单的、基于XML的协议。使用http发送的XML格式的数据,它可以跨平台,跨防火墙,SOAP不是webservice的专有协议。

2.2.1 SOAP包括四个部分:

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

2.2.2 SOAP的基本结构包含以下元素:

  • Envelope(必须)标识文档为SOAP消息,是SOAP的根元素。
  • Header(可选)包含头部信息,如果SOAP消息有Header,则Header必须是Envelope的第一个子元素。
  • Body(必须)包含所有的调用和响应信息。
  • Fault(可选)提供错误消息。

2.2.3 SOAP1.1 & SOAP1.2 协议

目前WebService的协议主要有SOAP1.1和1.2,下面通过查看两者请求及响应来分析两者区别:

2.2.3.1 SOAP1.1

请求的协议体

POST /weather HTTP/1.1
Accept: text/xml, multipart/related
Content-Type:text/xml; charset=utf-8
SOAPAction:"http://ws.jaxws.ws.itcast.cn/WeatherInterfaceImpl/queryWeatherRequest"
User-Agent: JAX-WS RI 2.2.4-b01
Host: 127.0.0.1:54321
Connection:keep-alive
Content-Length: 214 <?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:queryWeather xmlns:ns2="http://ws.jaxws.ws.itcast.cn/">
<arg0>北京</arg0>
</ns2:queryWeather>
</S:Body>
</S:Envelope>

响应的协议体

HTTP/1.1 200 OK
Transfer-encoding: chunked
Content-type: text/xml; charset=utf-8
Date: Thu, 26 Nov 2015 03:14:29 GMT <?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:queryWeatherResponse xmlns:ns2="http://ws.jaxws.ws.itcast.cn/">
<return>晴转多云</return>
</ns2:queryWeatherResponse>
</S:Body>
</S:Envelope>

2.2.3.2 SOAP1.2

JAX-WS不支持SOAP1.2服务端发布,直接发布会报如下异常

如果要发布SOAP1.2服务端,需要引入2.2.8及以上版本的jax-ws包(jaxws-ri-2.2.8);且在SEI实现类上添加如下注解

@BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)

请求的协议体

POST /weather HTTP/1.1
Accept: application/soap+xml, multipart/related
Content-Type: application/soap+xml; charset=utf-8;
action="http://ws.jaxws.ws.itcast.cn/WeatherInterfaceImpl/queryWeatherRequest"
User-Agent: JAX-WS RI 2.2.4-b01
Host: 127.0.0.1:54321
Connection: keep-alive
Content-Length: 212 <?xml version="1.0" ?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
<S:Body>
<ns2:queryWeather xmlns:ns2="http://ws.jaxws.ws.itcast.cn/">
<arg0>北京</arg0>
</ns2:queryWeather>
</S:Body>
</S:Envelope>

响应的协议体

HTTP/1.1 200 OK
Transfer-encoding: chunked
Content-type: application/soap+xml; charset=utf-8
Date: Thu, 26 Nov 2015 03:25:24 GMT <?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
<S:Body>
<ns2:queryWeatherResponse xmlns:ns2="http://ws.jaxws.ws.itcast.cn/">
<return>晴转多云</return>
</ns2:queryWeatherResponse>
</S:Body>
</S:Envelope>

2.2.3.3 两者区别

相同之处:

  • soap1.1和soap1.2都是使用post方法
  • 都包括Envelope和Body

不同之处:

内容类型context-type不同:

  • soap1.1使用text/xml
  • soap1.2使用application/soap+xml

命名空间Envelope xmlns不同:

2.3 UDDI

UDDI(Universal Description, Discovery and Integration/通用描述、发现和集成)主要提供基于Web服务的注册和发现机制,为Web服务提供三个重要的技术支持:

  • 标准、透明、专门描述Web服务的机制。
  • 调用Web服务的机制。
  • 可以访问的Web服务注册中心。

但是使用webservice并不是必须使用UDDI,因为用户通过WSDL知道了web service的地址,可以直接通过WSDL调用webservice。

Web Service基础——规范及三要素的更多相关文章

  1. WebService基础学习(二)—三要素

    一.Java中WebService规范      JAVA 中共有三种WebService 规范,分别是JAX-WS.JAX-RS.JAXM&SAAJ(废弃).   1.JAX-WS规范    ...

  2. Android笔记之 Web Service 基础

    一.Web Service是什么? 就是网络服务.依据W3C的定义,WebServices(Web服务)是一个用于支持网络间不同机器互操作的软件系统,它是一种自包括.自描写叙述和模块化的应用程序,它能 ...

  3. Web Service基础——基础概念

    1. Web Service基本概念 Web Service(Web服务)是一种远程调用技术,他的作用就是从远程系统中获取业务数据.具体来说,Web Service可以让你的网站使用其他网站的资源,比 ...

  4. Web service基础

    Web service是Web应用程序 平台是XML+http XML是不同平台和不同编程语言之间的语言,用于编解码数据. http是因特网协议 XML是web service的基础 Web serv ...

  5. web service基础知识

    Web服务基础 用户访问网站的基本流程 我们每天都会用web客户端上网,浏览器就是一个web客户端,例如谷歌浏览器,以及火狐浏览器等. 当我们输入www.oldboyedu.com/时候,很快就能看到 ...

  6. Web Service基础——四种客户端调用方式

    通过访问公网服务地址 http://www.webxml.com.cn/zh_cn/index.aspx 来演示四种不同的客户端调用方式 1. 生成客户端调用方式 1.1 Wsimport命令介绍 首 ...

  7. 小迪安全 Web安全 基础入门 - 第三天 - 抓包&封包&协议&APP&小程序&PC应用&WEB应用

    一.抓包工具 1.Fiddler.Fiddler是一个用于HTTP调试的代理服务器应用程序,能捕获HTTP和HTTPS流量,并将其记录下来供用户查看.它通过使用自签名证书实现中间人攻击来进行日志记录. ...

  8. web前端基础知识-(三)JavaScript基本操作

    JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编程代码. JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行. JavaScrip ...

  9. Web前端基础——jQuery(三)

    本文主要从以下几方面介绍jQuery应用中的内容: 1 jQuery 节点遍历2 jQuery 中的过滤器3 jQuery 属性操作4 jQuery Dom节点操作5 几个jQuery例子6 jQue ...

随机推荐

  1. Oracle中Instr用法

    在项目中用到了Oracle中 Instr 这个函数,顺便仔细的再次学习了一下这个知识. Oracle中,可以使用 Instr 函数对某个字符串进行判断,判断其是否含有指定的字符. 其语法为:Instr ...

  2. Derby安装,创建数据库,在Java程序中使用Derby

    1,下载并安装Derby: 下载地址:http://db.apache.org/derby /derby_downloads.html,下载最新版本. 我用的是10.5.3.0. 解压缩到任意文件夹, ...

  3. php扩展开发笔记(2)多个源代码文件的配置和编译

    我们在开发过程中,为了代码得可读性和易维护性,肯定是须要多个代码文件的,而不不过通过 ext_skel 生成得骨架文件. 这篇文章主要介绍下.多个代码文件的时候.我们须要注意什么,以及怎么做. 我的代 ...

  4. mahout源码分析之DistributedLanczosSolver(六)完结篇

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 接上篇,分析完3个Job后得到继续往下:其实就剩下两个函数了: List<Map.Entry< ...

  5. Android音乐播放-MediaPlayer

    当你坐公交无聊的时候,当你淹没在地铁中人潮中的时候,你是否想内心保持一份的安静呢,那么请带上耳机,打开你的音乐播放器,听一首老歌带你进入宁静的世界,音乐播放这个功能在智能手机出现之前,诺基亚时代,甚至 ...

  6. 【记录】cygwin下折腾个人配置环境

    (本文由hcbbt发布,转载请注明出处,blog.csdn[dot]net/hcbbT)      cygwin是windows下的linux的模拟环境,不仅可以执行linux的各种命令,可以在cyg ...

  7. java 切图 判断图片是否是纯色/彩色图片

    首先上切图的代码 /** * 图片剪裁 * @param x 距离左上角的x轴距离 * @param y 距离左上角的y轴距离 * @param width 宽度 * @param height 高度 ...

  8. 机器学习的开源平台 TensorFlow

    一. google第二代人工智能机器学习开源工具. http://www.tensorfly.cn/ 二. 知乎上关于机器学习的资料问答 https://www.zhihu.com/question/ ...

  9. 1-2Html与CSS的关系

    Html和CSS的关系 基于微信的后台开发须要掌握的基础知识包括有:HTML.CSS.JavaScript语言. 以下我们就来了解下这三门技术都是用来实现什么的: 1. HTML是网页内容的载体.内容 ...

  10. Android基础新手教程——1.6 .9(九妹)图片怎么玩

    Android基础新手教程--1.6 .9(九妹)图片怎么玩 标签(空格分隔): Android基础新手教程 1.本节引言: 可能有的一些疑问: 1.什么是.9图片? 答:图片后缀名前有.9的图片,如 ...