高级软件工程课件_第1页
高级软件工程课件_第2页
高级软件工程课件_第3页
高级软件工程课件_第4页
高级软件工程课件_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、高级软件工程2022/7/29高级软件工程第1页,共66页。内 容 一、Web 服务简介二、SOAP三、WSDL四、支持Web 服务的J2EE应用2高级软件工程第2页,共66页。一、Web 服务简介2000年 Microsoft 等提出“Web Services”Web服务(Web Services) 是基于 XML 和 HTTP 的一种服务服务访问协议: SOAP服务的描述: WSDL服务查找与发现: UDDI3高级软件工程第3页,共66页。SOAP (Simple Object Access Protocol)XML-based (text) 协议支持远程通信平台中立WSDL (Web S

2、ervices Definition Language)接口描述UDDI (Universal Description, Discovery, and Integration)用于Web Services注册用于发现Web Services4高级软件工程第4页,共66页。客户/服务请求者服务提供者 注册请求/应答查找基本结构:服务信息注册库5高级软件工程第5页,共66页。 提供了软件模块之间一种松耦合的交互方式根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用服务层是SOA的基础,可以直接被应用调用,从而 有效控制系统中与软件代理的人为依赖性SOA的几个关键特性:一种粗粒度、

3、松耦合服务架构,服务之间通过简单、精确定义适配器进行通讯,不涉及 底层编程适配器和通讯模型 6高级软件工程第6页,共66页。RPC vs. DocumentRPC耦合密切些相对脆弱仅仅是调用Document耦合松散些对应用修改适应性好没有序列化/反序列化问题需要额外的设计工作需要解释客户消息内容,然后进行相应操作7高级软件工程第7页,共66页。考虑 Web Services的几个理由业务上需要与外部客户通信技术上应用需要与 其它语言编写的 客户程序通信客户在防火墙之外管理上管理托管 web service 应用8高级软件工程第8页,共66页。什么时候不要使用Web Services客户程序与应

4、用使用相同语言编写通信开销大序列化或者远程访问开销大Web Services/XML 处理开销大“Dont Use XML to Communicate Unless You Really, Really Have To” Floyd Marinescu, The Middleware Company 永远记住:Web Services/XML 是用于集成的9高级软件工程第9页,共66页。Apache Axis (Apache eXtensible Interaction System) 是Apache WebService项目中的子项目 最初起源于IBM的SOAP4J“ 最早的一批用于构造基

5、于SOAP应用的FrameworkJBoss, WAS等重要的应用服务器都集成它典型的 Web 服务支持平台10高级软件工程第10页,共66页。服务器端AXIS 句柄链处理架构用户配置一系列的 handler,构成 handler chainAXIS 依次调用 handler 处理消息(含 context)类似于 interceptor(截取器)11高级软件工程第11页,共66页。客户端AXIS 句柄链处理架构12高级软件工程第12页,共66页。AXIS的子系统13高级软件工程第13页,共66页。二、SOAP1、SOAP概述2、数据表示 3、消息格式 4、协议映射 14高级软件工程第14页,共

6、66页。1、SOAP概述许多程序通过使用远程过程调用(RPC) 在诸如 DCOM 与 CORBA 等对象之间进行通信但RPC 会产生兼容性以及安全问题;防火墙和代理服务器通常会阻止此类流量通过 HTTP 在应用程序间通信是更好的方法因为 HTTP 得到了所有的因特网浏览器及服务器的支持SOAP 就是被创造出来完成这个任务的15高级软件工程第15页,共66页。2000年5月,UserLand、Ariba、Commerce One、Compaq、Developmentor、HP、IBM、IONA、Lotus、Microsoft 以及 SAP 向 W3C 提交了 SOAP 因特网协议期望此协议能够通

7、过使用因特网标准(HTTP 以及 XML)把图形用户界面桌面应用程序连接到因特网服务器首个关于 SOAP 的公共工作草案由 W3C 在 2001 年 12 月发布SOAP 1.2 于 2003 年 6 月 被发布为 W3C 推荐标准16高级软件工程第16页,共66页。简单对象访问协议(SOAP)是网络环境中交换信息的简单协议为网络环境下软件之间结构化、类型化信息的交换提供了一种基于XML的机制它可以广泛地用于基于消息的系统和基于RPC的系统SOAP被设计为可以与各种其它协议结合使用但目前SOAP主要和HTTP及HTTP扩展框架相结合17高级软件工程第17页,共66页。简单地讲,SOAP= HT

8、TP+RPC+ XML即: SOAP以HTTP作为底层通讯协议以RPC作为一致性的调用途径以XML作为数据传送的格式SOAP的设计原则是: 简单、易于扩展SOAP的设计忽略了如下几方面的功能:(1)分布式垃圾回收(2)消息的批处理(3)对象引用(4)对象激活18高级软件工程第18页,共66页。SOAP的数据表示完全不同于以往互操作协议的表示方法以往的互操作协议都将调用语句编排为二进制的字节流的形式SOAP采用XML作为自己的数据表示方法XML是与HTML类似的基于文本的标记语言SOAP将调用语句编排为文本式的字符流的形式 2、数据表示19高级软件工程第19页,共66页。SOAP消息是一个XML

9、文档包括:一个必需的SOAP封装一个可选的SOAP头一个必需的SOAP体3、消息格式20高级软件工程第20页,共66页。SOAP封装定义了描述信息和如何处理信息的框架用于指定用XMLSchema来描述XML数据的编码规则封装可以包含名域声明和附加属性如果包含附加属性,这些属性必须限定名字域类似的,“Envelope”可以包含附加子元素这些也必须限定名字域且跟在SOAP体元素之后(1)SOAP封装21高级软件工程第21页,共66页。SOAP消息头是SOAP消息的可选部分用来扩展其它诸如安全、事务等服务的重要机制如果出现的话,必须是SOAP 封装元素的第一个直接子元素SOAP头可以包含多个SOAP

10、块每个都是SOAP头元素的直接子元素所有SOAP头的直接子元素都必须限定名字域(2)SOAP消息头22高级软件工程第22页,共66页。SOAP体在SOAP消息中必须出现且必须是SOAP封装元素的直接子元素SOAP体可以包括多个条目每个条目必须是SOAP体元素的直接子元素SOAP体元素的直接子元素可以限定名字域(3)SOAP体23高级软件工程第23页,共66页。SOAP自然地遵循HTTP的请求/应答消息模型使得SOAP的请求和应答参数可以包含在HTTP请求和应答中 SOAP HTTP遵循HTTP 中表示通信状态信息的HTTP状态码的语义例如,2xx状态码表示这个包含了SOAP组件的客户请求已经被

11、成功的收到、理解和接受下页的代码是一个使用POST的SOAP HTTP例子该消息通过HTTP发出一条请求“获取股票代码为ABC的最新交易价格” 24高级软件工程第24页,共66页。POST /StockQuote HTTP/1.1Host: Content-Type: text/xml; charset=utf-8Content-Length: nnnnSOAPAction: Some-URI 5 ABC 25高级软件工程第25页,共66页。1、互操作开销不同IIOP、JRMP使用二进制的字节流形式编排消息 (CDR、XDR)SOAP采用字符型的XML编排消息 SOAP消息要比IIOP、JRM

12、P消息长得多SOAP的编排开销大、占用内存空间大2、表达能力不同SOAP易于学习、易于开发、易于调试SOAP不支持消息的批处理、对象引用、对象激活等特性降低了SOAP的表达能力并使得基于SOAP的交互受到限制而IIOP、JRMP等则不存在这种限制与其它协议的比较26高级软件工程第26页,共66页。3、适应能力不同IIOP、JRMP严重制约于防火墙防火墙一般由两个路由器与一个应用程序网关构成 路由器负责IP层的分组信息列出可接受、禁止的源端和目标端等信息 应用程序网关在应用程序级进行控制 根据头信息字段、消息长度、消息内容等 决定传送还是丢弃消息这是IIOP、JRMP的应用受到限制的核心因素之一

13、SOAP则基本不受其限制4、适用环境不同JRMP适用于使用JAVA的应用系统IIOP、SOAP支持各种语言,因此适用面更广IIOP适合于同一个防火墙内部之间的交互而SOAP则适合于跨越防火墙的交互27高级软件工程第27页,共66页。三、WSDL1、概述2、文档结构3、例子4、向SOAP的映射28高级软件工程第28页,共66页。1、概述WSDL(Web Services Description Language)是一个建议性标准在Microsoft的SDL(Service Description Language和SCL(SOAP Contract Language)和IBM的NASSL(Net

14、work Accessible Service Specification Language)这两项技术的结合,形成了WSDL的基础2000年9月25日IBM、Microsoft和Ariba提出WSDL1.02001年3月15日,他们提交的WSDL1.1成为W3C的Note2002年7月9日提出 WSDL 1.22003年11月10日提出 WSDL 2.029高级软件工程第29页,共66页。 类型 消息 端口类型 绑定 服务 操作 操作 端口 抽 象 定 义 具体说明 WSDL文档 代表依赖关系 代表包含关系 2、文档结构30高级软件工程第30页,共66页。类型:独立于计算机和语言的类型定义使

15、用某一类型系统(例如XSD)进行数据类型定义的容器用于描述被交换的消息消息:对通信数据的一个抽象、类型化定义一个消息包含多个逻辑部分每一个都与某一个类型系统中的定义相关联包含函数参数(输入与输出分开)或文档说明端口类型:由一个或多个端点支持操作的抽象集合每个操作对应于一个输入消息与一个输出消息它引用消息节中的消息定义来说明函数基调操作名称、输入参数和输出参数 等(1)抽象定义 31高级软件工程第31页,共66页。绑定:为一个由特定端口类型定义的操作与消息指定具体的协议及数据格式规范服务:指定每个绑定的端口地址(2)具体说明 32高级软件工程第32页,共66页。definitions name=

16、FooSample 3、例子33高级软件工程第33页,共66页。 34高级软件工程第34页,共66页。interface FooSample long foo(long arg);用OMG-IDL表示为:35高级软件工程第35页,共66页。对应的SOAP请求消息为: 5131953 4、向SOAP的映射36高级软件工程第36页,共66页。513195337高级软件工程第37页,共66页。与其它描述方法的比较有的以描述结构化程序的功能为主例如RPC-IDL微软的-IDL有的以描述对象的功能为主例如CORBA的IDL有的以描述服务为主例如web service的WSDL1、描述对象不同38高级软件

17、工程第38页,共66页。有的以具体计算机语言的方式表达例如SUN的Java Interface有的以独立于具体的计算机语言但十分类似于计算机语言的方式表达例如:RPC-IDL微软的-IDLCORBA的IDL有的以XML为方式表达例如:web service的WSDL2、描述方式不同39高级软件工程第39页,共66页。有的仅描述接口的语法信息例如:RPC-IDL微软的-IDLCORBA的IDL有的还包括与底层协议的绑定信息例如:WSDL等在CORBA中这部分信息包含在IOR中3、描述内容不同40高级软件工程第40页,共66页。如何为 web 系统增加web services接口下面模块可以暴露为

18、 Web Services:EJBPOJO后面的例子针对 EJB四、支持Web 服务的J2EE应用41高级软件工程第41页,共66页。JAX-RPC: Java API for XML-based RPCJava世界的 web service 编程模型规范 如何以类似 RPC 的方式调用 web serviceJAXRPC的客户端编程模式有以下的三种:Static stub(静态的客户端存根调用)Dynamic proxy (部分动态的代理调用)Dynamic invocation interface (DII)(动态调用接口)42高级软件工程第42页,共66页。三种JAXRPC的客户端编程模

19、式43高级软件工程第43页,共66页。Static stub1) 首先通过映射转换将服务描述的WSDL文档生成客户端的Java stub2) 然后实例化服务的locator实例3) 通过loacator获得服务在客户端的代理4) 用客户端代理 去调用服务44高级软件工程第44页,共66页。package itso.test;import java.io.*;import java.util.*;import itso.test.*;public class WeatherForecastClient public static void main(String args) try Weathe

20、rForecastServiceLocator wsl = new WeatherForecastServiceLocator(); WeatherForecastService ws = (WeatherForecastService) wsl.getWeather(); String temperature = ws.getTemperature(); System.out.println(temperature); System.out.println(WeatherForecastClient completed); catch (Exception e) e.printStackTr

21、ace(); 45高级软件工程第45页,共66页。Dynamic proxy与Static stub 不同的是可以指定生成的客户端代理importspace.QName;importjava.io.*;importjava.util.*;publicclassWeatherForecastDynamicProxyClientpublicstaticvoidmain(Stringargs) try WeatherForecastServiceLocatorwsl=newWeatherForecastServiceLocator(); QNameqn=newQName(,WeatherForeca

22、st); WeatherForecastws=(WeatherForecast) wsl.getPort(qn,WeatherForecast.class); Stringtemperature=ws.getTemperature(); System.out.println(temperature); System.out.println(DynamicProxyJavaClientcompleted); catch(Exceptione)e.printStackTrace(); 46高级软件工程第46页,共66页。一个汽车网站的例子例子构成:JSPsController ServletSta

23、teless Session Bean InventoryFacadeBeanHibernate DAOs暴露对象: InventoryFacadeBean.findAllAvailableCars()47高级软件工程第47页,共66页。服务端点接口将业务方法暴露为Web Services类似于服务器端的 stub类似于 EJB Remote Interface package com.jbossatwork.ws;/* * Service endpoint interface for InventoryFacade. */public interface InventoryEndpoint

24、extends java.rmi.Remote public com.jbossatwork.ws.CarDTOArray findAvailableCars() throws java.rmi.RemoteException;/ InventoryEndpoint.java48高级软件工程第48页,共66页。修改 ejb-jar.xml InventoryFacadeSB InventoryFacade com.jbossatwork.ws.InventoryEndpoint 49高级软件工程第49页,共66页。webservices.xml定义并注册 InventoryService We

25、b Service将Service Endpoint Interface class 绑定到InventoryFacadeBean EJB告诉 J2EE app server 到哪里找WSDL 与JAX-RPC 映射文件(Mapping files, in EJB JAR file)50高级软件工程第50页,共66页。 InventoryService META-INF/wsdl/InventoryService.wsdl META-INF/inventory-mapping.xml Inventory InventoryEndpointPort com.jbossatwork.ws.Inve

26、ntoryEndpoint InventoryFacade 51高级软件工程第51页,共66页。JAX-RPC 映射文件帮助 JAX-RPC 编译器将Java 对象映射到WSDL 对象复杂的Java 对象导致复杂的JAX-RPC 与WSDL 文件52高级软件工程第52页,共66页。 com.jbossatwork.ws http:/localhost:8080/jbossatwork-ws/types com.jbossatwork.ws http:/localhost:8080/jbossatwork-ws com.jbossatwork.dto.CarDTOArray typeNS:Car

27、DTOArray complexType cars cars 53高级软件工程第53页,共66页。 com.jbossatwork.dto.CarDTO typeNS:CarDTO complexType id id make make model model modelYear modelYear 54高级软件工程第54页,共66页。 status status com.jbossatwork.ws.InventoryService serviceNS:InventoryService InventoryEndpointPort InventoryEndpointPort 55高级软件工程第

28、55页,共66页。 com.jbossatwork.ws.InventoryEndpoint portTypeNS:InventoryEndpoint bindingNS:InventoryEndpointBinding findAvailableCars findAvailableCars com.jbossatwork.dto.CarDTOArray wsdlMsgNS:InventoryEndpoint_findAvailableCarsResponse result 56高级软件工程第56页,共66页。 WSDL File57高级软件工程第57页,共66页。 58高级软件工程第58页,

29、共66页。 59高级软件工程第59页,共66页。 InventoryFacade Inventory jbossatwork-ws/InventoryService 修改 WSDL URL60高级软件工程第60页,共66页。修改 EJB/* * ejb.bean * name=InventoryFacade * * view-type=all * * * wsee.port-component * name=Inventory * wsdl-port=InventoryEndpointPort * service-endpoint-interface=com.jbossatwork.ws.InventoryEndpoint * service-endpoint-bean=com.jbossatwork.ejb.InventoryFacadeBean * * erface * service-endpoint-class=com.jbossatwork.ws.InventoryEndpoint * */public class InventoryFacadeBean implements SessionBean 61高级软件工程第61页,共66页。 /* * er

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论