`

Webservice-[0]

    博客分类:
  • J2EE
阅读更多

http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/ Which style of WSDL should I use?

Web Service概述

Web Service的定义
W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计。Web Service服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执行远程系统的请求服务。

这里我们从一个程序员的视角来观察web service。在传统的程序编码中,存在这各种的函数方法调用。通常,我们知道一个程序模块M中的方法A,向其发出调用请求,并传入A方法需要的参数P,方法A执行完毕后,返回处理结果R。这种函数或方法调用通常发生在同一台机器上的同一程序语言环境下。现在的我们需要一种能够在不同计算机间的不同语言编写的应用程序系统中,通过网络通讯实现函数和方法调用的能力,而Web service正是应这种需求而诞生的。

最普遍的一种说法就是,Web Service = SOAP + HTTP + WSDL。其中,SOAP Simple Object Access Protocol)协议是web service的主体,它通过HTTP或者SMTP等应用层协议进行通讯,自身使用XML文件来描述程序的函数方法和参数信息,从而完成不同主机的异构系统间的计算服务处理。这里的WSDL(Web Services Description Language)web 服务描述语言也是一个XML文档,它通过HTTP向公众发布,公告客户端程序关于某个具体的 Web service服务的URL信息、方法的命名,参数,返回值等。
下面,我们先来熟悉一下SOAP协议,看看它是如何描述程序中的函数方法、参数及结果对象的。

SOAP协议简介

什么是SOAP
SOAP 指简单对象访问协议,它是一种基于XML的消息通讯格式,用于网络上,不同平台,不同语言的应用程序间的通讯。可自定义,易于扩展。一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:
• Envelope 元素,标识XML 文档一条 SOAP 消息
• Header 元素,包含头部信息的XML标签
• Body 元素,包含所有的调用和响应的主体信息的标签
• Fault 元素,错误信息标签。

以上的元素都在 SOAP的命名空间http://www.w3.org/2001/12/soap-envelope中声明;
SOAP的语法规则
• SOAP 消息必须用 XML 来编码
• SOAP 消息必须使用 SOAP Envelope 命名空间
• SOAP 消息必须使用 SOAP Encoding 命名空间
• SOAP 消息不能包含 DTD 引用
• SOAP 消息不能包含 XML 处理指令

SOAP 消息的基本结构

Java代码 复制代码
  1. <? xml version= "1.0" ?>   
  2. <soap:Envelope   
  3. xmlns:soap= "http://www.w3.org/2001/12/soap-envelope"   
  4. soap:encodingStyle= "http://www.w3.org/2001/12/soap-encoding" >   
  5. <soap:Header>   
  6.   ...   
  7.   ...   
  8. </soap:Header>   
  9. <soap:Body>   
  10.   ...   
  11.   ...   
  12.   <soap:Fault>   
  13.     ...   
  14.     ...   
  15.   </soap:Fault>   
  16. </soap:Body>   
  17. </soap:Envelope>  
<? 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 元素
Envelope 元素是 SOAP 消息的根元素。它指明 XML 文档是一个SOAP 消息。它的属性 xmlns:soap的值必须是http://www.w3.org/2001/12/soap-envelope。
 encodingStyle 属性,语法:soap:encodingStyle="URI"
encodingStyle 属性用于定义文档中使用的数据类型。此属性可出现在任何 SOAP 元素中,并会被应用到元素的内容及元素的所有子元素上。

Java代码 复制代码
  1. <? xml version= "1.0" ?>   
  2. <soap:Envelope   
  3. xmlns:soap= "http://www.w3.org/2001/12/soap-envelope"   
  4. soap:encodingStyle= "http://www.w3.org/2001/12/soap-encoding" >   
  5.   ...   
  6.   Message information goes here   
  7.   ...   
  8. </soap:Envelope>  
<? 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">
  ...
  Message information goes here
  ...
</soap:Envelope>



SOAP Header 元素

  • actor 属性,语法soap:actor="URI"


通过沿着消息路径经过不同的端点,SOAP 消息可从某个发送者传播到某个接收者。并非 SOAP 消息的所有部分均打算传送到 SOAP 消息的最终端点,不过,另一个方面,也许打算传送给消息路径上的一个或多个端点。SOAP 的 actor 属性可被用于将 Header 元素寻址到一个特定的端点。

  • mustUnderstand 属性 ,语法soap:mustUnderstand="0|1"


SOAP 的 mustUnderstand 属性可用于标识标题项对于要对其进行处理的接收者来说是强制的还是可选的。假如您向 Header 元素的某个子元素添加了 "mustUnderstand="1",则要求处理此头部的接收者必须认可此元素。

Java代码 复制代码
  1. <? xml version= "1.0" ?>   
  2. <soap:Envelope   
  3. xmlns:soap= "http://www.w3.org/2001/12/soap-envelope"   
  4. soap:encodingStyle= "http://www.w3.org/2001/12/soap-encoding" >   
  5. <soap:Header>   
  6. <m:Trans   
  7. xmlns:m= "http://www.jsoso.net/transaction/"     
  8. soap:mustUnderstand= "1"     
  9. soap:actor="http: //www.w3schools.com/appml/ “  >234</m:Trans>   
  10. </soap:Header>   
  11. ...   
  12. ...   
  13. </soap:Envelope>  
<? 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>
<m:Trans
xmlns:m="http://www.jsoso.net/transaction/" 
soap:mustUnderstand="1" 
soap:actor="http://www.w3schools.com/appml/ “  >234</m:Trans>
</soap:Header>
...
...
</soap:Envelope>



SOAP Body 元素
必需的 SOAP Body 元素可包含打算传送到消息最终端点的实际 SOAP 消息。Body元素中既可以包含SOAP定义的命名空间中的元素,如Fault,也可以是用户的应用程序自定义的元素。以下是一个用户定义的请求:

Java代码 复制代码
  1. <? xml version= "1.0" ?>   
  2. <soap:Envelope   
  3. xmlns:soap= "http://www.w3.org/2001/12/soap-envelope"   
  4. soap:encodingStyle= "http://www.w3.org/2001/12/soap-encoding" >   
  5. <soap:Body>   
  6.    <m:GetPrice xmlns:m= "http://www.jsoso.net/prices" >   
  7.       <m:Item>Apples</m:Item>   
  8.    </m:GetPrice>   
  9. </soap:Body>   
  10. </soap:Envelope>  
<? 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:Body>
   <m:GetPrice xmlns:m="http://www.jsoso.net/prices">
      <m:Item>Apples</m:Item>
   </m:GetPrice>
</soap:Body>
</soap:Envelope>


上面的例子请求苹果的价格。请注意,上面的 m:GetPrice 和 Item 元素是应用程序专用的元素。它们并不是 SOAP 标准的一部分。而对应的 SOAP 响应应该类似这样:

Java代码 复制代码
  1. <?xml version= "1.0" ?>   
  2. <soap:Envelope   
  3. xmlns:soap= "http://www.w3.org/2001/12/soap-envelope"   
  4. soap:encodingStyle= "http://www.w3.org/2001/12/soap-encoding" >   
  5. <soap:Body>   
  6.    <m:GetPriceResponse xmlns:m= "http://www.jsoso.net/prices" >   
  7.       <m:Price> 1.90 </m:Price>   
  8.    </m:GetPriceResponse>   
  9. </soap:Body>   
  10. </soap:Envelope>  
<?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:Body>
   <m:GetPriceResponse xmlns:m="http://www.jsoso.net/prices">
      <m:Price>1.90</m:Price>
   </m:GetPriceResponse>
</soap:Body>
</soap:Envelope>



SOAP Fault 元素
Fault 元素表示 SOAP的错误消息。它必须是 Body 元素的子元素,且在一条 SOAP 消息中,Fault 元素只能出现一次。Fault 元素拥有下列子元素:

常用的SOAP Fault Codes


HTTP协议中的SOAP 实例
下面的例子中,一个 GetStockPrice 请求被发送到了服务器。此请求有一个 StockName 参数,而在响应中则会返回一个 Price 参数。此功能的命名空间被定义在此地址中: "http://www.jsoso.net/stock"

  • SOAP 请求:(注意HTTP的Head属性)

 

Java代码 复制代码
  1. POST /InStock HTTP/ 1.1   
  2. Host: www.jsoso.net   
  3. Content-Type: application/soap+xml; charset=utf- 8   
  4. Content-Length: XXX   
  5.   
  6. <? xml version= "1.0" ?>   
  7. <soap:Envelope   
  8. xmlns:soap= "http://www.w3.org/2001/12/soap-envelope"   
  9. soap:encodingStyle= "http://www.w3.org/2001/12/soap-encoding" >   
  10.   <soap:Body xmlns:m= "http://www.jsoso.net/stock" >   
  11.     <m:GetStockPrice>   
  12.       <m:StockName>IBM</m:StockName>   
  13.     </m:GetStockPrice>   
  14.   </soap:Body>     
  15. </soap:Envelope>  
POST /InStock HTTP/1.1
Host: www.jsoso.net
Content-Type: application/soap+xml; charset=utf-8
Content-Length: XXX

<? 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:Body xmlns:m="http://www.jsoso.net/stock">
    <m:GetStockPrice>
      <m:StockName>IBM</m:StockName>
    </m:GetStockPrice>
  </soap:Body>  
</soap:Envelope>

 

  • SOAP 响应:(注意HTTP的Head属性)

 

Java代码 复制代码
  1. HTTP/ 1.1   200  OK   
  2. Content-Type: application/soap+xml; charset=utf- 8   
  3. Content-Length: XXX   
  4.   
  5. <? xml version= "1.0" ?>   
  6. <soap:Envelope   
  7. xmlns:soap= "http://www.w3.org/2001/12/soap-envelope"   
  8. soap:encodingStyle= "http://www.w3.org/2001/12/soap-encoding" >   
  9.   <soap:Body xmlns:m= "http://www.jsoso.net/stock" >   
  10.     <m:GetStockPriceResponse>   
  11.       <m:Price> 34.5 </m:Price>   
  12.     </m:GetStockPriceResponse>   
  13.   </soap:Body>     
  14. </soap:Envelope>  
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: XXX

<? 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:Body xmlns:m="http://www.jsoso.net/stock">
    <m:GetStockPriceResponse>
      <m:Price>34.5</m:Price>
    </m:GetStockPriceResponse>
  </soap:Body>  
</soap:Envelope>



HTTP协议中的SOAP RPC工作流程

分享到:
评论

相关推荐

    webservice-*.jar共5个jar包

    webservices-api-2.2.jar.zip webservices-extra-2.2.jar.zip webservices-extra-api-2.2.jar.zip webservices-rt-1.2.jar.zip webservices-tools-2.2.0-4.jar.zip 如果还需要其他jar包,请留言留邮箱,如果我有,就...

    webservice-cxf-spring-jar.zip

    【标题】"webservice-cxf-spring-jar.zip" 是一个包含了使用Apache CXF与Spring框架集成开发Web服务的Java库集合。这个压缩包提供了一整套必要的JAR文件,以便于开发者在他们的项目中快速搭建和运行基于CXF的Web服务...

    dubbo-rpc-webservice-2.8.4

    dubbo-rpc-webservice-2.8.4 dubbo-rpc-webservice-2.8.4

    Python库 | PedalPi-WebService-0.3.0.tar.gz

    《Python库PedalPi-WebService-0.3.0详解》 在当今的软件开发领域,Python以其简洁、易读的语法以及丰富的库支持,已经成为后端开发的热门选择。本文将详细介绍一个名为PedalPi-WebService-0.3.0的Python库,这是一...

    webservice-client-demo.rar

    【标题】"webservice-client-demo.rar" 是一个与之前的 "webservice-service-demo.rar" 相对应的压缩包,它主要展示了如何在SpringBoot环境下构建并使用Web服务客户端来调用已经存在的Web服务。这个Demo旨在帮助...

    webservice-service-demo.rar

    【标题】"webservice-service-demo.rar" 是一个包含SpringBoot 2.0集成Webservice服务的演示项目。这个压缩包提供了发布Webservice服务的基本步骤和关键组件,旨在帮助开发者了解如何在SpringBoot环境下构建和使用...

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

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

    WebService------AXIS

    WebService——AXIS详解 在IT领域,WebService是一种基于标准的、平台无关的、可以在不同系统之间交换数据的方式。它利用XML(可扩展标记语言)作为数据格式,HTTP作为传输协议,SOAP(简单对象访问协议)作为消息...

    EOS发布WebService-服务端

    标题中的“EOS发布WebService-服务端”指的是EOS(Enterprise Object Services)系统开发中关于构建Web服务服务器端的部分。EOS是一个面向对象的服务框架,通常用于构建分布式应用和企业级系统。在这样的系统中,...

    Webservice-CXF实用手册学习大全

    WebService-CXF实用手册学习大全的知识点涵盖了WebService技术的多个方面,主要分为以下几个部分: 1. WebService基础: - WebService是一种通过网络提供服务的技术,使用HTTP作为传输协议,SOAP作为消息格式,...

    WebService-CXF.ppt

    WebService-CXF.ppt

    2、webservice--常用注解1

    WebService 注解详解 WebService 是一种基于 XML 的远程过程调用(RPC)技术,它允许不同的系统之间通过网络进行通信。在 Java 中,WebService 通常使用 JAX-WS(Java API for XML-Based Web Services)来实现。...

    HDI-V-WebService-ToAtlas

    【标题】"HDI-V-WebService-ToAtlas" 指的可能是一个关于使用Web服务(WebService)集成到Atlas框架的教程或演示。在IT行业中,Web服务是一种通过HTTP协议进行通信,实现不同系统间数据交换的技术。而Atlas是微软ASP...

    webservice -Restful的Demo

    **WebService与RESTful简介** WebService是一种通过网络在不同系统间交换数据的方式,它基于开放标准,如XML(可扩展标记语言)和WSDL(Web服务描述语言),使得应用程序能够跨越不同的平台进行通信。WebService的...

    1.webservice-cxf-helloworld.part2

    webservice-helloworld 视频 两台机器访问,一个是虚拟机。

    1.webservice-cxf-helloworld.part1

    webservice-helloworld 视频 两台机器访问,一个是虚拟机。 高清

    wsdl.rar_WEBservice-Sqlserver_java webservice_webservice sgip_w

    【标签】"webservice-sqlserver java_webservice webservice__sgip wsdl_webservice_ wsdl.rar"进一步揭示了技术栈。"sqlserver"表明数据库管理是通过SQL Server完成的,这通常涉及到使用JDBC(Java Database ...

    webservice---HelloWorld

    NULL 博文链接:https://newleague.iteye.com/blog/815158

    WebService -AXIS工程

    【WebService - AXIS工程】是一个基于Java的Web服务开发框架,它允许开发者创建、部署和消费Web服务。在本文中,我们将深入探讨WebService和AXIS的相关知识点,并结合标签"源码"和"工具"来理解其核心概念和使用方法...

Global site tag (gtag.js) - Google Analytics