`
winebibber
  • 浏览: 119492 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

WebService之SOAP

    博客分类:
  • Java
阅读更多

一、SOAP概述

      SOAP(Simple Object Access Protocol),它是一种标准消息传递协议,通常是Web Service的事实标准。SOAP是以XML为基础,SOAP消息格式是由XML Schema模式定义,通过XML命名空间使SOAP具有很强的扩展性。
      SOAP message:SOAP XML文档实例,通常通过其他某些网络协议的有效载荷来携带SOAP消息,例如:HTTP, SMTP, TCP/IP等。
      WebService可以使用两种消息传递方式:One-Way messaging(单向消息传递)或者Request/Response messaging(请求/响应消息传递)

 二、SOAP的基本结构
       SOAP中根元素是Envelope元素。Envelope元素中可以包含多个可选的Header元素,必须同时包含一个Body元素。Header元素必须是Envelope元素的直接子元素,并且要位于Body元素之前。

三、SOAP的命名空间
      SOAP消息可以在Header元素和Body元素中包含若干不同的XML元素,使用唯一的命名空间来标识它们。
      xmlns:soap=http://schemas.xmlsoap.org/soap/envelope/命名空间定义了标准SOAP元素(例如:Envelope, Header和Body等)。Header元素的每个头文件都有自己的命名空间。

四、 SOAP头
      SOAP header在Web Service中的应用越来越多,例如安全性、事务以及其他各种服务方面的大量“标准”文件头。SOAP文件头是扩展SOAP协议的一个功能非常强大的措 施,SOAP文件头的扩展性是SOAP得以流行并且获得其他协议没有取得成功的另一个原因。
     
    4.1 actor属性(next、ultimate receiver)
          Actor是由SOAP注释定义的,在SOAP 1.2中,actor属性已经被更名为role。Actor属性和XML命名空间组合在一起使用,以确定要用哪个代码模块处理具体的Header。
          Next角色表示消息路径中的下一个节点必须处理文件头。
          Ultimate receiver角色表示只有消息的最终接收方才能处理指定的Header。

    4.2 mustUnderstand属性
          表示处理是否为强制性处理,如果一个节点不能识别某一个强制性Header,那么必定会产生SOAP错误。
          如果MustUnderstand属性的值是0,如果应用程序没有能够识别该文件头,那么必须删除此文件头。

五、SOAP体
       Body元素要包含应用程序专有的数据或者错误消息。应用程序的专有数据可以是任意XML数据或者是提供给过程调用的任意参数。只有SOAP消息最后的接收方应该处理SOAP Body。

六、SOAP消息传递模式
       SOAP支持四种消息传递模式(RPC/Literal, Document/ Literal, RPC/Encoded, and Document/Encoded),但是WS-I Basic Profile只允许RPC/Literal和Document/ Literal,不支持SOAP encoding,因为它会引起严重的互操作性。Literal表示可以根据XML模式验证XML文档的有效性。

       6.1 Document/ Literal消息传递模式
             Document/ Literal消息传递模式中,SOAP的Body元素包含一个XML格式良好的文档段;

       6.2 RPC/Literal消息传递模式
             RPC/Literal消息传递模式将Body元素格式化成struct。PRC请求消息包含调用的方法名称与输入参数。RPC响应消息则包含返回值和各种输出参数(或者错误);

SOAP请求消息:

<? xml version="1.0" encoding="UTF-8" ?>

< soap:Envelope

 
xmlns:soap ="http://schemas.xmlsoap.org/soap/envelope/"

 xmlns:mh
="http://www.Monson-Haefel.com/jwsbook/BookQuote" >

   
< soap:Body >

      
< mh:getBookPrice >

          
< isbn > 0321146182 </ isbn >

      
</ mh:getBookPrice >

   
</ soap:Body >

</ soap:Envelope >

SOAP返回消息

<? xml version="1.0" encoding="UTF-8" ?>

< soap:Envelope

 
xmlns:soap ="http://schemas.xmlsoap.org/soap/envelope/"

 xmlns:mh
="http://www.Monson-Haefel.com/jwsbook/BookQuote"   >

   
< soap:Body >

      
< mh:getBookPriceResponse >

          
< result > 24.99 </ result >

      
</ mh:getBookPriceResponse >

   
</ soap:Body >

</ soap:Envelope >


        6.3 消息传递模式和消息交换模式
            Messaging Modes:(RPC/Literal, Document/ Literal, RPC/Encoded, and Document/Encoded)。消息传递模式通常描述的是SOAP消息的有效负载:即XML文档段或者是远程过程调用对应的参数和返回值的XML表 示。
            Messaging Exchange Patterns (MEPs):One-Way and Request/Response MEPs。消息交换模式表示的是消息的流向,而不是消息的内容

七、SOAP错误
       SOAP错误是由消息接收方(消息的中介体或者最终接收方)产生的。只有使用的请求/响应消息传递模式的时候,才要去接收方将SOAP错误传递给发送方。

       7.1 faultcode元素
            faultcode表示错误错误代码,包括Client、Server、VersionMismatch和MustUnderstand不同类型。
            Client表示传递SOAP消息的节点出现了错误(发送错误),例如:消息不是一个良好的格式,或者包含无效数据、缺少所期望的信息,接收节点就会产生一个Client错误。
            Server表示接收到SOAP消息的节点发生故障或者不能处理SOAP消息(中介体或者最终接收方引起的错误)。例如:当接收节点处理SOAP消息不能连接到数据库等资源,就会产生一个Server错误。
            VersionMismatch表示接收节点不能识别SOAP消息的Envelope元素的命名空间,例如:SOAP 1.1的节点接收到SOAP1.2消息。
            MustUnderstand表示节点不能识别“MustUnderstand=1”指定的header,就会产生这个类型的fault。
            还有一些非标准的错误信息例如:

          < soap:Body >
              
< soap:Fault >
                          < faultcode > wsse:InvalidSecurityToken </ faultcode >
                     
< faultstring > An invalid security token was provided </ faultstring >
                     
< detail />
                
</ soap:Fault >
          
</ soap:Body >


        7.2 faultstring元素
              faultstring表示错误的描述,是强制性元素,可以使用特殊属性xml:lang表示文本消息使用的语言。

        7.3 faultactor元素
              faultactor表示遇到错误并且产生错误的节点,如果错误节点是一个中介节点,那么需要使用faultactor元素,但是如果错误节点是最终接收方,则该元素可选。
 
        7.4 detail元素

       如果Body元素的内容产生错误,必须包含错误消息的detail元素,但是如果文件头发生错误,则不能包含该元素

八、SOAP和HTTP
        目前最常用SOAP的传输体是HTTP。大多数HTTP的传输由HTTP GET请求和HTTP应答组成的,HTTP GET请求指定了请求的页面,可以包含一些参数,HTTP response作为有效负载返回到到请求方。另外,HTTP POST请求有效负载,所以适合携带SOAP消息。

        8.1 HTTP POST消息传输的SOAP
              HTTP POST消息必须包含SOAPAction文件字头;SOAP1.2用(“application/soap+xml”) MIME类型替换SOAPAction文件头。
              Content-Type是text/xml,表示有效负载是一个XML文档。带附件的SOAP会指定mulitpart/related,但是不推荐这样做。

        8.2 HTTP响应代码
              200-level的HTTP成功代码包括:
                     200 OK表示消息没有错误;包含一个正常的SOAP响应消息。
                     200 Accepted:表示成功处理了请求,但是没有SOAP响应数据,类似与void返回类型。
              400-level错误
                     400 Bad Request:表示SOAP消息中的HTTP请求或者XML格式不正确
                     405 Method Not Allowed:如果不是通过HTTP POST方式传递的SOAP消息,返回此错误。
                     415 Unsupported Media Type:text/xml值包含一个Content-Type文件头,否则将返回此错误。
              500 Internal Server Error:当请求/响应MEP中的响应消息是SOAP错误时,必须使用此代码。

分享到:
评论

相关推荐

    webservice之soap.jar

    "webservice之soap.jar" 是一个Java库,主要用于支持开发和运行基于SOAP的Web服务。此jar包包含了处理SOAP消息和与SOAP服务器交互所需的所有类和方法。在Java环境中,开发Web服务时,这个库是非常重要的工具。 1. *...

    webservice、soap等接口调用参考

    SOAP(Simple Object Access Protocol),简单对象访问协议,是用于在Web上交换结构化和类型化信息的一种协议,它是构建Web服务的核心技术之一。 在标题和描述中提到的"webservice,soap调用",这是指使用SOAP协议...

    C#WebService-Soap扩展实现安全认证

    分高但绝对值-简介: 1、利用SoapExtension,...3、在写WebService时只需加认证标签,客户端调用时传入SoapHeader,即可完成认证。 4、当然你还可以发挥,比如压缩消息,日志记录,Trace之类,网上也有很多文章讲。

    C#winform下WebService Soap应用

    C# Winform 下的 WebService Soap 应用 在本文中,我们将详细介绍如何使用 C# 语言在 Winform 平台下开发 WebService Soap 应用,以实现列车时刻、手机归属、QQ 在线、航空时刻等查询工具。 WebService Soap 简介 ...

    .NET 访问JAVA的WEBSERVICE使用SOAP头

    本文将深入探讨如何在.NET应用中访问Java的WebService,并通过SOAP头进行身份验证的过程,这一过程对于实现安全的跨平台通信至关重要。 ### 1. SOAP头在Web服务中的作用 SOAP(Simple Object Access Protocol)是...

    java+soap+webservice 调用模拟

    通过阅读提供的"java-soap-webservice"文档,你可以进一步了解具体的实现步骤,包括如何设置项目、配置JAX-WS、生成客户端代码、编写调用服务的代码,以及如何解析响应。实践中,不断动手操作和调试是掌握这一技术的...

    c#2.0使用TraceExtension记录WebService的Soap日志

    在本讨论中,我们将深入探讨如何利用C# 2.0的TraceExtension来记录WebService的SOAP日志。这对于调试、性能分析以及理解服务间的交互至关重要。 SOAP(简单对象访问协议)是Web服务的标准通信协议,用于交换结构化...

    Java使用SOAP获取webservice实例解析

    ### Java使用SOAP获取WebService实例解析 #### WebService简介 WebService是一种跨编程语言和操作系统平台的、在网络上进行数据交换的一种方式。它使用标准的Internet协议,如HTTP、XML、SOAP等来实现不同系统间的...

    C#实现SOAP调用WebService

    最近写了一个SOA服务,开始觉得别人拿到我的服务地址,然后直接添加引用就可以使用了,结果"大牛"告知不行。...让我写一个SOAP调用服务的样例,我有点愣了,因为没做过这方面的,于是搞到了一个Demo,然后学习了下。

    Webservice下Soap、WSDL规范详解

    详细描述WebService中SOAP协议的规范,以及WSDL文件所需要包含的要素

    webservice-soap资料

    标题“webservice-soap资料”表明这是一份关于Web服务特别是SOAP协议的文档集合。SOAP协议是Web服务的基础,它使用HTTP协议作为传输机制,XML作为消息格式,从而实现了跨平台的远程调用。SOAP消息通常包含三部分:...

    VB.NET/JAVA 采用SOAP 与Webservice发送/接收数据

    ### VB.NET与Java通过SOAP协议访问WebService的知识点 #### 一、基础知识介绍 - **SOAP (Simple Object Access Protocol)**: 是一种轻量级协议,用于交换结构化的信息。它定义了用于构造消息以及进行信息传输的...

    客户端调用webservice方式一(soap请求)

    本教程将详细讲解客户端如何通过SOAP(Simple Object Access Protocol)请求调用WebService,以实现根据订单号获取订单的物流信息。 **SOAP请求详解** SOAP是一种XML(eXtensible Markup Language)格式的消息协议...

    SOAP webserivce 和 RESTful webservice 对比及区别

    相比之下,SOAP服务的安全控制通常涉及更复杂的XML消息验证和处理,因为所有的业务逻辑和安全信息都封装在SOAP消息中。这可能导致在现有的HTTP代理服务器上实现安全策略时遇到困难,因为代理可能无法直接解析和处理...

    JS实现 WebService Soap 通讯

    JS WebService Soap 通讯,查询QQ号码在线状态,手机号码归属地

    Soap WebService 调试工具

    SOAP WebService调试工具是开发人员用来测试、验证和调试SOAP接口的重要工具。本文将详细介绍SOAP WebService调试工具,并以“SoapUI”为例进行讲解。 SOAPUI是一款功能强大的开源工具,专为SOAP和REST Web服务测试...

    webservice soap抓取工具

    WebService和SOAP(Simple Object Access Protocol)是两个关键的IT概念,它们在分布式系统和企业级应用程序集成中扮演着重要角色。本篇文章将深入探讨这两个主题,并介绍如何使用SOAP抓取工具来分析和理解...

    php编写webservice soap服务端及客户端

    标题“php编写webservice soap服务端及客户端”意味着我们将讨论如何使用PHP实现SOAP协议的两个关键部分:服务提供者和服务消费者。 首先,让我们深入了解PHP如何构建SOAP服务端。在PHP中,我们可以使用SoapServer...

    webservice -soap的Demo

    对应个人的博客:自学WebService,该资源是利用Apache CXF技术实现的webservice。

    WebService_SOAP

    WebService_SOAP协议说明文档

Global site tag (gtag.js) - Google Analytics