Web服务支持平台.ppt

上传人:少林足球 文档编号:4146056 上传时间:2019-10-23 格式:PPT 页数:64 大小:426KB
返回 下载 相关 举报
Web服务支持平台.ppt_第1页
第1页 / 共64页
Web服务支持平台.ppt_第2页
第2页 / 共64页
Web服务支持平台.ppt_第3页
第3页 / 共64页
Web服务支持平台.ppt_第4页
第4页 / 共64页
Web服务支持平台.ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《Web服务支持平台.ppt》由会员分享,可在线阅读,更多相关《Web服务支持平台.ppt(64页珍藏版)》请在三一文库上搜索。

1、第七讲 Web 服务支持平台,内 容,一、Web 服务简介 二、SOAP 三、WSDL 四、支持Web 服务的J2EE应用,一、Web 服务简介,Web服务(Web Service) 是基于 XML 和 HTTP 的一种服务 其通信协议 主要基于SOAP 服务的描述 通过WSDL 发现和获得服务 通过UDDI,SOAP (Simple Object Access Protocol) XML-based (text) 协议 支持远程通信 平台中立 WSDL (Web Services Definition Language) 接口描述 UDDI (Universal Description, D

2、iscovery, and Integration) 用于Web Services注册 用于发现Web Services,客户/服务请求者,服务提供者,注册,请求/应答,查找,基本结构:,服务信息注册库,提供了软件模块之间一种松耦合的交互方式 根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用 服务层是SOA的基础,可以直接被应用调用,从而 有效控制系统中与软件代理的人为依赖性 SOA的几个关键特性:一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义适配器进行通讯,不涉及 底层编程适配器和通讯模型,RPC vs. Document,RPC 耦合密切些 相对脆弱 仅仅是调用

3、 Document 耦合松散些 对应用修改适应性好 没有序列化/反序列化问题 需要额外的设计工作 需要解释客户消息内容,然后进行相应操作,考虑 Web Services的几个理由,业务上 需要与外部客户通信 技术上 应用需要与 其它语言编写的 客户程序通信 客户在防火墙之外 管理上 管理托管 web service 应用,什么时候不要使用Web Services,客户程序与应用使用相同语言编写 通信开销大 序列化或者远程访问开销大 Web Services/XML 处理开销大 “Dont Use XML to Communicate Unless You Really, Really Have

4、 To” Floyd Marinescu, The Middleware Company 永远记住:Web Services/XML 是用于集成的,Apache Axis (Apache eXtensible Interaction System) 是Apache WebService项目中的子项目 最初起源于IBM的“SOAP4J“ 最早的一批用于构造基于SOAP应用的Framework JBoss, WAS等重要的应用服务器都集成它,典型的 Web 服务支持平台,服务器端AXIS 句柄链处理架构,用户配置一系列的 handler,构成 handler chain AXIS 一次调用 han

5、dler 处理消息(含 context) 类似于 interceptor(截取器),客户端AXIS 句柄链处理架构,AXIS的子系统,二、SOAP,1、SOAP概述 2、数据表示 3、消息格式 4、协议映射,简单对象访问协议(SOAP) 是网络环境中交换信息的简单协议 为网络环境下软件之间结构化、类型化信息的交换 提供了一种基于XML的机制 它可以广泛地用于基于消息的系统和基于RPC的系统 SOAP被设计为可以与各种其它协议结合使用 但目前SOAP主要和HTTP及HTTP扩展框架相结合,1、SOAP概述,简单地讲,SOAP= HTTP+RPC+ XML 即: SOAP 以HTTP作为底层通讯协

6、议 以RPC作为一致性的调用途径 以XML作为数据传送的格式 SOAP的设计原则是: 简单、易于扩展 SOAP的设计忽略了如下几方面的功能: (1)分布式垃圾回收 (2)消息的批处理 (3)对象引用 (4)对象激活,SOAP的数据表示完全不同于以往互操作协议的表示方法 以往的互操作协议都将调用语句编排为 二进制的字节流的形式 SOAP采用XML作为自己的数据表示方法 XML是与HTML类似的基于文本的标记语言 SOAP将调用语句编排为文本式的字符流的形式,2、数据表示,SOAP消息是一个XML文档 包括: 一个必需的SOAP封装 一个可选的SOAP头 一个必需的SOAP体,3、消息格式,SOA

7、P封装定义了描述信息和如何处理信息的框架 用于指定用XMLSchema来描述XML数据的编码规则 封装可以包含名域声明和附加属性 如果包含附加属性,这些属性必须限定名字域 类似的,“Envelope”可以包含附加子元素 这些也必须限定名字域且跟在SOAP体元素之后,(1)SOAP封装,SOAP消息头是SOAP消息的可选部分 用来扩展其它诸如安全、事务等服务的重要机制 如果出现的话,必须是SOAP 封装元素的第一个直接子元素 SOAP头可以包含多个SOAP块 每个都是SOAP头元素的直接子元素 所有SOAP头的直接子元素都必须限定名字域,(2)SOAP消息头,SOAP体在SOAP消息中必须出现

8、且必须是SOAP封装元素的直接子元素 SOAP体可以包括多个条目 每个条目必须是SOAP体元素的直接子元素 SOAP体元素的直接子元素可以限定名字域,(3)SOAP体,SOAP自然地遵循HTTP的请求/应答消息模型 使得SOAP的请求和应答参数可以包含在HTTP请求和应答中,SOAP HTTP遵循HTTP 中 表示通信状态信息的HTTP状态码的语义 例如,2xx状态码表示 这个包含了SOAP组件的客户请求 已经被成功的收到、理解和接受 下页的代码是一个使用POST的SOAP HTTP例子 该消息通过HTTP发出一条请求 “获取股票代码为ABC的最新交易价格”,POST /StockQuote

9、HTTP/1.1 Host: Content-Type: text/xml; charset=“utf-8“ Content-Length: nnnn SOAPAction: “Some-URI“ 5 ABC ,1、互操作开销不同 IIOP、JRMP使用二进制的字节流形式编排消息 (CDR、XDR) SOAP采用字符型的XML编排消息 SOAP消息要比IIOP、JRMP消息长得多 SOAP的编排开销大、占用内存空间大 2、表达能力不同 SOAP易于学习、易于开发、易于调试 SOAP不支持消息的批处理、对象引用、对象激活等特性 降低了SOAP的表达能力 并使得基于SOAP的交互受到限制 而II

10、OP、JRMP等则不存在这种限制,与其它协议的比较,3、适应能力不同 IIOP、JRMP严重制约于防火墙 防火墙一般由两个路由器与一个应用程序网关构成 路由器负责IP层的分组信息 列出可接受、禁止的源端和目标端等信息 应用程序网关在应用程序级进行控制 根据头信息字段、消息长度、消息内容等 决定传送还是丢弃消息 这是IIOP、JRMP的应用受到限制的核心因素之一 SOAP则基本不受其限制 4、适用环境不同 JRMP适用于使用JAVA的应用系统 IIOP、SOAP支持各种语言,因此适用面更广 IIOP适合于同一个防火墙内部之间的交互 而SOAP则适合于跨越防火墙的交互,三、WSDL,1、概述 2、

11、文档结构 3、例子 4、向SOAP的映射,1、概述,WSDL(Web Services Description Language)是一个建议性标准 2000年6月Microsoft提出了“Web服务”术语,把Web服务作为.NET计划重要组件 在Microsoft的SDL(Service Description Language和SCL(SOAP Contract Language)和IBM的NASSL(Network Accessible Service Specification Language)这两项技术的结合,形成了WSDL的基础。SCL采用XML来描述应用程序所交换的消息,NASS

12、L描述服务接口和实现细节 2000年9月25日IBM、Microsoft和Ariba提出WSDL1.0 2001年3月15日,他们提交的WSDL1.1成为W3C的Note 2002年7月9日提出 WSDL1.2 2003年11月10日提出 WSDL2.0,类型,消息,端口类型,绑定,服务,操作,操作,端口,抽,象,定,义,具,体,说,明,WSDL,文档,代表依赖关系,代表包含关系,2、文档结构,类型:独立于计算机和语言的类型定义 使用某一类型系统(例如XSD)进行数据类型定义的容器 用于描述被交换的消息 消息:对通信数据的一个抽象、类型化定义 一个消息包含多个逻辑部分 每一个都与某一个类型系统

13、中的定义相关联 包含函数参数(输入与输出分开)或文档说明 端口类型:由一个或多个端点支持操作的抽象集合 每个操作对应于一个输入消息与一个输出消息 它引用消息节中的消息定义来说明函数基调 操作名称、输入参数和输出参数 等,(1)抽象定义,绑定:为一个由特定端口类型定义的操作与消息 指定具体的协议及数据格式规范 服务:指定每个绑定的端口地址,(2)具体说明,3、例子,interface FooSample long foo(long arg); ,用OMG-IDL表示为:,对应的SOAP请求消息为:, 5131953 ,4、向SOAP的映射, 5131953 ,与其它描述方法的比较,有的以描述结构

14、化程序的功能为主 例如 RPC-IDL 微软的-IDL 有的以描述对象的功能为主 例如 CORBA的IDL 有的以描述服务为主 例如 web service的WSDL,1、描述对象不同,有的以具体计算机语言的方式表达 例如SUN的Java Interface 有的以独立于具体的计算机语言 但十分类似于计算机语言的方式表达 例如:RPC-IDL 微软的-IDL CORBA的IDL 有的以XML为方式表达 例如:web service的WSDL,2、描述方式不同,有的仅描述接口的语法信息 例如:RPC-IDL 微软的-IDL CORBA的IDL 有的还包括与底层协议的绑定信息 例如:WSDL等 在

15、CORBA中这部分信息包含在IOR中,3、描述内容不同,如何为 web 系统增加web service接口 下面模块可以暴露为 Web Services: EJBs POJOs 后面的例子针对 EJB,四、支持Web 服务的J2EE应用,JAX-RPC: Java API for XML-based RPC Java世界的 web service 编程模型规范 如何以类似 RPC 的方式调用 web service JAXRPC的客户端编程模式有以下的三种: Static stub(静态的客户端存根调用) Dynamic proxy (部分动态的代理调用) Dynamic invocation

16、 interface (DII)(动态调用接口),三种JAXRPC的客户端编程模式,Static stub,1) 首先通过映射转换将服务描述的WSDL文档生成客户端的Java存根 2) 然后实例化服务的locator实例 3) 通过loacator获得服务客户端的实例 4) 用客户端实例去调用服务,package itso.test; import java.io.*; import java.util.*; import itso.test.*; public class WeatherForecastClient public static void main(String args) t

17、ry WeatherForecastServiceLocator 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.p

18、rintStackTrace(); ,Dynamic proxy 与Static stub 不同的是可以指定生成的客户端实例,import javax.xml.namespace.QName; import java.io.*; import java.util.*; public class WeatherForecastDynamicProxyClient public static void main(String args) try WeatherForecastServiceLocator wsl = new WeatherForecastServiceLocator(); QNam

19、e qn = new QName(“http:/“, “WeatherForecast“); WeatherForecast ws = (WeatherForecast) wsl.getPort(qn,WeatherForecast.class); String temperature = ws.getTemperature(); System.out.println(temperature); System.out.println(“DynamicProxyJavaClient completed“); catch (Exception e) e.printStackTrace(); ,一个

20、汽车网站的例子,例子构成: JSPs Controller Servlet Stateless Session Bean InventoryFacadeBean Hibernate DAOs 暴露对象: InventoryFacadeBean.findAllAvailableCars(),服务端点接口,将业务方法暴露为Web Services 类似于服务器端的 stub 类似于 EJB Remote Interface,package com.jbossatwork.ws; /* * Service endpoint interface for InventoryFacade. */ publ

21、ic interface InventoryEndpoint extends java.rmi.Remote public com.jbossatwork.ws.CarDTOArray findAvailableCars() throws java.rmi.RemoteException; / InventoryEndpoint.java,修改 ejb-jar.xml, InventoryFacadeSB InventoryFacade com.jbossatwork.ws.InventoryEndpoint ,webservices.xml,定义并注册 InventoryService We

22、b Service 将Service Endpoint Interface class 绑定到InventoryFacadeBean EJB 告诉 J2EE app server 到哪里找WSDL 与JAX-RPC 映射文件(Mapping files, in EJB JAR file), InventoryService META-INF/wsdl/InventoryService.wsdl META-INF/inventory-mapping.xml Inventory InventoryEndpointPort com.jbossatwork.ws.InventoryEndpoint I

23、nventoryFacade ,JAX-RPC 映射文件,帮助 JAX-RPC 编译器将Java 对象映射到WSDL 对象 复杂的Java 对象导致复杂的JAX-RPC 与WSDL 文件, com.jbossatwork.ws http:/localhost:8080/jbossatwork-ws/types com.jbossatwork.ws http:/localhost:8080/jbossatwork-ws com.jbossatwork.dto.CarDTOArray typeNS:CarDTOArray complexType cars cars , com.jbossatwor

24、k.dto.CarDTO typeNS:CarDTO complexType id id make make model model modelYear modelYear , status status com.jbossatwork.ws.InventoryService serviceNS:InventoryService InventoryEndpointPort InventoryEndpointPort , com.jbossatwork.ws.InventoryEndpoint portTypeNS:InventoryEndpoint bindingNS:InventoryEnd

25、pointBinding findAvailableCars findAvailableCars com.jbossatwork.dto.CarDTOArray wsdlMsgNS:InventoryEndpoint_findAvailableCarsResponse result ,WSDL File, InventoryFacade Inventory jbossatwork-ws/InventoryService ,修改 WSDL URL,修改 EJB,/* * ejb.bean * name=“InventoryFacade“ * * view-type=“all“ * * * wse

26、e.port-component * name=“Inventory“ * wsdl-port=“InventoryEndpointPort“ * service-endpoint-interface=“com.jbossatwork.ws.InventoryEndpoint“ * service-endpoint-bean=“com.jbossatwork.ejb.InventoryFacadeBean“ * * ejb.interface * service-endpoint-class=“com.jbossatwork.ws.InventoryEndpoint“ * */ public

27、class InventoryFacadeBean implements SessionBean ,/* * ejb.interface-method * view-type=“all“ * * */ public CarDTOArray findAvailableCars() throws EJBException CarDTOArray carDTOArray = new CarDTOArray(); CarDTO cars = (CarDTO) listAvailableCars().toArray(new CarDTO0); carDTOArray.setCars(cars); ret

28、urn carDTOArray; /* * ejb.interface-method * view-type=“both“ * * */ public List listAvailableCars() throws EJBException ,Web Services 与 Collections,package com.jbossatwork.dto; import java.io.Serializable; import com.jbossatwork.dto.CarDTO; public class CarDTOArray implements Serializable private C

29、arDTO cars; public CarDTOArray() public CarDTO getCars() return cars; public void setCars(CarDTO cars) this.cars = cars; ,WSDL/XSD 不懂 Java Collections,EJB JAR 文件结构,META-INF/ ejb-jar.xml jboss.xml webservices.xml inventory-mapping.xml (JAX-RPC Mapping File) wsdl/ InventoryService.wsdl com/jbossatwork

30、/ws/ InventoryEndpoint.class,客户端:产生 Web Service Proxy 代码, ,package com.jbossatwork.client; public class MyAxisClient public static void main(String args) try System.out.println(“Finding InventoryService .n“); InventoryService service = new InventoryServiceLocator(); System.out.println(“Getting Inven

31、toryEndpoint .n“); InventoryEndpoint endpoint=service.getInventoryEndpointPort(); System.out.println(“Getting Cars .“); CarDTOArray carDTOArray = endpoint.findAvailableCars(); CarDTO cars = carDTOArray.getCars(); for (int i = 0; i cars.length; +i) System.out.println( “Year = “ + carsi.getModelYear() + “, Make = “ + carsi.getMake() + “, Model = “ + arsi.getModel() + “, status = “ + carsi.getStatus() + “); catch(Exception e) e.printStackTrace(); ,客户代码( J2SE 1.4 ),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1