SOAPAction是什么[通俗易懂]

SOAPAction是什么[通俗易懂]SOAPAction是什么?最近在工作中遇到一个SOAPAction的问题,正好拿出来研究一把。  据说SOAPActionheader这玩意在SOAP1.1规范中着实让不少开发者喝了一壶。真的有这么难理解么?我想这应该是因为SOAP有两种非常不同的使用方式,而SOAPAction主要是被用来支持其中应用较少的一种方式的原因。在我看来,这种方式也非常有价值。  让我们先看看S…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
SOAPAction是什么?

最近在工作中遇到一个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。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164072.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月24日 下午10:36
下一篇 2022年7月24日 下午10:46


相关推荐

  • 错误:Unbound classpath container: ‘JRE System Library [JavaSE-1.7]’ in project[通俗易懂]

    错误:Unbound classpath container: ‘JRE System Library [JavaSE-1.7]’ in project[通俗易懂]用新的Eclipse创建Maven项目时出现的问题。经过查找资料,是jre问题。解决方案:              项目右键—>Properties—>Java Build Path—>Libraries—>按照下图操作 再重新添加Jre可以选择工作空间默认的jre,也可以重新添加外部的jre,如果选择默认的点击完成…

    2022年6月13日
    42
  • SLAM算法调研「建议收藏」

    SLAM算法调研「建议收藏」作为一名机器人运行控制算法工程师,SLAM算法的调研已初步完成,特意分享。

    2022年6月16日
    49
  • js中循环对象

    js中循环对象ES6 之前 循环对象常见做法是使用 for in 但是 for in 循环的问题在于它会遍历原型链中的属性 所以需要使用 hasOwnProper 执行检查属性是否属于该对象 ES6 之后 我们对于对象的循环有了更好的办法 Object keys Object values Object entriesObjec keys 创建一个包含对象所有属性的数组 constfruits appple 22 pear 34 orange 88 varkeys Objec

    2026年3月17日
    3
  • git放弃修改&放弃增加文件

    git放弃修改&放弃增加文件

    2022年2月10日
    59
  • React路由

    React路由react路由规则,编程式导航,匹配模式,传递参数等

    2022年4月29日
    72
  • pip 国内源

    pip 国内源PyPI 使用国内源通过几次 pip 的使用 对于默认的 pip 源的速度实在无法忍受 从国外下载很慢 于是便搜集了一些国内的 pip 源 如下 阿里云 http mirrors aliyun com pypi simple 中国科技大学 https pypi mirrors ustc edu cn simple 豆瓣 douban http pypi douban com sim

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号