精华内容
参与话题
问答
  • SOAP

    2018-01-25 15:43:15
    SOAP 简介 SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换。 或者更简单地说:SOAP 是用于访问网络服务的协议。 什么是 SOAPSOAP 指简易对象访问协议 SOAP 是一种通信协议 SOAP 用于应用...

    SOAP 简介

    SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换。
    或者更简单地说:SOAP 是用于访问网络服务的协议。

    什么是 SOAP?

    SOAP 指简易对象访问协议
    SOAP 是一种通信协议
    SOAP 用于应用程序之间的通信
    SOAP 是一种用于发送消息的格式
    SOAP 被设计用来通过因特网进行通信
    SOAP 独立于平台
    SOAP 独立于语言
    SOAP 基于 XML
    SOAP 很简单并可扩展
    SOAP 允许您绕过防火墙
    SOAP 将被作为 W3C 标准来发展
    

    为什么使用 SOAP?

    对于应用程序开发来说,使程序之间进行因特网通信是很重要的。

    目前的应用程序通过使用远程过程调用(RPC)在诸如 DCOM 与 CORBA 等对象之间进行通信,但是 HTTP 不是为此设计的。RPC 会产生兼容性以及安全问题;防火墙和代理服务器通常会阻止此类流量。

    通过 HTTP 在应用程序间通信是更好的方法,因为 HTTP 得到了所有的因特网浏览器及服务器的支持。SOAP 就是被创造出来完成这个任务的。

    SOAP 提供了一种标准的方法,使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。

    SOAP 语法
    SOAP 构建模块

    一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:

    必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息
    可选的 Header 元素,包含头部信息
    必需的 Body 元素,包含所有的调用和响应信息
    可选的 Fault 元素,提供有关在处理此消息所发生错误的信息
    

    所有以上的元素均被声明于针对 SOAP 封装的默认命名空间中:

    http://www.w3.org/2001/12/soap-envelope

    以及针对 SOAP 编码和数据类型的默认命名空间:

    http://www.w3.org/2001/12/soap-encoding
    语法规则

    这里是一些重要的语法规则:

    SOAP 消息必须用 XML 来编码
    SOAP 消息必须使用 SOAP Envelope 命名空间
    SOAP 消息必须使用 SOAP Encoding 命名空间
    SOAP 消息不能包含 DTD 引用
    SOAP 消息不能包含 XML 处理指令
    

    SOAP 消息的基本结构

    <?xml version="1.0"?>
    <soap:Envelope
    xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
    soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
    
    <soap:Header>
    ...
    </soap:Header>
    
    <soap:Body>
    ...
      <soap:Fault>
      ...
      </soap:Fault>
    </soap:Body>
    
    </soap:Envelope> 
    

    SOAP Envelope 元素
    必需的 SOAP 的 Envelope 元素是 SOAP 消息的根元素。它可把 XML 文档定义为 SOAP 消息。

    xmlns:soap 命名空间
    SOAP 消息必须拥有与命名空间 “http://www.w3.org/2001/12/soap-envelope” 相关联的一个 Envelope 元素。

    如果使用了不同的命名空间,应用程序会发生错误,并抛弃此消息。

    encodingStyle 属性
    SOAP 的 encodingStyle 属性用于定义在文档中使用的数据类型。此属性可出现在任何 SOAP 元素中,并会被应用到元素的内容及元素的所有子元素上。

    SOAP 消息没有默认的编码方式。
    语法

    soap:encodingStyle="URI"
    

    SOAP Header 元素

    可选的 SOAP Header 元素可包含有关 SOAP 消息的应用程序专用信息(比如认证、支付等)。
    如果 Header 元素被提供,则它必须是 Envelope 元素的第一个子元素。
    注意: 所有 Header 元素的直接子元素必须是合格的命名空间。

    SOAP Body 元素
    必需的 SOAP Body 元素可包含打算传送到消息最终端点的实际 SOAP 消息。
    SOAP Body 元素的直接子元素可以是合格的命名空间。

    SOAP Fault 元素
    可选的 SOAP Fault 元素用于指示错误消息。
    如果已提供了 Fault 元素,则它必须是 Body 元素的子元素。在一条 SOAP 消息中,Fault 元素只能出现一次。

    SOAP 的 Fault 元素拥有下列子元素:
    子元素 描述
    供识别故障的代码
    可供人阅读的有关故障的说明
    有关是谁引发故障的信息
    存留涉及 Body 元素的应用程序专用错误信息
    SOAP Fault 代码

    在下面定义的 faultcode 值必须用于描述错误时的 faultcode 元素中:
    错误 描述
    VersionMismatch SOAP Envelope 元素的无效命名空间被发现
    MustUnderstand Header 元素的一个直接子元素(带有设置为 “1” 的 mustUnderstand 属性)无法被理解。
    Client 消息被不正确地构成,或包含了不正确的信息。
    Server 服务器有问题,因此无法处理进行下去。

    SOAP HTTP 协议
    HTTP 协议

    HTTP 在 TCP/IP 之上进行通信。HTTP 客户机使用 TCP 连接到 HTTP 服务器。在建立连接之后,客户机可向服务器发送 HTTP 请求消息:

    POST /item HTTP/1.1
    Host: 189.123.255.239
    Content-Type: text/plain
    Content-Length: 200

    随后服务器会处理此请求,然后向客户机发送一个 HTTP 响应。此响应包含了可指示请求状态的状态代码:

    200 OK
    Content-Type: text/plain
    Content-Length: 200

    在上面的例子中,服务器返回了一个 200 的状态代码。这是 HTTP 的标准成功代码。

    假如服务器无法对请求进行解码,它可能会返回类似这样的信息:

    400 Bad Request
    Content-Length: 0

    SOAP HTTP Binding

    SOAP 方法指的是遵守 SOAP 编码规则的 HTTP 请求/响应。
    HTTP + XML = SOAP

    SOAP 请求可能是 HTTP POST 或 HTTP GET 请求。

    HTTP POST 请求规定至少两个 HTTP 头:Content-Type 和 Content-Length。
    Content-Type

    SOAP 的请求和响应的 Content-Type 头可定义消息的 MIME 类型,以及用于请求或响应的 XML 主体的字符编码(可选)。
    语法

    Content-Type: MIMEType; charset=character-encoding

    实例

    POST /item HTTP/1.1
    Content-Type: application/soap+xml; charset=utf-8

    Content-Length

    SOAP 的请求和响应的 Content-Length 头规定请求或响应主体的字节数。
    语法

    Content-Length: bytes

    实例

    POST /item HTTP/1.1
    Content-Type: application/soap+xml; charset=utf-8
    Content-Length: 250

    展开全文
  • soap

    2015-08-12 10:29:50
    soap soap是一种基于XML的简易协议,允许程序通过HTTP来交换信息,用在分散或分布的环境中交换信息。 一条soap消息就是一个普通的xml文档,包含下列元素: l 必须的Envelope元素,标识该文档为一条soap消息; l...

    soap

    soap是一种基于XML的简易协议,允许程序通过HTTP来交换信息,用在分散或分布的环境中交换信息。

    一条soap消息就是一个普通的xml文档,包含下列元素:

    l  必须的Envelope元素,标识该文档为一条soap消息;

    l  可选的Header元素,用于传输头信息;

    l  必需的Body元素,包含了所有的调用或响应信息;

    l  可选的Fault元素,提供有关处理错误的信息;

    以上的元素均被声明为针对soap封装的默认命名空间中:http://schemas.xmlsoap.org/soap/envelope/,一条soap消息如下:

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

    xmlns:q0="www.ssl.com"xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

      <soape:Body>

         <q0:add>

           <a>1</a>

           <b>2</b>

         </q0:add>

      </soape:Body>

    </soape:Envelope>

    1、       Header

    可选的Header元素包含有关SOAP消息的应用程序相关信息,如认证、安全等。如果提供Header元素,则必须是Envelop元素的第一个子元素。

    注意:所有Header元素的直接子元素必须有合格的命名空间,如下

    <?xmlversion="1.0"?>

    <soap:Envelope

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

    xmlns:q0="www.ssl.com"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

     <soap:Header>

     <m:Trans xmlns:m="http://www.ssl.com">234</m:Trans> </soap:Header>

    <soap:body>

      …

    </soap:body>

    </soap:Envelope>

    2、       Body

    Body元素是必须的,包含了发送或接受的信息。Body元素的直接子元素也必须有合格的命名空间,如下

    <?xmlversion="1.0"?>

    <soap:Envelope

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

    xmlns:q0="www.ssl.com"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <soap:Body>  

    <m:GetPricexmlns:m="http://www.ssl.com/prices">              <m:Item>Apples</m:Item>  

      </m:GetPrice>

    </soap:body>

    </soap:Envelope>

    该消息的响应消息如下:

    <?xmlversion="1.0"?>

    <soap:Envelope

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

    xmlns:q0="www.ssl.com"xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <soap:Body>  

    <m:GetPriceResponsexmlns:m="http://www.ssl.com/prices">              <m:price>3.6</m:price>  

      </m:GetPriceResponse>

    </soap:body>

    </soap:Envelope>

    对于body元素的非直接子元素,在消息发送和消息响应时最好统一是否增加前缀,如不一致数据接受可能会出现错误。

    3、       Fault

    Fault元素用于传输SOAP的错误信息。如果Fault元素存在,则必须是Body元素的子元素,在一条SOAP消息中,Fault元素只能出现一次。Fault元素有如下子元素:

    l  faultcode,错误代号;

    l   faultString,错误描述信息,最常用;

    l  faultactor

    l  detail

    包含错误信息的SOAP消息如下

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

    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body>

        <S:Faultxmlns:ns4="http://www.w3.org/2003/05/soap-envelope">

           <faultcode>S:Server</faultcode>

           <faultstring>没有认真信息,认证失败</faultstring>

           <detail>

             <ns2:AuthException   xmlns:ns2="http://www.ssl.com/student/">

          <message>没有认真信息,认证失败</message>

        </ns2:AuthException>

    </detail>

         </S:Fault>

        </S:Body>

     </S:Envelope>

     

    4、       Binding

    定义了一种使用底层传输协议来完成在节点间交换SOAP信封的约定。

    5、       API

    SOAP消息基本上是从发送端到接收端的单向传输,常常结合起来执行类似于请求/应答的模式。一条SOAP消息就是一个普通的XML文档,其结构如下图所示,


    在JAX-WS中,一条消息对应一个SOAPMessage实例。SOAPMessage封装了对soap消息的操作。WebService的本质就是SOAP消息的发送和SOAP消息的响应,所以可以通过SOAPMessage实现对webService的调用(其他相关API请参考jaxws-api),如下:

    String ns="ns;

    //1. 创建服务

    URL ur=new URL("wsdl-address");

    QName qname=new QName(ns,"WebServiceName");

    Service service=Service.create(ur, qname);

              

    //2、创建Dispatch

    Dispatch<SOAPMessage> dispatch=service.createDispatch(new QName(ns,"WebServicePortName"),SOAPMessage.class,Service.Mode.MESSAGE);

    //3、创建SOAPMessage

    SOAPMessage message=MessageFactory.newInstance().createMessage();

    SOAPEnvelope envelope=message.getSOAPPart().getEnvelope();

    SOAPBody body=envelope.getBody();

    //4、创建qname来指定消息中传递数据

    //指定那个方法

    QName ename=new QName(ns,"add","nn");

    SOAPBodyElement element=body.addBodyElement(ename);

     element.addChildElement("a").setValue("1");

     element.addChildElement("b").setValue("2");

              

     //打印消息

     message.writeTo(System.out);

     System.out.println("\ninvoking");

              

     //5、通过dispatch传递消息

     SOAPMessage response=dispatch.invoke(message);

     response.writeTo(System.out);

     

     

     

     

    展开全文
  • SOAP

    2008-06-25 10:45:00
    SOAP is a simple XML based protocol to let applications exchange information over HTTP.SOAP是一个简单的基于XML的协议,它让应用...Or more simply: SOAP is a protocol for accessing a Web Service.或者更简单

    SOAP is a simple XML based protocol to let applications exchange information over HTTP. SOAP是一个简单的基于XML的协议,它让应用程序跨HTTP进行信息交换。

    Or more simply: SOAP is a protocol for accessing a Web Service. 或者更简单的:SOAP是用于访问网络服务的协议。

    What You Should Already Know 你应该已经了解的:

    Before you study SOAP you should have a basic understanding of XML and XML Namespaces. 在你学习SOAP 之前,你应该能基本理解以下XML和XML命名空间。 If you want to study these subjects first, please read our XML Tutorial. 如果你想继续看下去,请先访问XML 教程.

    What is SOAP? 什么是SOAP?

    • SOAP stands for Simple Object Access Protocol SOAP代表Simple Object Access Protocol(简单对象访问协议)
    • SOAP is a communication protocol  SOAP是通讯协议
    • SOAP is for communication between applications SOAP用于应用程序之间的通讯
    • SOAP is a format for sending messages SOAP是一种信息发送的格式
    • SOAP is designed to communicate via Internet SOAP是通过因特网来通讯的
    • SOAP is platform independent SOAP是独立的平台
    • SOAP is language independent SOAP是独立的语言
    • SOAP is based on XML SOAP是建立在XML基础之上的
    • SOAP is simple and extensible SOAP是简单并可以扩展的
    • SOAP allows you to get around firewalls SOAP允许透过防火墙传播
    • SOAP will be developed as a W3C standard SOAP会以W3C标准为标准而发展起来。

    Why SOAP? 为什么使用SOAP?

    It is important for application development to allow Internet communication between programs. 对应用程序而言,允许程序之间的因特网通讯是非常重要的。

    Today's applications communicate using Remote Procedure Calls (RPC) between objects like DCOM and CORBA, but HTTP was not designed for this. RPC represents a compatibility and security problem; firewalls and proxy servers will normally block this kind of traffic. 如今的应用软件都是通过对象之间的RPC(远程过程调用,如:DCOM和CORBA)来实现通讯的,但是HTTP却不是这样的。RPC表现为兼容性和安全问题。一般情况下,防火墙和代理服务器会阻塞流量。

    A better way to communicate between applications is over HTTP, because HTTP is supported by all Internet browsers and servers. SOAP was created to accomplish this. 因为所有的因特网浏览器都支持HTTP,所以在应用程序之间进行通讯还有一个更好的办法,就是跨HTTP。SOAP就是基于这个理论而被创建出来的。

    SOAP provides a way to communicate between applications running on different operating systems, with different technologies and programming languages. SOAP提供了一条途径使在不同操作系统上运行的应用程序间实现通讯(通过不同技术和程序设计语言)。

    Microsoft and SOAP 微软和SOAP

    SOAP is a key element of Microsoft's .NET architecture for future Internet application development. 在未来因特网应用程序发展进程中,SOAP是微软.NET体系结构的主要元素。

    SOAP 1.1 was Proposed to W3C 向W3C提议SOAP1.1

    UserLand, Ariba, Commerce One, Compaq, Developmentor, HP, IBM, IONA, Lotus, Microsoft, and SAP proposed to W3C, in May 2000, the SOAP Internet protocol that they hope will revolutionize application development by connecting graphic user interface desktop applications to powerful Internet servers using the standards of the Internet: HTTP and XML. 在2000年5月,UserLand, Ariba, Commerce One, Compaq, Developmentor, HP, IBM, IONA, Lotus, Microsoft和 SAP对W3C做出提议:他们所设想的SOAP英特网协议将通过使用HTTP以及XML两个网络标准把图形用户界面桌面应用程序(graphic user interface desktop applications)连接到强大的英特网服务中。

    W3C is Working on SOAP 1.2 W3C将在SOAP 1.2上运行

    The first public Working Draft on SOAP was published from W3C in December 2001. To read more about the SOAP activities at W3C please visit our W3C tutorial. 2001年12月,SOAP上的第一份公共工作草案将在W3C上公布。如想了解更多SOAP在W3C上的活动,请访问W3C 教程。

    展开全文

空空如也

1 2 3 4 5 ... 20
收藏数 34,014
精华内容 13,605
关键字:

soap