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介绍相关推荐

  1. 理解SOAP (一)介绍、SOAP 版本、

    日期:2003-03 适用于:全局XML Web 服务架构(GXA) 远程过程调用(RPC) SOAP 1.1 SOAP 1.2 规范 传输协议:TCP, HTTP, SMTP, 和 MSMQ Mic ...

  2. android intent action 介绍大全

    一些常用的Intent: Uri Action 功能 备注 geo:latitude,longitude Intent.ACTION_VIEW 打开地图应用程序并显示指定的经纬度 geo:0,0?q= ...

  3. SOAP协议规范介绍

    SOAP协议规范 1. 简介 SOAP以XML形式提供了一个简单.轻量的用于在分散或分布环境中交换结构化和类型信息的机制.SOAP本身并没有定义任何应用程序语义,如编程模型或特定语义的实现:实际上它通 ...

  4. 对于SOAP协议的全面介绍

    学习了一段时间的网络协议 , 相信大家已经对一些常规的网络协议有所了解了.那么这里我们主要介绍一下SOAP协议的内容.SOAP协议:简单对象访问协议(SOAP:Simple Object Access ...

  5. 把 SOAP 服务转化为 REST 服务(REST Service 的最佳实践,第 3 部分)

    from: https://www.ibm.com/developerworks/cn/webservices/1102_mace_restservicePart3/1102_mace_restser ...

  6. SOAP JAVA实例

    本文档介绍了Java调用SOAP Web Service的简单应用. 一.SOAP SOAP(Simple Object Access Protocol)是一种交换数据的协议规范,特点是轻量级.基于X ...

  7. soap协议_Go和SOAP

    在REST和RPC大行其道的今天,支持SOAP(简答对象访问协议)作为Web服务消息交换协议的情况是越来越少了.但在一些遗留系统中,尤其是采用微软技术栈的服务系统中,SOAP依然占有一席之地,比如在一 ...

  8. 使用Spring编写和使用SOAP Web服务

    在RESTful Web服务时代,我有机会使用SOAP Web Service. 为此,我选择了Spring ,这是因为我们已经在项目中使用Spring作为后端框架,其次它提供了一种直观的方式来与具有 ...

  9. 自动化运维-Ansible (第三部:Playbook 介绍)

    前言 之前有两篇文章分别讲了 Ansible 的部署.Ansible 的 模块使用,对 Ansible 有了最初的了解,这篇文章最主要是要介绍 Playbook. 需要了解 Ansible 的部署请点 ...

  10. java webservice soap请求_使用Java对WebService的SOAP请求

    小编典典 SOAP请求是一个XML文件,包含要发送到服务器的参数. SOAP响应同样是一个XML文件,但是现在该服务希望提供给您一切. 基本上,WSDL是一个XML文件,解释了这两个XML的结构. 要 ...

最新文章

  1. 14、ListView案例
  2. 网站推广流量获取仍需寻找全新获取网站推广流量渠道
  3. Eclipse调试Bug的七种常用技巧(转)
  4. Python入门100题 | 第006题
  5. LeetCode 376. 摆动序列(贪心 动态规划)
  6. Windows下C++多线程同步与互斥简单运用-转
  7. xgboost算法原理_从XGB到SecureBoost:看联邦学习XGB的算法原理
  8. private public php,[php]private public protected 三者区别
  9. SATA SAS SSD 硬盘介绍和评测
  10. 在QtCreator中手动添加signal和slot
  11. 【转】用Setup Factory 7.0制作安装程序
  12. SpringBoot+JSON+AJAX+ECharts+Fiddler实现前后端分离开发可视化(进阶篇)
  13. #C语言或C++中强大的图形库——easyx
  14. Python批量将TXT文件转为Excel格式
  15. 【话题:工作生活】2020年工作总结--杭漂结束,沪漂开始。
  16. Makefile的工作流程详解
  17. 赢在中国 - 史玉柱经典语录(转载)
  18. 全栈之初识JWT -- Web安全的守护神
  19. JS中的CommonJS和AMD
  20. 用python3实现HDU爬虫(后续可能更新VJ)2016.11.4更新

热门文章

  1. Xpath爬取豆瓣top250电影
  2. 彼时彼刻,正如此时此刻——评《让×××飞》
  3. java netbeans_Java和Netbeans字体美化
  4. Problem F: 求三角形面积-gyy
  5. 小象学院python数据分析课程怎么样_小象学院Python数据分析第二期【升级版】
  6. 基于Android手机开发平台的移动数字图书馆服务系统研究
  7. tensorflow模型量化篇(1)量化方法及动态范围量化
  8. CloudComparePCL 点云OOB包围盒
  9. Nginx 配置子域名
  10. [CoreBluetooth] API MISUSE: can only accept this command while in the powered on state(iOS蓝牙)