SOAP Action揭密

原创 2007年10月13日 23:27:00

最近在工作中遇到一个SOAP Action的问题,正好拿出来研究一把。

据说SOAPAction header这玩意在SOAP 1.1规范中着实让不少开发者喝了一壶。真的有这么难理解么?我想这应该是因为SOAP有两种非常不同的使用方式,而SOAPAction主要是被用来支持其中应用较少的一种方式的原因。在我看来,这种方式也非常有价值。

让我们先看看SOAP 1.1规范是怎么定义HTTP SOAPAction header的:

SOAPAction HTTP request header被用来标识SOAP HTTP请求的目的地,其值是个URI地址。SOAP发送并不限制格式、URI特征或其必须可解析,那么在这种情况下,发送一个HTTP SOAP请求时,其HTTP客户端必须使用/指明SOAPAction HTTP request header。

SOAPAction header的内容可以被用在服务端,诸如:防火墙适当的过滤基于HTTP的SOAP请求消息等场景。SOAPAction header的值为空串("")表示SOAP消息的目的地由HTTP请求的URI标识;无值则表示没有指定这条消息的目的地

看了官方的定义,相信大家也迷糊了,迷糊在“目的地”这个词上吧?那么,给它一个准确的说法吧——“确定执行某一行为的路径”。

看一个SOAP消息的例子:

<SOAP-ENV:Envelope
  
xmlns: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提供一个关于SOAPAction如何被使用的索引;而SOAPAction header的值则应该被用来指明这个“扩展”的目的地——这条SOAP/HTTP消息发送者所期待的处理容器的名称(可以这样理解:即相应的API方法)。那么,正如上面那个AWT例子一样,如果这种期待没有被满足,就会产生一个错误。

注意:在SOAP 1.2规范中,SOAPAction header这个属性被"action"所取代,但其作用和工作原理都没有变化。

有意思的是,在Tibco的EAI工具BW中,使用SOAP服务端活动必须指定SOAP Action属性,如果引用的原始WSDL没有使用这个属性的话,也必须显示的指明;因此,相应的,其客户端也要注意啦——必须为SOAP Action属性填入期待的URI。OK

SOAPAction是什么?

SOAPAction是什么? 最近在工作中遇到一个SOAP Action的问题,正好拿出来研究一把。   据说SOAPAction header这玩意在SOAP 1.1规范中着实让不少开发者喝了一...
  • nosodeep
  • nosodeep
  • 2012年10月05日 00:41
  • 2604

也谈“指定的 SOAPAction 无效”异常的解决办法 ”

之前调试Remoting程序时有碰到“指定的 SOAPAction 无效”的问题,即客户端调用远程remoting方法时,提示SOAPAction 无效,一时不知道怎么解决。在网上百度下,看到一篇文章...
  • sloder
  • sloder
  • 2013年03月20日 08:25
  • 4763

wsdl SOAP Action的真正面貌

SOAP Action值
  • liweifengwf
  • liweifengwf
  • 2013年08月08日 00:16
  • 5113

解决办法:服务器未能识别 HTTP 标头 SOAPAction 的值

转自:http://www.cnsaturn.com/logs/2009/05/26/http-header-soapaction-value-cannot-recognized-by-server-...
  • slimboy123
  • slimboy123
  • 2009年07月20日 13:00
  • 19666

axis1.4 客户端调用webservice接口返回错误:no SOAPAction header!

服务端使用webservice框架axis1.4开发,客户端发送的报文中,HTTP head 没有SOAPAction 返回报文: xmlns:xsd="http://www.w3.o...
  • wxyong3
  • wxyong3
  • 2014年08月21日 11:28
  • 11767

wsdl 与 soap协议详解

一、WSDL语言:(web service definition language - web service定义语言) (一)简介: 1、wsdl 是全完基于xml 的,特别是xml s...
  • zhongguomao
  • zhongguomao
  • 2016年06月22日 11:39
  • 1718

Java中Soap的几种使用方法(android 可用)

本文章使用的是http://www.webxml.com.cn/WebServices/WeatherWebService.asmx中的webservice中的soap使用方法。 SOAP使用方...
  • s464036801
  • s464036801
  • 2013年05月10日 14:35
  • 2454

Web Service笔记(三):wsdl 与 soap协议详解

WS 的三大技术详解 1、WSDL语言:(web service definition language - web service定义语言) 2、soap消息 3、UUID ...
  • u012228718
  • u012228718
  • 2014年11月21日 13:46
  • 7634

SOAP Action揭密

最近在工作中遇到一个SOAP Action的问题,正好拿出来研究一把。 据说SOAPAction header这玩意在SOAP 1.1规范中着实让不少开发者喝了一壶。真的有这么难理解么?我想这应...
  • JC_WorkSpace
  • JC_WorkSpace
  • 2014年05月25日 22:48
  • 362

300行代码揭密轮播插件核心代码的实现过程

轮播效果在网页中用的很多,swiper是其中最有代表性的作品,它支持水平和竖直滑动,还有反弹效果,兼容移动端和pc端。当然代码量也是相当大的,单是js就有5300行(3.4.0的未缩版本),若不考虑代...
  • hesi9555
  • hesi9555
  • 2017年04月20日 09:34
  • 289
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SOAP Action揭密
举报原因:
原因补充:

(最多只允许输入30个字)