《Web服务支持平台》由会员分享,可在线阅读,更多相关《Web服务支持平台(64页珍藏版)》请在金锄头文库上搜索。
1、Web 服务支持平台服务支持平台 1/64软件构件与中间件技术软件构件与中间件技术第七讲第七讲Web 服务支持平台服务支持平台1Web 服务支持平台服务支持平台 2/64软件构件与中间件技术软件构件与中间件技术内内 容容 一、一、Web 服务简介服务简介二、二、SOAP三、三、WSDL四、支持四、支持Web 服务的服务的J2EE应用应用2Web 服务支持平台服务支持平台 3/64软件构件与中间件技术软件构件与中间件技术一、一、Web 服务简介服务简介Web服务(服务(Web Service) 是基于是基于 XML 和和 HTTP 的一种服务的一种服务其通信协议其通信协议 主要基于主要基于SOA
2、P服务的描述服务的描述 通过通过WSDL发现和获得服务发现和获得服务 通过通过UDDI3Web 服务支持平台服务支持平台 4/64软件构件与中间件技术软件构件与中间件技术lSOAP(SimpleObjectAccessProtocol)XML-based(text)协议支持远程通信平台中立lWSDL(WebServicesDefinitionLanguage)接口描述lUDDI(UniversalDescription,Discovery,andIntegration)用于WebServices注册用于发现WebServices4Web 服务支持平台服务支持平台 5/64软件构件与中间件技术软
3、件构件与中间件技术客户客户/ /服务请求者服务请求者服务提供者服务提供者 注册请求/应答查找基本结构:基本结构:服务信息注册库服务信息注册库5Web 服务支持平台服务支持平台 6/64软件构件与中间件技术软件构件与中间件技术l 提供了软件模块之间一种松耦合的交互方式提供了软件模块之间一种松耦合的交互方式l根据需求通过网络对松散耦合的粗粒度应用组件根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用进行分布式部署、组合和使用l服务层是服务层是SOA的基础,可以直接被应用调用,从的基础,可以直接被应用调用,从而而 有效控制系统中与软件代理的人为依赖性有效控制系统中与软件代理的人为依
4、赖性lSOA的几个关键特性:一种粗粒度、松耦合服务的几个关键特性:一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义适配器进行架构,服务之间通过简单、精确定义适配器进行通讯,不涉及通讯,不涉及 底层编程适配器和通讯模型底层编程适配器和通讯模型 6Web 服务支持平台服务支持平台 7/64软件构件与中间件技术软件构件与中间件技术RPC vs. DocumentlRPC耦合密切些l相对脆弱仅仅是调用lDocument耦合松散些l对应用修改适应性好l没有序列化/反序列化问题需要额外的设计工作l需要解释客户消息内容,然后进行相应操作7Web 服务支持平台服务支持平台 8/64软件构件与中间件技术软
5、件构件与中间件技术考虑考虑 Web Services的几个理由的几个理由l业务上需要与外部客户通信l技术上应用需要与其它语言编写的客户程序通信客户在防火墙之外l管理上管理托管webservice应用8Web 服务支持平台服务支持平台 9/64软件构件与中间件技术软件构件与中间件技术什么时候不要使用什么时候不要使用Web Servicesl客户程序与应用使用相同语言编写l通信开销大序列化或者远程访问开销大WebServices/XML处理开销大“DontUseXMLtoCommunicateUnlessYouReally,ReallyHaveTo”FloydMarinescu,TheMiddle
6、wareCompanyl永远记住:WebServices/XML是用于集成的9Web 服务支持平台服务支持平台 10/64软件构件与中间件技术软件构件与中间件技术lApacheAxis(ApacheeXtensibleInteractionSystem)是ApacheWebService项目中的子项目最初起源于IBM的SOAP4J“最早的一批用于构造基于SOAP应用的FrameworklJBoss,WAS等重要的应用服务器都集成它典型的典型的 Web 服务支持平台服务支持平台10Web 服务支持平台服务支持平台 11/64软件构件与中间件技术软件构件与中间件技术服务器端AXIS句柄链处理架构用
7、户配置一系列的用户配置一系列的 handler,构成,构成 handler chainAXIS 一次调用一次调用 handler 处理消息(含处理消息(含 context)类似于类似于 interceptor(截取器)(截取器)11Web 服务支持平台服务支持平台 12/64软件构件与中间件技术软件构件与中间件技术客户端AXIS 句柄链处理架构12Web 服务支持平台服务支持平台 13/64软件构件与中间件技术软件构件与中间件技术AXIS的子系统的子系统13Web 服务支持平台服务支持平台 14/64软件构件与中间件技术软件构件与中间件技术二、二、SOAP1、SOAP概述概述2、数据表示数据表
8、示 3、消息格式消息格式 4、协议映射协议映射 14Web 服务支持平台服务支持平台 15/64软件构件与中间件技术软件构件与中间件技术简单对象访问协议(简单对象访问协议(SOAP)是网络环境中交换信息的简单协议是网络环境中交换信息的简单协议为网络环境下软件之间结构化、类型化信息为网络环境下软件之间结构化、类型化信息的交换的交换提供了一种基于提供了一种基于XML的机制的机制它可以广泛地用于基于消息的系统和基于它可以广泛地用于基于消息的系统和基于RPC的系统的系统SOAP被设计为可以与各种其它协议结合使用被设计为可以与各种其它协议结合使用但目前但目前SOAP主要和主要和HTTP及及HTTP扩展框
9、架相结合扩展框架相结合1、SOAP概述概述15Web 服务支持平台服务支持平台 16/64软件构件与中间件技术软件构件与中间件技术简单地讲,简单地讲,SOAP= HTTP+RPC+ XML即即: SOAP以以HTTP作为底层通讯协议作为底层通讯协议以以RPC作为一致性的调用途径作为一致性的调用途径以以XML作为数据传送的格式作为数据传送的格式SOAP的设计原则是的设计原则是: 简单、易于扩展简单、易于扩展SOAP的设计忽略了如下几方面的功能:的设计忽略了如下几方面的功能:(1)分布式垃圾回收)分布式垃圾回收(2)消息的批处理)消息的批处理(3)对象引用)对象引用(4)对象激活)对象激活16We
10、b 服务支持平台服务支持平台 17/64软件构件与中间件技术软件构件与中间件技术SOAP的数据表示完全不同于以往互操作协议的表示方法的数据表示完全不同于以往互操作协议的表示方法以往的互操作协议都将调用语句编排为以往的互操作协议都将调用语句编排为二进制的字节流的形式二进制的字节流的形式SOAP采用采用XML作为自己的数据表示方法作为自己的数据表示方法XML是与是与HTML类似的基于文本的标记语言类似的基于文本的标记语言SOAP将调用语句编排为文本式的字符流的形式将调用语句编排为文本式的字符流的形式 2、数据表示数据表示17Web 服务支持平台服务支持平台 18/64软件构件与中间件技术软件构件与
11、中间件技术SOAP消息是一个消息是一个XML文档文档包括:包括:一个必需的一个必需的SOAP封装封装一个可选的一个可选的SOAP头头一个必需的一个必需的SOAP体体3 3、消息格式、消息格式18Web 服务支持平台服务支持平台 19/64软件构件与中间件技术软件构件与中间件技术SOAP封装定义了描述信息和如何处理信息的框架封装定义了描述信息和如何处理信息的框架用于指定用用于指定用XMLSchema来描述来描述XML数据的编码规则数据的编码规则封装可以包含名域声明和附加属性封装可以包含名域声明和附加属性如果包含附加属性,这些属性必须限定名字域如果包含附加属性,这些属性必须限定名字域类似的,类似的
12、,“Envelope”可以包含附加子元素可以包含附加子元素这些也必须限定名字域且跟在这些也必须限定名字域且跟在SOAP体元素之后体元素之后(1)SOAP封装封装19Web 服务支持平台服务支持平台 20/64软件构件与中间件技术软件构件与中间件技术SOAP消息头是消息头是SOAP消息的可选部分消息的可选部分用来扩展其它诸如安全、事务等服务的重要机制用来扩展其它诸如安全、事务等服务的重要机制如果出现的话,必须是如果出现的话,必须是SOAP 封装元素的第一个直接子元素封装元素的第一个直接子元素SOAP头可以包含多个头可以包含多个SOAP块块每个都是每个都是SOAP头元素的直接子元素头元素的直接子元
13、素所有所有SOAP头的直接子元素都必须限定名字域头的直接子元素都必须限定名字域(2)SOAP消息头消息头20Web 服务支持平台服务支持平台 21/64软件构件与中间件技术软件构件与中间件技术SOAP体在体在SOAP消息中必须出现消息中必须出现且必须是且必须是SOAP封装元素的直接子元素封装元素的直接子元素SOAP体可以包括多个条目体可以包括多个条目每个条目必须是每个条目必须是SOAP体元素的直接子元素体元素的直接子元素SOAP体元素的直接子元素可以限定名字域体元素的直接子元素可以限定名字域(3)SOAP体体21Web 服务支持平台服务支持平台 22/64软件构件与中间件技术软件构件与中间件技
14、术SOAP自然地遵循自然地遵循HTTP的请求的请求/应答消息模型应答消息模型使得使得SOAP的请求和应答参数可以包含在的请求和应答参数可以包含在HTTP请求和应答中请求和应答中 SOAP HTTP遵循遵循HTTP 中中表示通信状态信息的表示通信状态信息的HTTP状态码的语义状态码的语义例如,例如,2xx状态码表示状态码表示这个包含了这个包含了SOAP组件的客户请求组件的客户请求已经被成功的收到、理解和接受已经被成功的收到、理解和接受下页的代码下页的代码是一个是一个使用使用POST的的SOAP HTTP例子例子该消息通过该消息通过HTTP发出一条请求发出一条请求“获取股票代码为获取股票代码为AB
15、C的最新交易价格的最新交易价格” 22Web 服务支持平台服务支持平台 23/64软件构件与中间件技术软件构件与中间件技术POST /POST /StockQuoteStockQuote HTTP/1.1 HTTP/1.1Host: Host: Content-Type: text/xml; Content-Type: text/xml; charsetcharset=utf-8=utf-8Content-Length: Content-Length: nnnnnnnnSOAPActionSOAPAction: Some-URI: Some-URISOAP-ENV:Envelope/soap/
16、encoding/ t:Transaction =1 5 5 =Some-URI ABC ABC / 23Web 服务支持平台服务支持平台 24/64软件构件与中间件技术软件构件与中间件技术1、互操作开销不同、互操作开销不同IIOP、JRMP使用二进制的字节流形式编排消息使用二进制的字节流形式编排消息 (CDR、XDR)SOAP采用字符型的采用字符型的XML编排消息编排消息 SOAP消息要比消息要比IIOP、JRMP消息长得多消息长得多SOAP的编排开销大、占用内存空间大的编排开销大、占用内存空间大2、表达能力不同、表达能力不同SOAP易于学习、易于开发、易于调试易于学习、易于开发、易于调试S
17、OAP不支持消息的批处理、对象引用、对象激活等特性不支持消息的批处理、对象引用、对象激活等特性降低了降低了SOAP的表达能力的表达能力并使得基于并使得基于SOAP的交互受到限制的交互受到限制而而IIOP、JRMP等则不存在这种限制等则不存在这种限制与其它协议的比较与其它协议的比较24Web 服务支持平台服务支持平台 25/64软件构件与中间件技术软件构件与中间件技术3、适应能力不同、适应能力不同IIOP、JRMP严重制约于防火墙严重制约于防火墙防火墙一般由两个路由器与一个应用程序网关构成防火墙一般由两个路由器与一个应用程序网关构成 路由器负责路由器负责IP层的分组信息层的分组信息列出可接受、禁
18、止的源端和目标端等信息列出可接受、禁止的源端和目标端等信息 应用程序网关在应用程序级进行控制应用程序网关在应用程序级进行控制 根据头信息字段、消息长度、消息内容等根据头信息字段、消息长度、消息内容等 决定传送还是丢弃消息决定传送还是丢弃消息这是这是IIOP、JRMP的应用受到限制的核心因素之一的应用受到限制的核心因素之一SOAP则基本不受其限制则基本不受其限制4、适用环境不同、适用环境不同JRMP适用于使用适用于使用JAVA的应用系统的应用系统IIOP、SOAP支持各种语言,因此适用面更广支持各种语言,因此适用面更广IIOP适合于同一个防火墙内部之间的交互适合于同一个防火墙内部之间的交互而而S
19、OAP则适合于跨越防火墙的交互则适合于跨越防火墙的交互25Web 服务支持平台服务支持平台 26/64软件构件与中间件技术软件构件与中间件技术三、三、WSDL1、概述、概述2、文档结构、文档结构3、例子、例子4、向、向SOAP的映射的映射26Web 服务支持平台服务支持平台 27/64软件构件与中间件技术软件构件与中间件技术1、概述、概述lWSDL(Web Services Description Language)是一个建)是一个建议性标准议性标准l2000年年6月月Microsoft提出了提出了“Web服务服务”术语,把术语,把Web服服务作为务作为.NET计划重要组件计划重要组件l在在M
20、icrosoft的的SDL(Service Description Language和和SCL(SOAP Contract Language)和)和IBM的的NASSL(Network Accessible Service Specification Language)这两项技术的结合,形成了)这两项技术的结合,形成了WSDL的基础。的基础。SCL采用采用XML来描述应用程序所交换的消息,来描述应用程序所交换的消息,NASSL描描述服务接口和实现细节述服务接口和实现细节l2000年年9月月25日日IBM、Microsoft和和Ariba提出提出WSDL1.0l2001年年3月月15日,他们提交
21、的日,他们提交的WSDL1.1成为成为W3C的的Notel2002年年7月月9日提出日提出 WSDL1.2l2003年年11月月10日提出日提出 WSDL2.027Web 服务支持平台服务支持平台 28/64软件构件与中间件技术软件构件与中间件技术 类型类型 消息消息 端口类型端口类型 绑定绑定 服务服务 操作操作 操作操作 端口端口 抽抽 象象 定定 义义 具具体体说说明明 WSDL文档文档 代表依赖关系代表依赖关系 代表包含关系代表包含关系 2、文档结构、文档结构28Web 服务支持平台服务支持平台 29/64软件构件与中间件技术软件构件与中间件技术类型类型:独立于计算机和语言的类型定义使
22、用某一类型系统(例如XSD)进行数据类型定义的容器用于描述被交换的消息消息消息:对通信数据的一个抽象、类型化定义一个消息包含多个逻辑部分每一个都与某一个类型系统中的定义相关联包含函数参数(输入与输出分开)或文档说明端口类型端口类型:由一个或多个端点支持操作的抽象集合每个操作对应于一个输入消息与一个输出消息它引用消息节中的消息定义来说明函数基调操作名称、输入参数和输出参数 等(1 1)抽象定义)抽象定义 29Web 服务支持平台服务支持平台 30/64软件构件与中间件技术软件构件与中间件技术绑定绑定:为一个由特定端口类型定义的操作与消息指定具体的协议及数据格式规范服务服务:指定每个绑定的端口地址
23、(2 2)具体说明)具体说明 30Web 服务支持平台服务支持平台 31/64软件构件与中间件技术软件构件与中间件技术definitions name=definitions name=FooSampleFooSample schema =qualified message name= / message name= / operation name= input message=/output message=/3、例子、例子31Web 服务支持平台服务支持平台 32/64软件构件与中间件技术软件构件与中间件技术binding name= =UTF-8 / soap:binding styl
24、e= /soap/http/ operation name= soap:operation / soap:body use=encoded /soap/encoding/ / soap:body use=encoded /soap/encoding/ / service name=port name=32Web 服务支持平台服务支持平台 33/64软件构件与中间件技术软件构件与中间件技术interface FooSample long foo(long arg);用OMG-IDL表示为:33Web 服务支持平台服务支持平台 34/64软件构件与中间件技术软件构件与中间件技术对应的对应的SOAP
25、请求消息为:请求消息为:SOAP-ENV:Envelope /soap/envelope/ /message/ 51319535131953 / 4、向、向SOAP的映射的映射34Web 服务支持平台服务支持平台 35/64软件构件与中间件技术软件构件与中间件技术SOAP-ENV:Envelope /soap/envelope/SOAPSDK1:fooResponse mlns:SOAPSDK1=http:/message/5131953513195335Web 服务支持平台服务支持平台 36/64软件构件与中间件技术软件构件与中间件技术与其它描述方法的比较与其它描述方法的比较有的以描述结构化
26、程序的功能为主有的以描述结构化程序的功能为主例如例如RPC-IDLRPC-IDL微软的微软的-IDL-IDL有的以描述对象的功能为主有的以描述对象的功能为主例如例如CORBACORBA的的IDLIDL有的以描述服务为主有的以描述服务为主例如例如web serviceweb service的的WSDLWSDL1 1、描述对象不同描述对象不同36Web 服务支持平台服务支持平台 37/64软件构件与中间件技术软件构件与中间件技术有的以具体计算机语言的方式表达有的以具体计算机语言的方式表达例如例如SUNSUN的的Java InterfaceJava Interface有的以独立于具体的计算机语言有的
27、以独立于具体的计算机语言但十分类似于计算机语言的方式表达但十分类似于计算机语言的方式表达例如:例如:RPC-IDLRPC-IDL微软的微软的-IDL-IDLCORBACORBA的的IDLIDL有的以有的以XMLXML为方式表达为方式表达例如:例如:web serviceweb service的的WSDLWSDL2 2、描述方式不同描述方式不同37Web 服务支持平台服务支持平台 38/64软件构件与中间件技术软件构件与中间件技术有的仅描述接口的语法信息有的仅描述接口的语法信息例如:例如:RPC-IDL微软的微软的-IDLCORBA的的IDL有的还包括与底层协议的绑定信息有的还包括与底层协议的绑
28、定信息例如:例如:WSDL等等在在CORBA中这部分信息包含在中这部分信息包含在IOR中中3、描述内容不同描述内容不同38Web 服务支持平台服务支持平台 39/64软件构件与中间件技术软件构件与中间件技术l如何为web系统增加webservice接口l下面模块可以暴露为WebServices:EJBsPOJOsl后面的例子针对EJB四、支持四、支持Web 服务的服务的J2EE应用应用39Web 服务支持平台服务支持平台 40/64软件构件与中间件技术软件构件与中间件技术JAX-RPC:JavaAPIforXML-basedRPCJava世界的webservice编程模型规范如何以类似RPC的
29、方式调用webserviceJAXRPC的客户端编程模式有以下的三种:lStaticstub(静态的客户端存根调用)lDynamicproxy(部分动态的代理调用)lDynamicinvocationinterface(DII)(动态调用接口)40Web 服务支持平台服务支持平台 41/64软件构件与中间件技术软件构件与中间件技术三种三种JAXRPC的客户端编程模式的客户端编程模式41Web 服务支持平台服务支持平台 42/64软件构件与中间件技术软件构件与中间件技术Static stub1)首先通过映射转换将服务描述的WSDL文档生成客户端的Java存根2)然后实例化服务的locator实例
30、3)通过loacator获得服务客户端的实例4)用客户端实例去调用服务42Web 服务支持平台服务支持平台 43/64软件构件与中间件技术软件构件与中间件技术packageitso.test;importjava.io.*;importjava.util.*;importitso.test.*;publicclassWeatherForecastClientpublicstaticvoidmain(Stringargs)tryWeatherForecastServiceLocatorwsl=newWeatherForecastServiceLocator();WeatherForecastSe
31、rvicews=(WeatherForecastService)wsl.getWeather();Stringtemperature=ws.getTemperature();System.out.println(temperature);System.out.println(WeatherForecastClientcompleted);catch(Exceptione)e.printStackTrace();43Web 服务支持平台服务支持平台 44/64软件构件与中间件技术软件构件与中间件技术Dynamic proxy与与与与Static stub Static stub 不同的是可以指定
32、生成的客户端实例不同的是可以指定生成的客户端实例不同的是可以指定生成的客户端实例不同的是可以指定生成的客户端实例importjavax.xml.namespace.QName;importjava.io.*;importjava.util.*;publicclassWeatherForecastDynamicProxyClientpublicstaticvoidmain(Stringargs)tryWeatherForecastServiceLocatorwsl=newWeatherForecastServiceLocator();QNameqn=newQName(http:/,Weather
33、Forecast);WeatherForecastws=(WeatherForecast)wsl.getPort(qn,WeatherForecast.class);Stringtemperature=ws.getTemperature();System.out.println(temperature);System.out.println(DynamicProxyJavaClientcompleted);catch(Exceptione)e.printStackTrace();44Web 服务支持平台服务支持平台 45/64软件构件与中间件技术软件构件与中间件技术一个汽车网站的例子一个汽车网
34、站的例子l例子构成:JSPsControllerServletStatelessSessionBeanInventoryFacadeBeanHibernateDAOsl暴露对象:InventoryFacadeBean.findAllAvailableCars()45Web 服务支持平台服务支持平台 46/64软件构件与中间件技术软件构件与中间件技术服务端点接口服务端点接口l将业务方法暴露为WebServicesl类似于服务器端的stubl类似于EJBRemoteInterfacepackage com.jbossatwork.ws;/* * Service endpoint interface
35、 for InventoryFacade. */public interface InventoryEndpoint extends java.rmi.Remote public com.jbossatwork.ws.CarDTOArray findAvailableCars() throws java.rmi.RemoteException;/ InventoryEndpoint.java46Web 服务支持平台服务支持平台 47/64软件构件与中间件技术软件构件与中间件技术修改修改 ejb-jar.xml InventoryFacadeSB InventoryFacade com.jbos
36、satwork.ws.InventoryEndpoint 47Web 服务支持平台服务支持平台 48/64软件构件与中间件技术软件构件与中间件技术webservices.xmll定义并注册InventoryServiceWebServicel将ServiceEndpointInterfaceclass绑定到InventoryFacadeBeanEJBl告诉J2EEappserver到哪里找WSDL与JAX-RPC映射文件(Mappingfiles,inEJBJARfile)48Web 服务支持平台服务支持平台 49/64软件构件与中间件技术软件构件与中间件技术 InventoryService
37、 META-INF/wsdl/InventoryService.wsdl META-INF/inventory-mapping.xml Inventory InventoryEndpointPort com.jbossatwork.ws.InventoryEndpoint InventoryFacade 49Web 服务支持平台服务支持平台 50/64软件构件与中间件技术软件构件与中间件技术JAX-RPC 映射文件映射文件l帮助JAX-RPC编译器将Java对象映射到WSDL对象l复杂的Java对象导致复杂的JAX-RPC与WSDL文件50Web 服务支持平台服务支持平台 51/64软件构件与
38、中间件技术软件构件与中间件技术 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 51Web 服务支持平台服务支持平台 52/64软件构件与中间件技术软件构件与中间件技术 com.jbossatwork.dto.CarDTO typeNS:CarDTO complexTy
39、pe id id make make model model modelYear modelYear 52Web 服务支持平台服务支持平台 53/64软件构件与中间件技术软件构件与中间件技术 status status com.jbossatwork.ws.InventoryService serviceNS:InventoryService InventoryEndpointPort InventoryEndpointPort 53Web 服务支持平台服务支持平台 54/64软件构件与中间件技术软件构件与中间件技术 com.jbossatwork.ws.InventoryEndpoint p
40、ortTypeNS:InventoryEndpoint bindingNS:InventoryEndpointBinding findAvailableCars findAvailableCars com.jbossatwork.dto.CarDTOArray wsdlMsgNS:InventoryEndpoint_findAvailableCarsResponse result 54Web 服务支持平台服务支持平台 55/64软件构件与中间件技术软件构件与中间件技术 WSDL File55Web 服务支持平台服务支持平台 56/64软件构件与中间件技术软件构件与中间件技术 56Web 服务支
41、持平台服务支持平台 57/64软件构件与中间件技术软件构件与中间件技术 57Web 服务支持平台服务支持平台 58/64软件构件与中间件技术软件构件与中间件技术 InventoryFacade Inventory jbossatwork-ws/InventoryService 修改修改 WSDL URL58Web 服务支持平台服务支持平台 59/64软件构件与中间件技术软件构件与中间件技术修改修改 EJB/* * ejb.bean * name=InventoryFacade * * view-type=all * * * wsee.port-component * name=Inventor
42、y * 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 class InventoryFacadeBean implements Sessio
43、nBean 59Web 服务支持平台服务支持平台 60/64软件构件与中间件技术软件构件与中间件技术 /* * 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); retu
44、rn carDTOArray; /* * ejb.interface-method * view-type=both * * */ public List listAvailableCars() throws EJBException 60Web 服务支持平台服务支持平台 61/64软件构件与中间件技术软件构件与中间件技术Web Services 与与 Collectionspackage com.jbossatwork.dto;import java.io.Serializable;import com.jbossatwork.dto.CarDTO;public class CarDTOAr
45、ray implements Serializable private CarDTO cars; public CarDTOArray() public CarDTO getCars() return cars; public void setCars(CarDTO cars) this.cars = cars; lWSDL/XSD不懂JavaCollections61Web 服务支持平台服务支持平台 62/64软件构件与中间件技术软件构件与中间件技术EJB JAR 文件结构文件结构lMETA-INF/ejb-jar.xmljboss.xmlwebservices.xmlinventory-m
46、apping.xml(JAX-RPCMappingFile)wsdl/lInventoryService.wsdllcom/jbossatwork/ws/InventoryEndpoint.class62Web 服务支持平台服务支持平台 63/64软件构件与中间件技术软件构件与中间件技术客户端:产生客户端:产生 Web Service Proxy 代码代码 63Web 服务支持平台服务支持平台 64/64软件构件与中间件技术软件构件与中间件技术package com.jbossatwork.client;public class MyAxisClient public static void
47、main(String args) try System.out.println(Finding InventoryService .n); InventoryService service = new InventoryServiceLocator(); System.out.println(Getting InventoryEndpoint .n); InventoryEndpoint endpoint=service.getInventoryEndpointPort(); System.out.println(Getting Cars .); CarDTOArray carDTOArra
48、y = 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 )64