【WebServices系列】详解WebServices (SOAP-WebService) (中)

·  阅读 235

这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战

【WebServices系列】详解WebServices (SOAP-WebService & REST) (上)


二、SOAP-WebService:一个最早用于实现/构建WebServices的基于SOAP的技术

==这是一个最早用于实现/构建WebServices的基于SOAP的技术,占据了搜索"WebService"最大的结果比重,从这种实际现象来看,"WebService"专指基于SOAP的构建WebServices的技术,这就是历史包袱==

为了摆脱历史包袱,我们用"SOAP-WebService"表示这个技术,用"SOAP-WebServices"表示基于这个技术构建的"WebServices"。因为SOAP是基于XML的,所以在一些资料中也将称其为"XML-WebService(s)"

"SOAP"、"XML"是一个状语,用来修饰"WebService(s)",实际上除了技术的严谨性以外,还有一个原因让我们加上这个状语

与SOAP-WebService(s)相对的是REST-WebService(s)

在实际现象中

"SOAP-WebService(s)":没多少人会加上SOAP,就叫WebService(s)。(历史包袱) "REST-WebService(s)":也没人会加上WebService(s),就叫REST。 明白这个现象,对摆脱历史包袱是很重要的 稍后会对REST做详解

SOAP是一个通信协议,SOAP-WebService ==本质上是一个RPC== ,是一套SOAP-WebServices之间的通信传输技术标准

SOAP-WebService估计很多人都没有用过,文字资料不是很直观,推荐看一些视频,能快速了解其基本概念和开发流程: 推荐看 java进阶教程之webservice深入浅出【黑马程序员】 这个视频两个小时,可以快速过一遍。唯一的缺点是没有用wsdl来生成代码(而是客户端代码直接copy了服务端的服务接口代码),使用wsdl生成代码可以看:WebService全套实战教程(12)【2019千锋Java】

  • 使用 wsimport 生成代码:P3 (03_第二种调用服务的方式&服务升级的处理)
  • 使用 wsdl2java 生成代码:P12 (12_CXF发布服务和访问服务)

SOAP-WebService,是早期软件巨头IBM、Microsoft等 定义的"用来构建WebServices的技术/技术栈/标准/规范"(这个"WebServices"在现在看来实际上是"SOAP-WebServices"),以SOAP、WSDL、UDDI为三核心:

为帮助理解他们之间的工作流程,结合起来描述为: SOAP-WebService是一种跨语言、跨平台的web服务远程调用技术,它使用SOAP协议进行通信。一次SOAP-WebService的调用,就是一次SOAP协议的通信。SOAP是独立的并可通过WSDL进行自我描述。WSDL文档类似目前常用的RESTful API接口文档,里面定义了某个SOAP-WebServices提供的接口和相关的参数信息,通过WSDL生成接口调用代码。SOAP-WebServices可以使用UDDI来发现,UDDI是一个SOAP-WebServices注册中心,通过它可以搜索需要的服务以及服务的WSDL地址

附:Java中的WebServices开发规范

Java中共有三个WebService规范,分别是JAX-WS(JAX-RPC)、JAX-RS、JAXM&SAAJ(废弃) (JAX-RS是REST-WebService规范,其他两个是SOAP-WebService规范) 其中的JA的全拼是JavaAPI,这三个所说的规范其实是Java API工具包。他们提供了一些注解,大大简化了开发流程。

Apache提供的CXF框架对JAX-WS和JAX-RS进行了封装,是最流行的WebService开发框架。

其中JAX-WS是最经典最传统的规范,符合SOAP-WebService技术三要素

在百度文库-JavaEE的发展历史中找出他们的发布时间,这会便于我们分析历史问题 JAX-RPC:2001-08-22,跟随JavaEE1.3发布 JAX-WS2.0(JAX-RPC2.0):2006-05-08,跟随JavaEE5发布 JAX-RS:2009-12-10,跟随JavaEE6发布

下面分别介绍这三个规范

JAX-WS(JAX-RPC)

(全拼:Java API for XML-Based WebServices) 在JavaEE5中,JAX-RPC 2.0更名为JAX-WS 2.0,名称的变更反映了从RPC-style到document-style的Web服务的变迁

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

JAXM&SAAJ(废弃)

(全拼:JAVA API For XML Message)

JAXM主要定义了包含了发送和接收消息所需的API,SAAJ(SOAP With Attachment APIFor Java,JSR 67)是与JAXM 搭配使用的API,为构建SOAP 包和解析SOAP 包提供了重要的支持,支持附件传输等,JAXM&SAAJ 与JAX-WS 都是基于SOAP 的Web 服务,相比之下JAXM&SAAJ 暴漏了SOAP更多的底层细节,编码比较麻烦,而JAX-WS 更加抽象,隐藏了更多的细节,更加面向对象,实现起来你基本上不需要关心SOAP 的任何细节

JAX-RS

(全拼:Java API for RESTful Web Services) JAX-RS是在Roy Fielding(REST提出者)的参与下,针对REST风格制定的一套WebServices-API。推出的较晚,随JavaEE6发布。REST-WebService不采用SOAP传输,而是直接使用HTTP传输,可以返回xml或json,比较轻量 支持JAX-RS服务规范的框架有:

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

明天继续

分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改