




免费预览已结束,剩余15页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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的命名空间/2001/12/soap-envelope中声明; SOAP的语法规则 SOAP 消息必须用 XML 来编码 SOAP 消息必须使用 SOAP Envelope 命名空间 SOAP 消息必须使用 SOAP Encoding 命名空间 SOAP 消息不能包含 DTD 引用 SOAP 消息不能包含 XML 处理指令 SOAP 消息的基本结构 Java代码 1. 2. 5. 6. . 7. . 8. 9. 10. . 11. . 12. 13. . 14. . 15. 16. 17. . . . . . . SOAP Envelope 元素 Envelope 元素是 SOAP 消息的根元素。它指明 XML 文档是一个SOAP 消息。它的属性 xmlns:soap的值必须是/2001/12/soap-envelope。 encodingStyleu 属性,语法:soap:encodingStyle=URI encodingStyle 属性用于定义文档中使用的数据类型。此属性可出现在任何 SOAP 元素中,并会被应用到元素的内容及元素的所有子元素上。 Java代码 1. 2. 5. . 6. Messageinformationgoeshere 7. . 8. . Message information goes here .SOAP Header 元素 actor 属性,语法soap:actor=URI 通过沿着消息路径经过不同的端点,SOAP 消息可从某个发送者传播到某个接收者。并非 SOAP 消息的所有部分均打算传送到 SOAP 消息的最终端点,不过,另一个方面,也许打算传送给消息路径上的一个或多个端点。SOAP 的 actor 属性可被用于将 Header 元素寻址到一个特定的端点。 mustUnderstand 属性 ,语法soap:mustUnderstand=0|1 SOAP 的 mustUnderstand 属性可用于标识标题项对于要对其进行处理的接收者来说是强制的还是可选的。假如您向 Header 元素的某个子元素添加了 mustUnderstand=1,则要求处理此头部的接收者必须认可此元素。 Java代码 1. 2. 5. 6. 234 10. 11. . 12. . 13. 234.SOAP Body 元素 必需的 SOAP Body 元素可包含打算传送到消息最终端点的实际 SOAP 消息。Body元素中既可以包含SOAP定义的命名空间中的元素,如Fault,也可以是用户的应用程序自定义的元素。以下是一个用户定义的请求: Java代码 1. 2. 5. 6. 7. Apples 8. 9. 10. Apples 上面的例子请求苹果的价格。请注意,上面的 m:GetPrice 和 Item 元素是应用程序专用的元素。它们并不是 SOAP 标准的一部分。而对应的 SOAP 响应应该类似这样: Java代码 1. 2. 5. 6. 7. 1.90 8. 9. 10. 1.90 SOAP Fault 元素 Fault 元素表示 SOAP的错误消息。它必须是 Body 元素的子元素,且在一条 SOAP 消息中,Fault 元素只能出现一次。Fault 元素拥有下列子元素: 常用的SOAP Fault Codes HTTP协议中的SOAP 实例 下面的例子中,一个 GetStockPrice 请求被发送到了服务器。此请求有一个 StockName 参数,而在响应中则会返回一个 Price 参数。此功能的命名空间被定义在此地址中: /stock SOAP 请求:(注意HTTP的Head属性) Java代码 1. POST/InStockHTTP/1.12. Host: 3. Content-Type:application/soap+xml;charset=utf-84. Content-Length:XXX 5. 6. 7. 10. 11. 12. IBM 13. 14. 15. POST /InStock HTTP/1.1Host: Content-Type: application/soap+xml; charset=utf-8Content-Length: XXX IBM SOAP 响应:(注意HTTP的Head属性) Java代码 1. HTTP/1.1200OK 2. Content-Type:application/soap+xml;charset=utf-83. Content-Length:XXX 4. 5. 6. 9. 10. 11. 34.5 12. 13. 14. HTTP/1.1 200 OKContent-Type: application/soap+xml; charset=utf-8Content-Length: XXX 34.5 HTTP协议中的SOAP RPC工作流程 WSDL简介 介绍过了SOAP,让我们关注Web Service中另外一个重要的组成WSDL。 WSDL的主要文档元素 WSDL文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随机器或语言而变的元素。这就定义了一系列服务,截然不同的应用都可以实现。具体部分,如数据的序列化则归入底部分,因为它包含具体的定义。在上述的文档元素中,、属于抽象定义层,、属于具体定义层。所有的抽象可以是单独存在于别的文件中,也可以从主文档中导入。 WSDL文档的结构实例解析 下面我们将通过一个实际的WSDL文档例子来详细说明各标签的作用及关系。 Java代码 1. 2. 9. 10. 11. 12. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 52. 53. 54. 55. 57. 58. 59. 61. 62. 63. 64. 65. 66. 68. 69. 70. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 由于上面的事例XML较长,我们将其逐段分解讲解 WSDL文档的根元素:definitions Java代码 1. 8. 9. 10. definitions定义了文档中用到的各个xml元素的namespace缩写,也界定了本文档自己的targetNamespace=/wstest,这意味着其它的XML要引用当前XML中的元素时,要声明这个namespace。注意xmlns:tns=/wstest这个声明,它标示了使用tns这个前缀指向自身的命名空间。 引用WSDL文档数据类型定义元素:Java代码 1. 2. 3. 6. 7. 标签定义了当前的WSDL文档用到的数据类型。要说明的是,为了最大程度的平台中立性,WSDL 使用 XML Schema 语法来定义数据类型。这些数据类型用来定义web service方法的参数和返回指。对于通用的原生数据类型如:integer , boolean , char , float等,在W3C的标准文档/2001/XMLSchema中已经做了定义。这里我们要引入的schema定义schemaLocation=http:/localhost:8080/hello?xsd=1是我们自定义的Java对象类型。 WSDL文档消息体定义元素: Java代码 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. message元素定义了web service函数的参数。message元素中的每个part子元素都和某个参数相符。输入参数在message元素中定义,与输出参数相隔离,输出参数有自己的message元素。兼作输入、输出的参数在输入输出的message元素中有它们相应的part元素。输出message元素以Response结尾,对Java而言方法得返回值就对应一个输出的message。每个part元素都有名字和类型属性,就像函数的参数有参数名和参数类型。 在上面的文档中有两个输入参数、两个输出参数和一个错误参数(对应Java中的Exception)。 u 输入参数message的name属性分别命名为toSayHello,sayHello。 toSayHello对应输入参数userName,参数类型为xsd:string,在Java语言中就是String; sayHello对应两个输入参数person和arg1,类型为tns:person和xsd:string。这里tns:person类型就是引用了标签中的类型定义。 u 输出参数message的name属性分别命名为toSayHelloResponse和sayHelloResponse。 这个名称和输入参数的message标签name属性对应,在其后面加上Response尾缀。 toSayHelloResponse对应的返回值是returnWord,参数类型为xsd:string; sayHelloResponse对应的返回值是personList,参数类型为tns:personArray(自定义类型); u 错误参数message的name属性为HelloException。 它的子标签element而不是type来定义类型。 以上的message标签的name属性通常使用web service函数方法名作为参照,错误参数标签则使用异常类名为参照。标签中的参数名称,即part子元素的name属性是可自定义的(下一章节详细说明)。message标签的参数类型将引用types标签的定义。 WSDL文档函数体定义元素: Java代码 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 元素是最重要的 WSDL 元素。它可描述一个 web service、可被执行的操作,以及相关的消息。portType的name属性对应Java中的一个服务类的类名。 元素使用其子元素描述一个web service的服务方法。 在元素中,name属性表示服务方法名,parameterOrd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 33210-2025无损检测基于逆磁致伸缩效应的残余应力检测方法
- 听力筛查考试题及答案
- 天天学农各章节测试考试题及答案
- 2025年公营养师之三级营养师题库附答案
- 2025年高级钳工题库+答案
- 2025年高级技师钳工试题及答案
- 2025年高级焊工职业技能考试练习题附答案
- 物竞预赛试题及答案
- 营销经营与管理办法
- 纸张使用及管理办法
- 2025小红书电商简介
- 2025年教育综合知识试题及答案
- 乡镇学校资助管理办法
- 连锁餐饮学生管理办法
- 铁路信息技术课件
- 小学冠词教学课件
- 工程造价咨询绿色施工支持措施
- 大模型时代:生成式AI发展与科技创新范式
- 法律法规师德师风培训内容
- 江苏欧立可化工新材料有限公司年产10万吨石油添加剂N-甲基苯胺项目环评资料环境影响
- 黄浦区2024-2025学年六年级下学期期末考试数学试卷及答案(上海新教材沪教版)
评论
0/150
提交评论