SOAP Action介绍
SOAP Action
据说SOAP Action header在SOAP 1.1规范中着实让不少开发者喝了一壶。真的有那么难理解么?我想这应该是因为SOAP有两种非常不同的使用方式,而SOAP Action主要是被用来支持其中应用较少的一种方式的原因。在我看来,这种方式也非常有价值。
让我们先看看SOAP 1.1规范是怎么定义HTTP SOAP Action header的:
SOAP Action HTTP request header被用来标识SOAP HTTP请求的目的地,其值是个URI地址。SOAP发送并步限制格式、URI特征或其必须可解析,那么在这种情况下,发送一个HTTP SOAP请求时,其HTTP客户端必须使用/指明SOAP Action HTTP request header。
SOAP Action header的内容可以被用在服务端,诸如:防火墙适当的过滤基于HTTP的SOAP请求消息等场景。SOAP Action header的值为空串("")表示SOAP消息的目的地由HTTP请求的URI标识;无值则表示没有指定这条消息的目的地。
看了官方的定义,相信大家也迷糊了,迷糊在“目的地”这个词上吧?那么,给它一个准确的说法吧——“确定执行某一行为的路径”。
看一个SOAP消息的例子:
<SOAP-ENV:Envelopexmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><m:GetLastTradePrice xmlns:m="Some-URI"><symbol>XYS</symbol></m:GetLastTradePrice></SOAP-ENV:Body> </SOAP-ENV:Envelope>
很明显的,这条消息指明了要去执行服务端的“GetLastTradePrice”这个方法,开发者不会对此没有疑问,这样看来,SOAP Action也许显得多余了?
然而,在另一种SOAP消息的发送场景种,却少不了SOAP Action。在这种场景中,SOAP消息并没有显示的指定要调用的服务方法名,而是利用低层的传输协议发送(这样的化,一般会被Web services忽视),例如使用HTTP的Post方式发送的SOAP消息。
拿AWT组件容器来举个例子吧,我们知道有很多AWT容器,例如:Panel,Box,Window等等,很多情况下,开发者知道他们创建的泛型容器对象下真正是什么对象。那么,假设下面两段代码里的java.awt.Container对象其实是一个Box吧:
1.
comp = new TextField( "test" ); java.awt.Container c = Foo.bar(); c.add( comp );
2.
comp = new TextField( "test" ); java.awt.Container c = Foo.bar(); ((java.awt.Panel)c).add( comp );
以上两段代码产生两种不同的结果。“add()”方法对两者似乎有着相同的意义,但是在代码2中其被扩展为“作为一个Panel对象去add”。所以很明显的,代码2会抛出一个异常,因为我们知道这个对象实际上是Box,而我们的代码期待的是Panel。
HTTP POST的意义正如这个例子中的“add()”方法一样,HTTP POST提供一个关于SOAP Action如何被使用的索引;而SOAP Action header的值则应该被用来指明这个“扩展”的目的地——这条SOAP/HTTP消息发送者所期待的处理容器的名称(可以这样理解:即相应的API方法)。那么,正如上面那个AWT例子一样,如果这种期待没有被满足,就会产生一个错误。
注意:在SOAP 1.2规范中,SOAP Action header这个属性被“action”所取代,但其作用和工作原理都没有变化。
有意思的是,在Tibco的EAI工具BW中,使用SOAP服务端活动必须指定SOAP Action属性,如果引用的原始WSDL没有使用这个属性的话,也必须明显的指明;因此,相应的,其客户端也要注意啦——必须为SOAP Action属性填入期待的URI。
SOAP Action介绍相关推荐
- 理解SOAP (一)介绍、SOAP 版本、
日期:2003-03 适用于:全局XML Web 服务架构(GXA) 远程过程调用(RPC) SOAP 1.1 SOAP 1.2 规范 传输协议:TCP, HTTP, SMTP, 和 MSMQ Mic ...
- android intent action 介绍大全
一些常用的Intent: Uri Action 功能 备注 geo:latitude,longitude Intent.ACTION_VIEW 打开地图应用程序并显示指定的经纬度 geo:0,0?q= ...
- SOAP协议规范介绍
SOAP协议规范 1. 简介 SOAP以XML形式提供了一个简单.轻量的用于在分散或分布环境中交换结构化和类型信息的机制.SOAP本身并没有定义任何应用程序语义,如编程模型或特定语义的实现:实际上它通 ...
- 对于SOAP协议的全面介绍
学习了一段时间的网络协议 , 相信大家已经对一些常规的网络协议有所了解了.那么这里我们主要介绍一下SOAP协议的内容.SOAP协议:简单对象访问协议(SOAP:Simple Object Access ...
- 把 SOAP 服务转化为 REST 服务(REST Service 的最佳实践,第 3 部分)
from: https://www.ibm.com/developerworks/cn/webservices/1102_mace_restservicePart3/1102_mace_restser ...
- SOAP JAVA实例
本文档介绍了Java调用SOAP Web Service的简单应用. 一.SOAP SOAP(Simple Object Access Protocol)是一种交换数据的协议规范,特点是轻量级.基于X ...
- soap协议_Go和SOAP
在REST和RPC大行其道的今天,支持SOAP(简答对象访问协议)作为Web服务消息交换协议的情况是越来越少了.但在一些遗留系统中,尤其是采用微软技术栈的服务系统中,SOAP依然占有一席之地,比如在一 ...
- 使用Spring编写和使用SOAP Web服务
在RESTful Web服务时代,我有机会使用SOAP Web Service. 为此,我选择了Spring ,这是因为我们已经在项目中使用Spring作为后端框架,其次它提供了一种直观的方式来与具有 ...
- 自动化运维-Ansible (第三部:Playbook 介绍)
前言 之前有两篇文章分别讲了 Ansible 的部署.Ansible 的 模块使用,对 Ansible 有了最初的了解,这篇文章最主要是要介绍 Playbook. 需要了解 Ansible 的部署请点 ...
- java webservice soap请求_使用Java对WebService的SOAP请求
小编典典 SOAP请求是一个XML文件,包含要发送到服务器的参数. SOAP响应同样是一个XML文件,但是现在该服务希望提供给您一切. 基本上,WSDL是一个XML文件,解释了这两个XML的结构. 要 ...
最新文章
- 14、ListView案例
- 网站推广流量获取仍需寻找全新获取网站推广流量渠道
- Eclipse调试Bug的七种常用技巧(转)
- Python入门100题 | 第006题
- LeetCode 376. 摆动序列(贪心 动态规划)
- Windows下C++多线程同步与互斥简单运用-转
- xgboost算法原理_从XGB到SecureBoost:看联邦学习XGB的算法原理
- private public php,[php]private public protected 三者区别
- SATA SAS SSD 硬盘介绍和评测
- 在QtCreator中手动添加signal和slot
- 【转】用Setup Factory 7.0制作安装程序
- SpringBoot+JSON+AJAX+ECharts+Fiddler实现前后端分离开发可视化(进阶篇)
- #C语言或C++中强大的图形库——easyx
- Python批量将TXT文件转为Excel格式
- 【话题:工作生活】2020年工作总结--杭漂结束,沪漂开始。
- Makefile的工作流程详解
- 赢在中国 - 史玉柱经典语录(转载)
- 全栈之初识JWT -- Web安全的守护神
- JS中的CommonJS和AMD
- 用python3实现HDU爬虫(后续可能更新VJ)2016.11.4更新
热门文章
- Xpath爬取豆瓣top250电影
- 彼时彼刻,正如此时此刻——评《让×××飞》
- java netbeans_Java和Netbeans字体美化
- Problem F: 求三角形面积-gyy
- 小象学院python数据分析课程怎么样_小象学院Python数据分析第二期【升级版】
- 基于Android手机开发平台的移动数字图书馆服务系统研究
- tensorflow模型量化篇(1)量化方法及动态范围量化
- CloudComparePCL 点云OOB包围盒
- Nginx 配置子域名
- [CoreBluetooth] API MISUSE: can only accept this command while in the powered on state(iOS蓝牙)