背景
1、SOAP:
什么是SOAP
SOAP 是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。 SOAP 利用
XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。 这种框架的设计思想是要独立于任何一种特定的编程模型和其他特定实现的语义。
SOAP版本之间的差别
SOAP V1.1 和 SOAP V1.2 都是万维网联盟 (W3C) 标准。可以部署不但支持 SOAP 1.1, 而且支持 SOAP 1.2 的 Web Service。从 SOAP 1.0 到 SOAP 1.2 规范所做的一些更改很重要,而其他更改则不太重要。SOAP 1.2 规范中包含对 SOAP 1.1 的一些更改。本文着重于 SOAP 的当前版本之间的重要差别。
对 SOAP 1.2 规范所做的重要更改包括下列更新:
- SOAP 1.1 基于 XML 1.0。SOAP 1.2 基于 XML 信息集。
XML 信息集提供使用 XSD 模式描述 XML 文档的方法。然而,信息集并不一定使用 SOAP 1.1 所基于的 XML 1.0 序列化来序列化该文档。这种描述 XML 文档的新方法有助于显示其他序列化格式,例如二进制协议格式。可以使用二进制协议来将消息压缩成某一可能不需要某些详细标记信息的压缩格式。
在 SOAP 1.2 中,可以使用绑定至底层协议的规范确定在底层协议数据单元中使用的 XML 序列化。[SOAP 1.2 - Part 2] 中指定的 HTTP 绑定使用 XML 1.0 作为 SOAP 消息信息集的序列化。
- 只要供应商遵从 SOAP 1.2 中定义的绑定框架,SOAP 1.2 就能够提供正式定义传输协议(而不是使用 HTTP)的功能。虽然 HTTP 普遍存在,但它没有其他传输协议(包括 TCP/IP 和 MQ)可靠。
- SOAP 1.2 更明确地定义了 SOAP 处理模型,该模型中除去了许多在缺少 Web Service 互操作性 (WS-I) 概要文件的情况下可能会导致互操作性错误的二义性。其目标是极大地减少使用 SOAP 1.2 实现的不同供应商之间出现互操作性问题的机会。
- “带附件的 SOAP Java™ API” (SAAJ) 还可以作为一种发出 SOAP 请求的简单机制独立出来。对 SAAJ 规范所做的主要更改是能够表示 SOAP 1.1 消息和其他 SOAP 1.2 格式化消息。例如,SAAJ V1.3 在 SOAP 头元素上引入了一组更有助于 SOAP 1.2 的新常量和方法(如 getRole() 和 getRelay())。工厂中还有其他方法供 SAAJ 使用以创建适当的 SOAP 1.1 或 SOAP 1.2 消息。
- 对于 SOAP 1.2,包络和编码模式的 XML 名称空间已更改。这些更改使 SOAP 处理器能够区分 SOAP 1.1 与 SOAP 1.2 消息,并支持 SOAP 模式中的更改,而不会影响现有实现。
- “针对 XML Web Service 的 Java 体系结构”(JAX-WS) 引入了同时支持 SOAP 1.1 和 SOAP 1.2 的功能。因为 JAX-RPC 要求在运行时遍历 SOAP 消息时处理该消息,所以需要在其相应 SOAP 上下文中表示该消息。在 JAX-WS 中,由于支持 SAAJ 1.3 而产生了许多其他增强功能。
- Web 服务描述语言 (WSDL) V1.1 规范不讨论 SOAP 1.2。SOAP 1.2 在 WSDL 2.0 草稿版中讨论。WSDL 1.1 仅定义如何在 WSDL 1.1 文档中呈示 SOAP 1.1 有效内容。要解决如何表示基于 SOAP 1.2 的服务这一问题,有另一个 W3C 文档,它定义如何在 WSDL 1.1 文档中定义 SOAP 1.2 有效内容。有关 SOAP 1.2,请阅读 WSDL 1.1 绑定扩展。
- SOAP 1.1 是单个文档。SOAP 1.2 规范分为以下几部分:
- Part 0 是 SOAP 非标准简介。
- Part 1 描述 SOAP 消息的结构、SOAP 处理模型和用于将 SOAP 绑定至底层协议的框架。一致性 SOAP 实现必须实现 Part 1 中的所有内容。
- Part 2 描述 SOAP 核心的可选加载件,其中包括数据模型和编码、RPC 约定以及至 HTTP 的绑定。一致性 SOAP 实现可实现 Part 2 中的所有加载件。然而,如果实现了这些加载件,那么这些加载件必须符合规范的相关部分。
2、SOAP1.2的改进:
SOAP 1.2提供了一个更严密、更可靠的规范集合,它基于对协议和XML序列化方案进行绑定的一个抽象模型。
SOAP 1.2 对语法进行了许多更改,并且提供了 SOAP 1.1 中所描述的语义的附加的、已明确的语义。“SOAP 1.2 入门”文档列示并描述了这些语法更改。
3、SOAP 1.1 规范仅规范化了一种用于 HTTP 的协议绑定(由于 HTTP 的广泛使用)。而在 SOAP 1.2 中是 application/soap+xml,能更好低支持WS相关协议。
看下SOAP的request的格式:
SOAP 1.1 request:
POST /WSShakespeare.asmx HTTP/1.1
Host: www.xmlme.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://xmlme.com/WebServices/GetSpeech"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetSpeech xmlns="http://xmlme.com/WebServices">
<Request>string</Request>
</GetSpeech>
</soap:Body>
</soap:Envelope>
SOAP 1.2 request:
POST /WSShakespeare.asmx HTTP/1.1
Host: www.xmlme.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<GetSpeech xmlns="http://xmlme.com/WebServices">
<Request>string</Request>
</GetSpeech>
</soap12:Body>
</soap12:Envelope>
格式的不同:
- SOAP 1.2 uses “application/soap+xml” as Content-Type and SOAP 1.1 uses “text/xml”.
- SOAP 1.2 does not use SOAPAction header line.
- SOAP 1.2 uses “http://www.w3.org/2003/05/soap-envelope” as the envolope namespace and SOAP 1.1 uses “http://schemas.xmlsoap.org/soap/envelope/”
参考:
http://www.w3.org/TR/2000/NOTE-SOAP-20000508/