SOAP

SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换。

或者更简单地说:SOAP 是用于访问网络服务的协议。

在继续学习之前,您需要对下面的知识有基本的了解:

  • XML
  • XML 命名空间

什么是 SOAP?

  • SOAP 指简易对象访问协议
  • SOAP 是一种通信协议
  • SOAP 用于应用程序之间的通信
  • SOAP 是一种用于发送消息的格式
  • SOAP 被设计用来通过因特网进行通信
  • SOAP 独立于平台
  • SOAP 独立于语言
  • SOAP 基于 XML
  • SOAP 很简单并可扩展
  • SOAP 允许您绕过防火墙
  • SOAP 将被作为 W3C 标准来发展

Why SOAP?

对于应用程序开发来说,使程序之间进行因特网通信是很重要的。

目前的应用程序通过使用远程过程调用(RPC)在诸如 DCOM 与 CORBA 等对象之间进行通信,但是 HTTP 不是为此设计的。RPC 会产生兼容性以及安全问题;防火墙和代理服务器通常会阻止此类流量。

通过 HTTP 在应用程序间通信是更好的方法,因为 HTTP 得到了所有的因特网浏览器及服务器的支持。SOAP 就是被创造出来完成这个任务的。

SOAP 提供了一种标准的方法,使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。

SOAP 语法

SOAP 构建模块

一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:

  • 必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息
  • 可选的 Header 元素,包含头部信息
  • 必需的 Body 元素,包含所有的调用和响应信息
  • 可选的 Fault 元素,提供有关在处理此消息所发生错误的信息

所有以上的元素均被声明于针对 SOAP 封装的默认命名空间中:

http://www.w3.org/2001/12/soap-envelope

以及针对 SOAP 编码和数据类型的默认命名空间:

http://www.w3.org/2001/12/soap-encoding

语法规则

这里是一些重要的语法规则:

  • SOAP 消息必须用 XML 来编码
  • SOAP 消息必须使用 SOAP Envelope 命名空间
  • SOAP 消息必须使用 SOAP Encoding 命名空间
  • SOAP 消息不能包含 DTD 引用
  • SOAP 消息不能包含 XML 处理指令

SOAP 消息的基本结构

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>
  ...
  ...
</soap:Header>

<soap:Body>
  ...
  ...
  <soap:Fault>
    ...
    ...
  </soap:Fault>
</soap:Body>

</soap:Envelope>

强制使用的 SOAP 的 Envelope 元素是 SOAP 消息的根元素。

SOAP Envelope 元素

必需的 SOAP 的 Envelope 元素是 SOAP 消息的根元素。它可把 XML 文档定义为 SOAP 消息。

请注意 xmlns:soap 命名空间的使用。它的值应当始终是:

http://www.w3.org/2001/12/soap-envelope

并且它可把封装定义为 SOAP 封装:

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

xmlns:soap 命名空间

SOAP 消息必须拥有与命名空间 "http://www.w3.org/2001/12/soap-envelope" 相关联的一个 Envelope 元素。

如果使用了不同的命名空间,应用程序会发生错误,并抛弃此消息。

encodingStyle 属性

SOAP 的 encodingStyle 属性用于定义在文档中使用的数据类型。此属性可出现在任何 SOAP 元素中,并会被应用到元素的内容及元素的所有子元素上。SOAP 消息没有默认的编码方式。

语法

soap:encodingStyle="URI"

实例

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
...
Message information goes here
...
</soap:Envelope>

 

### SOAP协议介绍 SOAP(Simple Object Access Protocol,简单对象访问协议)是一种基于XML的标准协议,设计用于在分布式计算环境中实现应用程序之间的信息交换[^1]。它的核心目标是在异构网络环境下提供一种通用的方法来调用远程过程或服务。 #### 工作机制 SOAP定义了一组规则,这些规则规定了如何构建请求和响应消息。一条典型的SOAP消息由以下几个主要部分组成: - **信封 (Envelope)**: 定义了整个SOAP消息的框架结构,是根元素。 - **头 (Header)**: 可选的部分,用来携带额外的信息,比如认证数据、事务管理等。 - **体 (Body)**: 包含实际要发送的数据或者是错误信息。 这种结构使得SOAP能够适应多种应用场景,并且可以通过不同的传输协议进行传递,最常见的是HTTP/HTTPS,但也支持其他如SMTP这样的邮件协议[^2]。 #### 关键特性 - **平台无关性**: 由于采用XML作为基础格式,因此可以在任何平台上使用。 - **语言独立性**: 不依赖于特定编程语言,只要能解析XML就可以处理SOAP消息。 - **安全性高**: 提供WS-Security标准扩展,增强了安全功能。 - **复杂度较高**: 相较于REST风格的服务来说更为正式和严格[^3]。 ### 使用场景分析 尽管近年来随着轻量级API架构的发展趋势,REST逐渐成为主流选择之一;但在某些特殊情况下,SOAP仍然具有不可替代的优势: 1. **强类型需求环境下的企业内部集成** 当涉及到复杂的业务逻辑交互时,特别是那些需要精确控制输入输出参数类型的场合下,SOPA因其严格的契约定义而显得尤为重要. 2. **跨防火墙通信** 如果存在较高的网络安全要求,则可能更倾向于选用具备内置可靠性和事务支持特性的解决方案——这正是SOAP所提供的价值所在之处。 3. **长期稳定性优先考虑的应用程序间通讯** 对于一些生命周期较长的企业级应用而言,在初期投入较大成本搭建起一套稳定可靠的soap服务体系之后,后续维护相对容易很多。 ```java // Java 实现 SOAP 请求的一个简单例子 import javax.xml.soap.*; public class SoapClient { public static void main(String[] args)throws Exception{ // 创建连接并设置URL地址 String endpoint="http://example.com/service"; // 构建SOAP消息... MessageFactory factory=MessageFactory.newInstance(); SOAPMessage message=factory.createMessage(); // 设置SOAP Body内容... SOAPPart part=message.getSOAPPart(); SOAPEnvelope envelope=(SOAPEnvelope)part.getContent(); SOAPBody body=envelope.getBody(); // 添加具体的操作名及其参数到body里面... // 发送请求获取返回结果... SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance(); SOAPConnection con=scf.createConnection(); try{ SOAPMessage response=con.call(message,new URL(endpoint)); System.out.println(response.toString()); }finally{if(con!=null){con.close();}} } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值