构件化软件系统中实现WebService调用的方法

文档序号:6602306阅读:407来源:国知局
专利名称:构件化软件系统中实现Web Service调用的方法
技术领域
本发明涉及计算机软件领域,特别涉及构件化软件系统技术领域,具体是指一种 构件化软件系统中实现Web Service调用的方法。
背景技术
随着现代社会科学技术的发展,计算机系统已经成为各行各业所不可缺少的工 具,而在其中起着核心作用的,则是计算机软件系统。随着软件系统在各行各业的日益渗 透,商业系统的日益庞大,其自身的问题也是越来越严重。现在的一个企业应用,常常会涉 及企业的每一个部分,会由几十人编写几十万到几百万行代码来完成。另一方面,现代企业 是在一个不断变化的动态环境中生存和发展的,因此,企业应用就需要不断地维护——即 部分地改写一些现有软件。由几十万上百万的代码变化因子,组成的不断变化的系统,其复 杂度是人类历史上没有见过的。软件的安全性和质量可靠性,常常成为现代无所不在、无所 不能的信息化系统的一个严重问题。构件技术整合了传统的构件技术、模型驱动技术和面向服务技术,是解决现有软 件系统结构弊端的一种有效手段。所谓构件,是指某种自成一体、并有一个(或一组)清晰 接口的软件。同时,构件还应具有清晰的运行时和上线内涵。也就是说,该构件具备可供运 行时访问的接口 ;并且,在软件开发生命周期的某个时间点,该构件可独立交付和安装。另 外,一个构件还能方便地跟其他构件合并或组合,从而提供有用的功能——通常情况下,单 个构件只有跟别的构件协同工作才能达到其功效。在企业级应用开发领域,随着应用规模的不断扩大,各个系统之间的集成和交互 变得越来越重要。Web Service由于其特有的平台无关、编程语言无关等特性,成为系统集 成中使用非常广泛的技术,并且Web Service作为一项工业标准,已经得到越来越多厂商的 支持,从数据的封装到数据的传递都有一系列的标准(ws-*)作为支撑。同时,Web Service 对外仅以WSDL(网络服务描述语言,Web Services Description Language)作为交流的中 介,它是一门基于XML的语言,描述了 Web Service的服务定义以及服务的通信,是跨平台 的。如何方便的调用外部系统提供的Web Services,在系统的集成阶段变得日益重 要。通常调用外部Web Service的作法为根据外部提供的URL,取到其Web Services的描述 文件WSDL,然后根据工具如Apache axis2、Apache cxf等生成调用Web Service的stub。此 方式会生成针对外部Web Service调用的静态代码,在静态代码中包含了对数据的处理,这 些代码由固定模板生成,要么文件超大动辄上万行,要么文件超多,难于维护和问题定位。 如果外部的WSDL有了稍许的变化,即使只有结点名称的变化如由parameter变更为in,那 么原来生成的静态stub将不再正确,需要根据新的WSDL重新生成stub,并再次进行编译打 包。同时,针对每个Web Service调用,都要生成一系列的程序代码,大量代码的堆积在系 统集成时常常会带来额外的维护成本,甚至会造成大量的垃圾代码,降低了生产效率。

发明内容
本发明的目的是克服了上述现有技术中的缺点,提供一种能够通过构件对外部 WebService进行调用、开发期直观形象、快捷方便、运行期效率较高、系统性能稳定可靠、适 用范围较为广泛的构件化软件系统中实现Web Service调用的方法。为了实现上述的目的,本发明的构件化软件系统中实现Web Service调用的方法 如下该构件化软件系统中实现Web Service调用的方法,所述的构件化软件系统中包 括图形化构件开发平台和与该图形化构件开发平台相连接的构件运行平台,其主要特点 是,所述的方法包括Web Service调用构件开发处理操作和Web Service调用构件运行处 理操作,所述的Web Service调用构件开发处理操作,包括以下步骤(A1)系统的图形化构件开发平台新建构件包;(A2)所述的图形化构件开发平台导入外部的WSDL文件;(A3)所述的图形化构件开发平台导入该外部的WSDL文件所依赖的XSD文件;(A4)所述的图形化构件开发平台进行XSD模式类型与服务数据对象之间的相互 转换;(A5)所述的图形化构件开发平台在资源树中概览显示所导入的WSDL文件中的 WebService相关兀素;(A6)所述的图形化构件开发平台在资源树中概览显示所导入的XSD文件中定义 的类型以及属性信息;(A7)所述的图形化构件开发平台在构件编辑器中生成Web Service调用图元;(A8)所述的图形化构件开发平台对Web Service调用图元设置调用参数;(A9)所述的图形化构件开发平台添加SOAP头信息;(A10)所述的图形化构件开发平台添加SOAP附件信息;所述的Web Service调用构件运行处理操作,包括以下步骤(B1)系统将构件包下的资源部署到所述的构件运行平台的构件运行环境中;(B2)所述的构件运行平台加载WSDL文件到构件运行环境,并将其中的模式定义 形成服务数据对象;(B3)所述的构件运行平台加载XSD文件到构件运行环境;(B4)所述的构件运行平台将所述的服务数据对象序列化为文档对象;(B5)所述的构件运行平台将文档对象反序列化为服务数据对象;(B6)所述的构件运行平台发送Web Service请求;(B7)所述的构件运行平台处理Web Service返回值;(B8)所述的构件运行平台解析并返回SOAP头信息;(B9)所述的构件运行平台解析并返回SOAP附件信息。该构件化软件系统中实现Web Service调用的方法中的构件包为包含一定功能逻 辑的物理单元,且该构件包作为一个最小的部署单元部署到所述的构件运行平台的构件运 行环境中,该构件包中包含实现构件功能的所有依赖资源。该构件化软件系统中实现Web Service调用的方法中的依赖资源包括WSDL文件、 XSD文件、Java运行需要的类文件。
该构件化软件系统中实现Web Service调用的方法中的导入外部的WSDL文件,包 括以下步骤(11)所述的图形化构件开发平台根据外部Web Service所在的URL,把该URL所 指定的WSDL文件下载到本地;(12)所述的图形化构件开发平台分析所下载的WSDL文件,如果所下载的WSDL文 件中包含引用的其它WSDL文件,则将该其它WSDL文件一并下载到本地;(13)所述的图形化构件开发平台将所下载的WSDL文件默认保存到构件包资源树 下的“接口”结点下。该构件化软件系统中实现Web Service调用的方法中的WSDL文件中所包含引用 的其它WSDL文件,为以下两种情形中的一种(1)通过{http://schemas. xmlsoap. org/wsdl/} import 所引用的 WSDL 文件;(2)通过{http://schemas. xmlsoap. org/wsdl/} include 所引用的 WSDL 文件。该构件化软件系统中实现Web Service调用的方法中的导入外部的WSDL文件所 依赖的XSD文件,包括以下步骤(21)所述的图形化构件开发平台分析所下载的所有WSDL文件,如果WSDL文件中 包含引用的其它XSD文件,则把所引用的XSD文件下载到本地;(22)所述的图形化构件开发平台分析所下载的所有XSD文件,如果XSD文件中包 含引用的其它XSD文件,则把所引用的XSD文件下载到本地;(23)所述的图形化构件开发平台将所下载的XSD文件默认保存到构件包资源树 下的“XML模式”结点下。该构件化软件系统中实现Web Service调用的方法中的WSDL文件中所包含引用 的其它XSD文件,为以下两种情形中的一种(1)在WSDL文件中的类型定义部分所包含的通过{http://www.w3.org/2001/ XMLSchem} import 所引用的 XSD 文件;(2)在WSDL文件中的类型定义部分所包含的通过{http//www. w3. org/2001/ XMLSchem} include 所引用的 XSD 文件。该构件化软件系统中实现Web Service调用的方法中的XSD文件中所包含引用的 其它XSD文件,为以下两种情形中的一种(1)通过{http://www. w3. org/2001/XMLSchem} import 所引用的 XSD 文件;(2)通过{http://www. w3. org/2001/XMLSchem} include 所引用的 XSD 文件。该构件化软件系统中实现Web Service调用的方法中的图形化构件开发平台进行 XSD模式类型与服务数据对象之间的相互转换,包括以下步骤(31)所述的图形化构件开发平台将服务数据对象与XSD文件中定义的 complexType 对应;(32)所述的图形化构件开发平台将服务数据对象的属性与XSD文件中定义 complexType的属性对应;(33)所述的图形化构件开发平台判断XSD文件中定义complexType的属性类型是 否为复杂类型;(34)如果是,则该复杂类型对应另一服务数据对象,并作为该另一服务数据对象的属性。该构件化软件系统中实现Web Service调用的方法中的图形化构件开发平台在资 源树中概览显示所导入的WSDL文件中的Web Service相关元素,包括以下步骤(41)所述的图形化构件开发平台解析WSDL文件中的“类型”结点下按XML模式的 方式定义的数据类型;(42)按服务数据对象的规则将数据类型信息解析为服务数据对象;(43)将解析后的类型信息显示在WSDL资源树下的“类型”结点下;(44)所述的图形化构件开发平台解析WSDL文件中的“端口类型”结点并分析出其 中包括的操作以及参数类型;(45)以服务数据对象的规则进行参数类型的解析,在解析参数个数时,根据WSDL 文件中定义的风格的不同而采用不同解析方式;(46)解析后的端口类型信息显示在WSDL资源树下的“端口类型”结点下;(47)解析WSDL文件中的“服务”结点,并解析出其包含的端口子结点;(48)根据每个端口对应的绑定找到相应的端口类型,进而显示服务对应的操作以 及参数信息;(49)将解析后的服务信息显示在WSDL资源树下的“服务”结点下。该构件化软件系统中实现Web Service调用的方法中的按服务数据对象的规则将 数据类型信息解析为服务数据对象,包括以下步骤(421)如果数据类型为XSD原生类型,则将该数据类型解析为Java基本类型;(422)如果数据类型为复杂类型,则将稿数据类型解析为服务数据对象中的 commonj. sdo. DataOb ject 对象。该构件化软件系统中实现Web Service调用的方法中的图形化构件开发平台在资 源树中概览显示所导入的XSD文件中定义的类型以及属性信息,包括以下步骤(51)所述的图形化构件开发平台解析XSD文件中所包含的所有全局元素结点和 全局复杂类型结点信息;(52)将全局元素结点和全局复杂类型结点作为XML模式的子结点显示在资源树 下的“数据”结点下;(53)以服务数据对象的规则进行类型的属性解析,并作为子结点显示在相应的类 型下。该构件化软件系统中实现Web Service调用的方法中的构件编辑器中生成Web Service调用图元,包括以下步骤(61)在资源树中WSDL结点的子结点“服务”结点列出服务下所有可以被调用的操 作,所述的图形化构件开发平台根据用户的拖放动作将相应的操作拖放到构件编辑器中, 并生成Web Service调用图元;(62)所述的Web Service调用图元显示出调用的操作以及Web Service服务所在 的端点地址;(63)所述的Web Service调用图元根据所选操作的类型信息生成调用的实际参 数信息,其中包括参数个数和参数类型;(64)所述的Web Service调用图元根据需要添加SOAP头信息和附件信息。
该构件化软件系统中实现Web Service调用的方法中的对Web Service调用图元 设置调用参数,包括以下步骤(71)所述的图形化构件开发平台判断输入参数和输出参数的类型;(72)如果输入参数和输出参数为简单类型,则直接进行赋值;(73)如果输入参数和输出参数为复杂类型,则通过XPath的方式对在复杂类型中 定义的各个属性分别进行赋值。该构件化软件系统中实现Web Service调用的方法中的添加SOAP头信息,包括以 下步骤(81)将SOAP头信息按Map结构进行存储;(82)在该SOAP头信息存储时,Map结构中的键对应于SOAP头信息下头的结点名 称;(83)在该SOAP头信息存储时,Map结构中的值对应于S0AP头信息下对应键结点 的值;(84)将该S0AP头信息存储的键和值按服务数据对象的规则序列化;(85)将序列化后的文档对象作为S0AP头信息添加到头中。该构件化软件系统中实现Web Service调用的方法中的添加S0AP附件信息,包括 以下步骤(91)将S0AP附件信息按Map结构进行存储;(92)在该S0AP附件信息存储时,Map结构中的键对应于S0AP附件信息中的 Contentld ;(93)在该S0AP附件信息存储时,Map结构中的值对应于S0AP附件信息中的详细 内容;(94)遍历所存储的附件信息,并作为S0AP附件信息添加到S0AP中。该构件化软件系统中实现Web Service调用的方法中的将构件包下的资源部署到 构件运行环境中,包括以下步骤(C1)将构件包下的所有构件资源拷贝到构件运行环境所指定的目录中;(C2)将构件包下定义的Java编译类文件以及页面资源拷贝到应用服务器指定的 应用目录中。该构件化软件系统中实现Web Service调用的方法中的构件资源包括XSD文件和 WSDL文件。该构件化软件系统中实现Web Service调用的方法中的页面资源包括jsp文件和 js文件。该构件化软件系统中实现Web Service调用的方法中的加载WSDL文件到构件运 行环境,包括以下步骤(D1)构件运行环境启动时,遍历导入的所有WSDL文件;(D2)解析WSDL文件中类型结点下的模式结点并加载为服务数据对象的类型;(D3)加载WSDL文件中的服务、绑定、端口类型信息,并封装为运行期模型;(D4)判定WSDL文件对应的风格类型,并加载到WSDL运行期模型中。该构件化软件系统中实现Web Service调用的方法中的风格类型包括以下几种
(1)document/literal ;(2)document/literal/wrapper ;(3)rpc/literal、rpc/encoded。该构件化软件系统中实现Web Service调用的方法中的加载XSD文件到构件运行 环境,包括以下步骤(E1)构件运行环境启动时,遍历导入的所有XSD文件;(E2)解析XSD文件模式结点下的类型信息,并加载成服务数据对象的类型。该构件化软件系统中实现Web Service调用的方法中的XSD文件模式结点下的类 型信息包括元素类型和复杂类型。该构件化软件系统中实现Web Service调用的方法中的将服务数据对象序列化为 文档对象,包括以下步骤(F1)服务数据对象根据对应的模式类型信息,按模式的定义序列化为文档对象, 该文档对象包括结点名称和结点所在名称空间;(F2)服务数据对象的属性类型为服务数据对象,并按模式的定义对其属性序列化 为文档对象。该构件化软件系统中实现Web Service调用的方法中的将文档对象反序列化为服 务数据对象,包括以下步骤(G1)文档对象根结点取得对应的名称空间信息;(G2)由名称空间检索对应的服务数据对象;(G3)遍历文档对象的子结点,找到服务数据对象对应的同名属性;(G4)如果该属性为简单类型,则直接进行赋值;(G5)如果该属性为复杂类型,则递归进行文档对象的反序列化。该构件化软件系统中实现Web Service调用的方法中的发送Web Service请求, 包括以下步骤(HI)构造 SOAP 信封;(H2)根据WSDL文件定义的风格类型,把作为输入参数的服务数据对象序列化成 文档对象;(H3)序列化后的文档对象作为SOAP体的内容添加到S0AP信封中;(H4)如果Web Service调用图元设置了头信息,按输入参数的序列化方式,把设 定的头信息序列化成文档对象;(H5)序列化后的头信息作为S0AP头的内容添加到S0AP信封中;(H6)如果Web Service调用图元设置了附件信息,把设定的附件信息转换成 javax. activation. DataHandler对象,并作为SOAP附件信息添加到S0AP信封中;(H7)根据 Web Service 所在的 URL 建立 Http 连接;(H8)设置Http连接的请求属性,设置内容类型、内容长度、S0AP动作为正确的请 求数据信息;(H9)把S0AP信封发送到连接的输出流中。该构件化软件系统中实现Web Service调用的方法中的处理Web Service返回 值,包括以下步骤
(II)从Http连接的输出流中取得返回的SOAP信封;(12)从SOAP信封中取得SOAP体的内容作为输出参数;(13)把输出参数按服务数据对象定义的反序列化规则进行反序列化成数据对象, 并把反序列化后的值保存到调用的上下文中。该构件化软件系统中实现Web Service调用的方法中的解析并返回SOAP头信息, 包括以下步骤(J1)从SOAP信封中取得S0AP头信息;(J2) S0AP头信息按Map结构进行存储;(J3)遍历S0AP头信息下的结点,结点名称作为Map结构的键;(J4)遍历键结点的子结点,把其文档对象反序列化为服务数据对象,作为Map结 构的值;(J5)S0AP头信息保存到调用的上下文中,以供其它构件资源访问。该构件化软件系统中实现Web Service调用的方法中的解析并返回S0AP附件信 息,包括以下步骤(K1)从S0AP信封中取得S0AP附件信息;(K2)将S0AP附件信息按Map结构进行存储;(K3)将Map结构的键对应于附件的Content Id ;(K4)将Map结构的值对应于附件的详细内容;(K5)将S0AP附件信息保存到调用的上下文中,以供其它构件资源访问。采用了该发明的构件化软件系统中实现Web Service调用的方法,由于其中提供 了动态调用外部Web Service的方法,针对不同Web Service调用,不再需要生成其WSDL 对应的stub,减少了调用的操作步骤和对不同外部工具的依赖,真正做到了灵活的调用,同 时传递的数据采用标准的服务数据对象(SD0)进行封装,为异构环境的数据传递奠定了良 好的基础,从而在系统的集成工作中不再需要维护Web Service工具生成的大量调用Web Service代码,而且对于外部Web Service变化能够快速适应,从而使Web Service的开发、 调用过程更加直观、简单和高效,提高了调用的效率,快捷方便,系统运行效率较高,性能稳 定可靠,降低了开发维护的成本;同时增强了系统可移植性和可扩展性;不仅如此,该方法 还能够快速回应业务需求的变化和技术变化,能够支撑建立高度模块化而且又高度整合的 软件系统,适用范围较为广泛,为计算机构件化软件技术的进一步发展奠定了坚实的基础。


图1为本发明的Web Service调用系统架构示意图。图2为本发明的构件化软件系统中实现Web Service调用的方法中的Web Service调用开发、加载、数据处理流程图。图3为本发明的构件化软件系统中实现Web Service调用的方法中Web Service 的请求发送和返回值的处理流程。图4为本发明的构件化软件系统中实现Web Service调用的方法中的WSDL、XSD 中模式(schema)解析类图。图5为本发明的构件化软件系统中实现Web Service调用的方法中模式(schema)
14与SD0类型转换类图。图6为本发明的构件化软件系统中实现Web Service调用的方法中序列化、反序 列化的类图。图7为本发明的构件化软件系统中实现Web Service调用的方法中Web Service 调用图元的示意图。图8为本发明的构件化软件系统中实现Web Service调用的方法中SOAP消息结 构示意图。
具体实施例方式为了能够更清楚地理解本发明的技术内容,特举以下实施例详细说明。在调用Web Service服务时,客户端与服务器端交互的桥梁是WSDL (Web ServiceDef inition Language, Web服务定义语言),其中包括了以下几个主要元素 types——数据类型定义的容器,使用XML Schema来描述数据类型的结构信 肩、o portType——描述服务操作的抽象集合,与Java接口类似。
binding——数据传输过程中指定的具体传输协议以及所定义操作的数据格式 规范。
service——对外提供的服务。
operation——对服务中所支持的操作的抽象描述,描述了访问入口的请求/ 响应消息以及异常的声明。在调用Web Service过程中,客户端与服务器端交互的信息为S0AP消息,以XML 格式进行定义,其结构请参阅图8如示,其中包括了以下几个主要元素 SOAP Body——封装了要传递的数据。
SOAP Header——作为传递消息的扩展,可以自由添加。请参阅图1至图9所示,该构件化软件系统中实现Web Service调用的方法,所述 的构件化软件系统中包括图形化构件开发平台和与该图形化构件开发平台相连接的构件 运行平台,其中,所述的方法包括Web Service调用构件开发处理操作和Web Service调用 构件运行处理操作,所述的Web Service调用构件开发处理操作,包括以下步骤(A1)系统的图形化构件开发平台新建构件包;该构件包为包含一定功能逻辑的 物理单元,且该构件包作为一个最小的部署单元部署到所述的构件运行平台的构件运行环 境中,该构件包中包含实现构件功能的所有依赖资源;该依赖资源包括WSDL文件、XSD文 件、Java运行需要的类文件;(A2)所述的图形化构件开发平台导入外部的WSDL文件,包括以下步骤(a)所述的图形化构件开发平台根据外部Web Service所在的URL,把该URL所指定的WSDL文件下载到本地;(b)所述的图形化构件开发平台分析所下载的WSDL文件,如果所下载的WSDL文件 中包含引用的其它WSDL文件,则将该其它WSDL文件一并下载到本地;该WSDL文件中所包 含引用的其它WSDL文件,为以下两种情形中的一种⑴通过{http://schemas. xmlsoap. org/wsdl/} import 所引用的 WSDL 文件;
(ii) it{http://schemas. xmlsoap. org/wsdl/} include M弓Iffi白勺 WSDL f 牛;(c)所述的图形化构件开发平台将所下载的WSDL文件默认保存到构件包资源树 下的“接口”结点下;(A3)所述的图形化构件开发平台导入该外部的WSDL文件所依赖的XSD文件,包括 以下步骤(a)所述的图形化构件开发平台分析所下载的所有WSDL文件,如果WSDL文件中包 含引用的其它XSD文件,则把所引用的XSD文件下载到本地;该WSDL文件中所包含引用的 其它XSD文件,为以下两种情形中的一种⑴在WSDL文件中的类型定义部分所包含的通过{http://www.w3.org/2001/ XMLSchem} import 所引用的 XSD 文件;(ii)在WSDL文件中的类型定义部分所包含的通过{http://www.w3.org/2001/ XMLSchem} include 所引用的 XSD 文件;(b)所述的图形化构件开发平台分析所下载的所有XSD文件,如果XSD文件中包含 引用的其它XSD文件,则把所引用的XSD文件下载到本地;该XSD文件中所包含引用的其它 XSD文件,为以下两种情形中的一种(i)通过{http://www. w3. org/2001/XMLSchem} import 所引用的 XSD 文件;(ii)通过{http://www. w3. org/2001/XMLSchem} include 所引用的 XSD 文件;(c)所述的图形化构件开发平台将所下载的XSD文件默认保存到构件包资源树下 的“XML模式”结点下;(A4)所述的图形化构件开发平台进行XSD模式类型与服务数据对象之间的相互 转换,包括以下步骤(a)所述的图形化构件开发平台将服务数据对象与XSD文件中定义的 complexType 对应;(b)所述的图形化构件开发平台将服务数据对象的属性与XSD文件中定义 complexType的属性对应;(c)所述的图形化构件开发平台判断XSD文件中定义complexType的属性类型是 否为复杂类型;(d)如果是,则该复杂类型对应另一服务数据对象,并作为该另一服务数据对象的 属性;(A5)所述的图形化构件开发平台在资源树中概览显示所导入的WSDL文件中的 WebService相关元素,包括以下步骤(a)所述的图形化构件开发平台解析WSDL文件中的“类型”结点下按XML模式的 方式定义的数据类型;(b)按服务数据对象的规则将数据类型信息解析为服务数据对象,包括以下步 骤(i)如果数据类型为XSD原生类型,则将该数据类型解析为Java基本类型;(ii)如果数据类型为复杂类型,则将稿数据类型解析为服务数据对象中的 commonj. sdo. DataOb ject 对象;(c)将解析后的类型信息显示在WSDL资源树下的“类型”结点下;
16
(d)所述的图形化构件开发平台解析WSDL文件中的“端口类型”结点并分析出其 中包括的操作以及参数类型;(e)以服务数据对象的规则进行参数类型的解析,在解析参数个数时,根据WSDL 文件中定义的风格的不同而采用不同解析方式;(f)解析后的端口类型信息显示在WSDL资源树下的“端口类型”结点下;(g)解析WSDL文件中的“服务”结点,并解析出其包含的端口子结点;(h)根据每个端口对应的绑定找到相应的端口类型,进而显示服务对应的操作以 及参数信息;(j)将解析后的服务信息显示在WSDL资源树下的“服务”结点下;(A6)所述的图形化构件开发平台在资源树中概览显示所导入的XSD文件中定义 的类型以及属性信息,包括以下步骤(a)所述的图形化构件开发平台解析XSD文件中所包含的所有全局元素结点和全 局复杂类型结点信息;(b)将全局元素结点和全局复杂类型结点作为XML模式的子结点显示在资源树下 的“数据”结点下;(c)以服务数据对象的规则进行类型的属性解析,并作为子结点显示在相应的类 型下;(A7)所述的图形化构件开发平台在构件编辑器中生成Web Service调用图元,包 括以下步骤(61)在资源树中WSDL结点的子结点“服务”结点列出服务下所有可以被调用的操 作,所述的图形化构件开发平台根据用户的拖放动作将相应的操作拖放到构件编辑器中, 并生成Web Service调用图元;(62)所述的Web Service调用图元显示出调用的操作以及Web Service服务所在 的端点地址;(63)所述的Web Service调用图元根据所选操作的类型信息生成调用的实际参 数信息,其中包括参数个数和参数类型;(64)所述的Web Service调用图元根据需要添加SOAP头信息和附件信息;(A8)所述的图形化构件开发平台对Web Service调用图元设置调用参数,包括以 下步骤(a)所述的图形化构件开发平台判断输入参数和输出参数的类型;(b)如果输入参数和输出参数为简单类型,则直接进行赋值;(c)如果输入参数和输出参数为复杂类型,则通过XPath的方式对在复杂类型中 定义的各个属性分别进行赋值;(A9)所述的图形化构件开发平台添加SOAP头信息,包括以下步骤(a)将SOAP头信息按Map结构进行存储;(b)在该SOAP头信息存储时,Map结构中的键对应于SOAP头信息下头的结点名 称;(c)在该S0AP头信息存储时,Map结构中的值对应于S0AP头信息下对应键结点的 值;
(d)将该SOAP头信息存储的键和值按服务数据对象的规则序列化;(e)将序列化后的文档对象作为SOAP头信息添加到头中;(A10)所述的图形化构件开发平台添加SOAP附件信息,包括以下步骤(a)将SOAP附件信息按Map结构进行存储;(b)在该SOAP附件信息存储时,Map结构中的键对应于S0AP附件信息中的 Contentld ;(c)在该S0AP附件信息存储时,Map结构中的值对应于S0AP附件信息中的详细内 容;(d)遍历所存储的附件信息,并作为S0AP附件信息添加到S0AP中;所述的Web Service调用构件运行处理操作,包括以下步骤(B1)系统将构件包下的资源部署到所述的构件运行平台的构件运行环境中,包括 以下步骤(a)将构件包下的所有构件资源拷贝到构件运行环境所指定的目录中;该构件资 源包括XSD文件和WSDL文件。(b)将构件包下定义的Java编译类文件以及页面资源拷贝到应用服务器指定的 应用目录中;该页面资源包括jsp文件和js文件;(B2)所述的构件运行平台加载WSDL文件到构件运行环境,并将其中的模式定义 形成服务数据对象;该加载WSDL文件到构件运行环境,包括以下步骤(a)构件运行环境启动时,遍历导入的所有WSDL文件;(b)解析WSDL文件中类型结点下的模式结点并加载为服务数据对象的类型;(c)加载WSDL文件中的服务、绑定、端口类型信息,并封装为运行期模型;(d)判定WSDL文件对应的风格类型,并加载到WSDL运行期模型中;该风格类型包 括以下几种(i)document/literal ;(ii) document/literal/wrapper ;(iii)rpc/literal、rpc/encoded ;(B3)所述的构件运行平台加载XSD文件到构件运行环境,包括以下步骤(a)构件运行环境启动时,遍历导入的所有XSD文件;(b)解析XSD文件模式结点下的类型信息,并加载成服务数据对象的类型;该XSD 文件模式结点下的类型信息包括元素类型和复杂类型;(B4)所述的构件运行平台将所述的服务数据对象序列化为文档对象,包括以下步 骤(a)服务数据对象根据对应的模式类型信息,按模式的定义序列化为文档对象,该 文档对象包括结点名称和结点所在名称空间;(b)服务数据对象的属性类型为服务数据对象,并按模式的定义对其属性序列化 为文档对象;(B5)所述的构件运行平台将文档对象反序列化为服务数据对象,包括以下步骤(a)文档对象根结点取得对应的名称空间信息;(b)由名称空间检索对应的服务数据对象;
18
(c)遍历文档对象的子结点,找到服务数据对象对应的同名属性;(d)如果该属性为简单类型,则直接进行赋值;(e)如果该属性为复杂类型,则递归进行文档对象的反序列化;(B6)所述的构件运行平台发送Web Service请求,包括以下步骤(a)构造 SOAP 信封;(b)根据WSDL文件定义的风格类型,把作为输入参数的服务数据对象序列化成文 档对象;(c)序列化后的文档对象作为SOAP体的内容添加到SOAP信封中;(d)如果Web Service调用图元设置了头信息,按输入参数的序列化方式,把设定 的头信息序列化成文档对象;(e)序列化后的头信息作为SOAP头的内容添加到SOAP信封中;(f)如果Web Service调用图元设置了附件信息,把设定的附件信息转换成 javax. activation. DataHandler对象,并作为SOAP附件信息添加到S0AP信封中;(g)根据Web Service所在的URL建立Http连接;(h)设置Http连接的请求属性,设置内容类型、内容长度、SOAP动作为正确的请求 数据信息;(j)把S0AP信封发送到连接的输出流中;(B7)所述的构件运行平台处理Web Service返回值,包括以下步骤(a)从Http连接的输出流中取得返回的S0AP信封;(b)从S0AP信封中取得S0AP体的内容作为输出参数;(c)把输出参数按服务数据对象定义的反序列化规则进行反序列化成数据对象, 并把反序列化后的值保存到调用的上下文中;(B8)所述的构件运行平台解析并返回S0AP头信息,包括以下步骤(a)从S0AP信封中取得S0AP头信息;(b) SOAP头信息按Map结构进行存储;(c)遍历S0AP头信息下的结点,结点名称作为Map结构的键;(d)遍历键结点的子结点,把其文档对象反序列化为服务数据对象,作为Map结构 的值;(e)S0AP头信息保存到调用的上下文中,以供其它构件资源访问;(B9)所述的构件运行平台解析并返回S0AP附件信息,包括以下步骤(a)从S0AP信封中取得S0AP附件信息;(b)将S0AP附件信息按Map结构进行存储;(c)将Map结构的键对应于附件的Content Id ;(d)将Map结构的值对应于附件的详细内容;(e)将S0AP附件信息保存到调用的上下文中,以供其它构件资源访问。在实际使用当中,该构件化软件系统中实现调用Web Service的方法,包括图形化 构件开发平台和构件的运行平台,所述的方法包括Web Service调用构件开发操作和Web Service调用构件运行操作,如图2所示。在Web Service开发和调用过程中,数据的定义 和封装采用统一的服务数据对象(SD0,Service Data Object)模型,服务数据对象(SD0)统一了不同数据源类型的数据编程,提供了对通用应用程序模式的健壮支持,并使应用程 序和工具更容易查询、读取,其操作按XPath规则进行,服务数据对象(SD0)与Schema转换 的类图如图5所示。所述的Web Service调用构件开发操作包括以下步骤(1)新建构件包,本构件包定义了一个业务模块单元,提供相应的服务,在物理上 与文件目录相对应;(2)导入外部的WSDL文件,包括以下步骤(a)根据外部Web Service所在的URL,把其URL指定的WSDL下载到本地;(b)分析下载的WSDL文件,如果下载的WSDL文件中包含通过{http //schemas. xmlsoap. org/wsdl/} import 或者{http://schemas. xmlsoap. org/wsdl/} include 弓| 用的 其它WSDL文件,则一并下载到本地;(c)下载的WSDL文件默认保存到构件包资源树下的“接口”结点下。(3)导入外部的WSDL文件所依赖的XSD文件,包括以下步骤(a)分析下载的所有WSDL文件,如果WSDL文件中的类型定义〈types〉部分包含通 过{http //www. w3. org/2001/XMLSchem} import 或者{http: //www. w3. org/2001/XMLSchem} include 引用的其它 XSD 文件,则把引用的 XSD文件下载到本地;(b)分析下载的所有XSD文件,如果包含通过{http //www. w3. org/2001/XMLSchem} import 或者{http://www. w3. org/2001/XMLSchem} include 引用的其它 XSD 文件,则同时把引 用的XSD文件下载到本地;(c)下载的XSD文件默认保存到构件包资源树下的“XML Schema"结点下。(4)XSD Schema Type与服务数据对象(SD0)的相互转换,包括以下步骤(a)服务数据对象与XSD中定义的complexType对应;(b)服务数据对象的属性与XSD中定义complexType的属性对应;(c)XSD中定义complexType的属性类型如为complexType,则对应另一服务数据 对象,并作为服务数据对象的属性。(5)资源树概览显示导入的WSDL文件,包括以下步骤(a)解析WSDL文件中的types结点下按照XML Schema的方式定义的数据类型;(b)数据类型信息按服务数据对象(SD0)的规则,解析为服务数据对象(SD0),如 果类型为XSD原生类型,则解析为Java基本类型,如果类型为复杂类型(complexType),则 解析为服务数据对象(SD0)中的commonj. sdo. DataObject对象;(c)解析后的类型信息显示在WSDL资源树下的“类型”结点下;(d)解析WSDL文件中的portType结点,并分析出其中包括的操作以及参数类型;(e)参数类型的解析以服务数据对象(SD0)的规则进行,在解析参数个数时,根据 WSDL文件中定义的style (document、rpc)不同而采用不同解析方式;(f)解析后的portType信息显示在WSDL资源树下的“端口类型”结点下;(g)解析WSDL文件中的service结点,并解析出其包含的port子结点,根据每个port对应的binding找到相应的portType,进而显示service对应的操作以及参数信息;(h)解析后的service信息显示在WSDL资源树下的“服务”结点下。(6)资源树概览显示导入的XSD文件,包括以下步骤(a)解析XSD文件中包含的所有全局element结点和全局complexType结点信息;(b)全局element结点和全局complexType结点作为XML Schema的子结点显示在 资源树下的“数据”结点下;(c)解析类型的属性,并作为子结点显示在相应的类型下,类型的解析以服务数据 对象(SD0)的规则进行。(7)生成构件化Web Service调用图元,包括以下步骤(a)资源树中WSDL结点的子结点“服务”结点列出了服务下所有可以被调用的操 作,直接把操作拖放到构件编辑器中,生成Web Service调用图元;(b)生成的Web Service调用图元中显示出调用的操作以及Web Service服务所 在的端点地址(Endpoint);(c)生成的Web Service调用图元中,根据所选操作的类型信息,生成调用的实际 参数信息,包括参数个数和参数类型,其中类型的信息同资源树中类型的显示信息一致;(d)生成的Web Service调用图元根据需要可以添加SOAP Header和附件。(8)Web Service调用图元设置调用参数,包括以下步骤(a)输入、输出参数如果为简单类型,直接进行赋值;(b)输入、输出参数如果为复杂类型(SD0类型),通过XPath的方式对其定义的各 个属性分别进行赋值。(9)添加SOAP Header信息,包括以下步骤
(a) SOAP Header信息按Map结构进行存储;(b) Header 存储时,键(key)对应 SOAP Header 下 Header 的结点名称;(c) Header存储时,值(value)对应SOAP Header下对应键(key)结点的值;(d) Header存储的键(key)和值(value)按服务数据对象(SD0)的规则序列化;(e)序列化后的文档对象(document)作为SOAP Header添加到Header中。(10)添加SOAPAttachment信息,包括以下步骤(a) SOAP Attachment信息按Map结构进行存储;(b) Attachment 存储时,键(key)对应附件的 Content Id ;(c)Attachment存储时,值(value)对应附件的详细内容;(d)遍历存储的Attachment信息,作为附件信息添加到S0AP中。经过以上步骤,Web Service调用的准备阶段已经完成,开发完成的Web Service 调用图元示意图如图7所示。从中可以看出,用户在调用Web Service调用时,通过两个简 单的步骤导入和设置调用参数就完成了。所述的Web Service调用构件运行操作包括以下步骤(1)部署构件包下资源到构件运行环境,包括以下步骤(a)把构件包下的所有构件资源,如XSD文件、WSDL文件,拷贝到构件运行环境指 定的目录中;(b)构件包下定义的Java编译class文件以及页面资源(jsp文件、js文件),放
21到应用服务器指定的应用(webapp)目录中。(2)加载WSDL文件到构件运行环境,解析的类图如图3所示。所述的操作包括以 下步骤(a)构件运行环境启动时,遍历导入的所有WSDL文件;(b)解析WSDL文件中types结点下的schema结点加载成服务数据对象(SD0)的 类型;(c)加载WSDL文件中的service、binding、portType信息,封装为运行期模型,系 统中对运行期模型进行缓存,以提高性能;(d)加载WSDL文件中的portType定义的操作信息,并对每一操作参数信息进行缓 存,以提高调用性能;(e)判定 WSDL 文件对应的 style 类型(document/literal,document/literal/ wrapper, rpc/literal, rpc/encoded),并力口载至lj WSDL 运行期模型中。(3)加载XSD文件加载到构件运行环境,包括以下步骤(a)构件运行环境启动时,遍历导入的所有XSD文件;(b)解析XSD文件schema结点下的类型(elemenlcomplexType)信息,并加载成 服务数据对象(SD0)的类型;(c)对生成的服务数据对象(SD0)进行缓存,以提高类型的查找性能。(4)服务数据对象(SD0)序列化为文档对象(document),包括以下步骤(a)服务数据对象(SD0)根据对应的SchemaType信息,按Schema的定义序列化为 文档对象(document),包括结点名称和结点所在名称空间;(b)服务数据对象的属性类型为服务数据对象(SD0),按Schema的定义对其属性 序列化为文档对象(document)。(5)文档对象(document)反序列化为服务数据对象(SD0),包括以下步骤(a)文档对象根结点取得对应的名称空间信息;(b)由名称空间检索对应的服务数据对象(SD0);(c)遍历文档对象的子结点,找到服务数据对象(SD0)对应的同名属性;(d)如果为简单类型,直接进行赋值;(e)如果为复杂类型(SD0类型),则递归进行文档对象(document)的反序列化。(6)发送Web Service请求,流程图如图2所示。所述的操作包括以下步骤(a)构造 S0AP 信封;(b)根据WSDL文件定义的style类型,把作为输入参数的服务数据对象(SD0)序 列化成文档对象(document),序列化规则如下(I)输入参数的类型为简单类型,则按照输入参数对应的Schema中定义的类型进 行序列化,包括需要生成的结点名称以及所在的名称空间;(II)输入参数的类型为服务数据对象(SD0)的类型,则按照SD0的序列化进行, SD0数据对象在解析schema时已经与complexType进行了映射并对其进行了缓存,SD0数 据对象在序列化时,完全按照schema定义以及WSDL定义的相应style类型生成相应的结 点名称、属性以及所属的名称空间。(c)序列化后的文档对象作为SOAP Body的内容添加到S0AP信封中;
(d)如果Web Service调用图元设置了系按Map结构进行存储的Header信息,以 输入参数的序列化方式,把设定的Header信息序列化成文档对象(document);(e)序列化后的Header信息作为SOAP Header的内容添加到SOAP信封中;(f)如果Web Service调用图元设置了按Map结构进行存储的附件信息,把设定 的附件信息转换成javax. activation. DataHandler对象,并作为SOAP Attachment添力口到 SOAP信封中;(g)根据 Web Service 所在的 URL,建立 Http 连接;(h)设置 Http 连接的请求属性,设置 Content-type、Content-length、SOAPAction 为正确的请求数据信息;(j)把S0AP信封发送到连接的输出流中。(7)处理Web Service返回值,包括以下步骤(a)从Http连接的输出流中取得返回的S0AP信封;(b)从S0AP信封中取得SOAP Body的内容作为输出参数;(c)把输出参数按服务数据对象(SD0)的定义反序列化规则进行反序列化成 DataObject对象,并把反序列化后的值保存到调用的上下文中,以供其它构件资源访问;(8)解析返回SOAP Header信息,包括以下步骤(a)从S0AP信封中取得SOAP Header信息;(b) SOAP Header 按 Map 结构进行存储;(c)遍历SOAP Header下的结点,结点名称作为Map结构的键(key);(d)遍历键(key)结点的子结点,把其文档对象反序列化为服务数据对象(SD0), 作为Map结构的值(value);(e)S0AP Header信息保存到调用的上下文中,以供其它构件资源访问。(9)解析返回SOAPAttachment信息,包括以下步骤(a)从 S0AP 信封中取得 SOAPAttachment 信息;(b) SOAP Attachment 按 Map 结构进行存储;(c)Map结构的键(key)对应附件的Content Id ;(d)Map结构的值(value)对应附件的详细内容;(e) SOAP Attachment信息保存到调用的上下文中,以供其它构件资源访问。采用了上述的构件化软件系统中实现Web Service调用的方法,由于其中提供了 动态调用外部Web Service的方法,针对不同Web Service调用,不再需要生成其WSDL对 应的stub,减少了调用的操作步骤和对不同外部工具的依赖,真正做到了灵活的调用,同 时传递的数据采用标准的服务数据对象(SD0)进行封装,为异构环境的数据传递奠定了良 好的基础,从而在系统的集成工作中不再需要维护Web Service工具生成的大量调用Web Service代码,而且对于外部Web Service变化能够快速适应,从而使Web Service的开发、 调用过程更加直观、简单和高效,提高了调用的效率,快捷方便,系统运行效率较高,性能稳 定可靠,降低了开发维护的成本;同时增强了系统可移植性和可扩展性;不仅如此,该方法 还能够快速回应业务需求的变化和技术变化,能够支撑建立高度模块化而且又高度整合的 软件系统,适用范围较为广泛,为计算机构件化软件技术的进一步发展奠定了坚实的基础。在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的 而非限制性的。
权利要求
一种构件化软件系统中实现Web Service调用的方法,所述的构件化软件系统中包括图形化构件开发平台和与该图形化构件开发平台相连接的构件运行平台,其特征在于,所述的方法包括Web Service调用构件开发处理操作和Web Service调用构件运行处理操作,所述的Web Service调用构件开发处理操作,包括以下步骤(A1)系统的图形化构件开发平台新建构件包;(A2)所述的图形化构件开发平台导入外部的WSDL文件;(A3)所述的图形化构件开发平台导入该外部的WSDL文件所依赖的XSD文件;(A4)所述的图形化构件开发平台进行XSD模式类型与服务数据对象之间的相互转换;(A5)所述的图形化构件开发平台在资源树中概览显示所导入的WSDL文件中的WebService相关元素;(A6)所述的图形化构件开发平台在资源树中概览显示所导入的XSD文件中定义的类型以及属性信息;(A7)所述的图形化构件开发平台在构件编辑器中生成Web Service调用图元;(A8)所述的图形化构件开发平台对Web Service调用图元设置调用参数;(A9)所述的图形化构件开发平台添加SOAP头信息;(A10)所述的图形化构件开发平台添加SOAP附件信息;所述的Web Service调用构件运行处理操作,包括以下步骤(B1)系统将构件包下的资源部署到所述的构件运行平台的构件运行环境中;(B2)所述的构件运行平台加载WSDL文件到构件运行环境,并将其中的模式定义形成服务数据对象;(B3)所述的构件运行平台加载XSD文件到构件运行环境;(B4)所述的构件运行平台将所述的服务数据对象序列化为文档对象;(B5)所述的构件运行平台将文档对象反序列化为服务数据对象;(B6)所述的构件运行平台发送Web Service请求;(B7)所述的构件运行平台处理Web Service返回值;(B8)所述的构件运行平台解析并返回SOAP头信息;(B9)所述的构件运行平台解析并返回SOAP附件信息。
2.根据权利要求1所述的构件化软件系统中实现WebService调用的方法,其特征在 于,所述的构件包为包含一定功能逻辑的物理单元,且该构件包作为一个最小的部署单元 部署到所述的构件运行平台的构件运行环境中,该构件包中包含实现构件功能的所有依赖 资源。
3.根据权利要求2所述的构件化软件系统中实现WebService调用的方法,其特征在 于,所述的依赖资源包括WSDL文件、XSD文件、Java运行需要的类文件。
4.根据权利要求1至3中任一项所述的构件化软件系统中实现WebService调用的方 法,其特征在于,所述的导入外部的WSDL文件,包括以下步骤(11)所述的图形化构件开发平台根据外部WebService所在的URL,把该URL所指定 的WSDL文件下载到本地;(12)所述的图形化构件开发平台分析所下载的WSDL文件,如果所下载的WSDL文件中 包含引用的其它WSDL文件,则将该其它WSDL文件一并下载到本地;(13)所述的图形化构件开发平台将所下载的WSDL文件默认保存到构件包资源树下的“接口”结点下。
5.根据权利要求4所述的构件化软件系统中实现WebService调用的方法,其特征在 于,所述的WSDL文件中所包含引用的其它WSDL文件,为以下两种情形中的一种(1)通过{http://schemas.xmlsoap. org/wsdl/} import 所引用的 WSDL 文件;(2)通过{http://schemas.xmlsoap. org/wsdl/} include 所弓|用的 WSDL 文件。
6.根据权利要求1至3中任一项所述的构件化软件系统中实现WebService调用的方 法,其特征在于,所述的导入外部的WSDL文件所依赖的XSD文件,包括以下步骤(21)所述的图形化构件开发平台分析所下载的所有WSDL文件,如果WSDL文件中包含 引用的其它XSD文件,则把所引用的XSD文件下载到本地;(22)所述的图形化构件开发平台分析所下载的所有XSD文件,如果XSD文件中包含引 用的其它XSD文件,则把所引用的XSD文件下载到本地;(23)所述的图形化构件开发平台将所下载的XSD文件默认保存到构件包资源树下的 “XML模式”结点下。
7.根据权利要求6所述的构件化软件系统中实现WebService调用的方法,其特征在 于,所述的WSDL文件中所包含引用的其它XSD文件,为以下两种情形中的一种(1)在WSDL文件中的类型定义部分所包含的通过{http //www. w3. org/2001/ XMLSchem} import 所引用的 XSD 文件;(2)在WSDL文件中的类型定义部分所包含的通过{http //www. w3. org/2001/ XMLSchem} include 所引用的 XSD 文件。
8.根据权利要求6所述的构件化软件系统中实现WebService调用的方法,其特征在 于,所述的XSD文件中所包含引用的其它XSD文件,为以下两种情形中的一种(1)通过{http://www.w3. org/2001/XMLSchem} import 所引用的 XSD 文件;(2)通过{http://www.w3. org/2001/XMLSchem} include 所引用的 XSD 文件。
9.根据权利要求1至3中任一项所述的构件化软件系统中实现WebService调用的方 法,其特征在于,所述的图形化构件开发平台进行XSD模式类型与服务数据对象之间的相 互转换,包括以下步骤(31)所述的图形化构件开发平台将服务数据对象与XSD文件中定义的complexType对应;(32)所述的图形化构件开发平台将服务数据对象的属性与XSD文件中定义 complexType的属性对应;(33)所述的图形化构件开发平台判断XSD文件中定义complexType的属性类型是否为 复杂类型;(34)如果是,则该复杂类型对应另一服务数据对象,并作为该另一服务数据对象的属性。
10.根据权利要求1至3中任一项所述的构件化软件系统中实现WebService调用的 方法,其特征在于,所述的图形化构件开发平台在资源树中概览显示所导入的WSDL文件中 的WebService相关元素,包括以下步骤(41)所述的图形化构件开发平台解析WSDL文件中的“类型”结点下按XML模式的方式定义的数据类型;(42)按服务数据对象的规则将数据类型信息解析为服务数据对象;(43)将解析后的类型信息显示在WSDL资源树下的“类型”结点下;(44)所述的图形化构件开发平台解析WSDL文件中的“端口类型”结点并分析出其中包 括的操作以及参数类型;(45)以服务数据对象的规则进行参数类型的解析,在解析参数个数时,根据WSDL文件 中定义的风格的不同而采用不同解析方式;(46)解析后的端口类型信息显示在WSDL资源树下的“端口类型”结点下;(47)解析WSDL文件中的“服务”结点,并解析出其包含的端口子结点;(48)根据每个端口对应的绑定找到相应的端口类型,进而显示服务对应的操作以及参 数信息;(49)将解析后的服务信息显示在WSDL资源树下的“服务”结点下。
11.根据权利要求10所述的构件化软件系统中实现WebService调用的方法,其特 征在于,所述的按服务数据对象的规则将数据类型信息解析为服务数据对象,包括以下步 骤(421)如果数据类型为XSD原生类型,则将该数据类型解析为Java基本类型;(422)如果数据类型为复杂类型,则将稿数据类型解析为服务数据对象中的commonj. sdo. DataObject
12.根据权利要求1至3中任一项所述的构件化软件系统中实现WebService调用的 方法,其特征在于,所述的图形化构件开发平台在资源树中概览显示所导入的XSD文件中 定义的类型以及属性信息,包括以下步骤(51)所述的图形化构件开发平台解析XSD文件中所包含的所有全局元素结点和全局 复杂类型结点信息;(52)将全局元素结点和全局复杂类型结点作为XML模式的子结点显示在资源树下的 “数据”结点下;(53)以服务数据对象的规则进行类型的属性解析,并作为子结点显示在相应的类型下。
13.根据权利要求1至3中任一项所述的构件化软件系统中实现WebService调用的 方法,其特征在于,所述的构件编辑器中生成Web Service调用图元,包括以下步骤(61)在资源树中WSDL结点的子结点“服务”结点列出服务下所有可以被调用的操作, 所述的图形化构件开发平台根据用户的拖放动作将相应的操作拖放到构件编辑器中,并生 成Web Service调用图元;(62)所述的WebService调用图元显示出调用的操作以及Web Service服务所在的端 点地址;(63)所述的WebService调用图元根据所选操作的类型信息生成调用的实际参数信 息,其中包括参数个数和参数类型;(64)所述的WebService调用图元根据需要添加SOAP头信息和附件信息。
14.根据权利要求1至3中任一项所述的构件化软件系统中实现WebService调用的 方法,其特征在于,所述的对Web Service调用图元设置调用参数,包括以下步骤(71)所述的图形化构件开发平台判断输入参数和输出参数的类型;(72)如果输入参数和输出参数为简单类型,则直接进行赋值;(73)如果输入参数和输出参数为复杂类型,则通过XPath的方式对在复杂类型中定义 的各个属性分别进行赋值。
15.根据权利要求1至3中任一项所述的构件化软件系统中实现WebService调用的 方法,其特征在于,所述的添加SOAP头信息,包括以下步骤(81)将SOAP头信息按Map结构进行存储;(82)在该SOAP头信息存储时,Map结构中的键对应于SOAP头信息下头的结点名称;(83)在该SOAP头信息存储时,Map结构中的值对应于SOAP头信息下对应键结点的值;(84)将该SOAP头信息存储的键和值按服务数据对象的规则序列化;(85)将序列化后的文档对象作为SOAP头信息添加到头中。
16.根据权利要求1至3中任一项所述的构件化软件系统中实现WebService调用的 方法,其特征在于,所述的添加SOAP附件信息,包括以下步骤(91)将SOAP附件信息按Map结构进行存储;(92)在该SOAP附件信息存储时,Map结构中的键对应于SOAP附件信息中的 ContentId ;(93)在该SOAP附件信息存储时,Map结构中的值对应于SOAP附件信息中的详细内容;(94)遍历所存储的附件信息,并作为SOAP附件信息添加到SOAP中。
17.根据权利要求1至3中任一项所述的构件化软件系统中实现WebService调用的 方法,其特征在于,所述的将构件包下的资源部署到构件运行环境中,包括以下步骤(Cl)将构件包下的所有构件资源拷贝到构件运行环境所指定的目录中;(C2)将构件包下定义的Java编译类文件以及页面资源拷贝到应用服务器指定的应用 目录中。
18.根据权利要求17所述的构件化软件系统中实现WebService调用的方法,其特征 在于,所述的构件资源包括XSD文件和WSDL文件。
19.根据权利要求17所述的构件化软件系统中实现WebService调用的方法,其特征 在于,所述的页面资源包括jsp文件和js文件。
20.根据权利要求1至3中任一项所述的构件化软件系统中实现WebService调用的 方法,其特征在于,所述的加载WSDL文件到构件运行环境,包括以下步骤(Dl)构件运行环境启动时,遍历导入的所有WSDL文件;(D2)解析WSDL文件中类型结点下的模式结点并加载为服务数据对象的类型;(D3)加载WSDL文件中的服务、绑定、端口类型信息,并封装为运行期模型;(D4)判定WSDL文件对应的风格类型,并加载到WSDL运行期模型中。
21.根据权利要求20所述的构件化软件系统中实现WebService调用的方法,其特征 在于,所述的风格类型包括以下几种(1)document/literal ;(2)document/literal/wrapper;(3)rpc/literal、rpc/encoded。
22.根据权利要求1至3中任一项所述的构件化软件系统中实现WebService调用的方法,其特征在于,所述的加载XSD文件到构件运行环境,包括以下步骤 (El)构件运行环境启动时,遍历导入的所有XSD文件; (E2)解析XSD文件模式结点下的类型信息,并加载成服务数据对象的类型。
23.根据权利要求22所述的构件化软件系统中实现WebService调用的方法,其特征 在于,所述的XSD文件模式结点下的类型信息包括元素类型和复杂类型。
24.根据权利要求1至3中任一项所述的构件化软件系统中实现WebService调用的 方法,其特征在于,所述的将服务数据对象序列化为文档对象,包括以下步骤(Fl)服务数据对象根据对应的模式类型信息,按模式的定义序列化为文档对象,该文 档对象包括结点名称和结点所在名称空间;(F2)服务数据对象的属性类型为服务数据对象,并按模式的定义对其属性序列化为文 档对象。
25.根据权利要求1至3中任一项所述的构件化软件系统中实现WebService调用的 方法,其特征在于,所述的将文档对象反序列化为服务数据对象,包括以下步骤(Gl)文档对象根结点取得对应的名称空间信息;(G2)由名称空间检索对应的服务数据对象;(G3)遍历文档对象的子结点,找到服务数据对象对应的同名属性;(G4)如果该属性为简单类型,则直接进行赋值;(G5)如果该属性为复杂类型,则递归进行文档对象的反序列化。
26.根据权利要求1至3中任一项所述的构件化软件系统中实现WebService调用的 方法,其特征在于,所述的发送Web Service请求,包括以下步骤(Hl)构造SOAP信封;(H2)根据WSDL文件定义的风格类型,把作为输入参数的服务数据对象序列化成文档 对象;(H3)序列化后的文档对象作为SOAP体的内容添加到SOAP信封中; (H4)如果Web Service调用图元设置了头信息,按输入参数的序列化方式,把设定的 头信息序列化成文档对象;(H5)序列化后的头信息作为SOAP头的内容添加到SOAP信封中; (H6)如果Web Service调用图元设置了附件信息,把设定的附件信息转换成javax. activation. DataHandler对象,并作为SOAP附件信息添加到SOAP信封中; (H7)根据Web Service所在的URL建立Http连接;(H8)设置Http连接的请求属性,设置内容类型、内容长度、SOAP动作为正确的请求数 据信息;(H9)把SOAP信封发送到连接的输出流中。
27.根据权利要求26所述的构件化软件系统中实现WebService调用的方法,其特征 在于,所述的处理Web Service返回值,包括以下步骤(11)从Http连接的输出流中取得返回的SOAP信封;(12)从SOAP信封中取得SOAP体的内容作为输出参数;(13)把输出参数按服务数据对象定义的反序列化规则进行反序列化成数据对象,并把 反序列化后的值保存到调用的上下文中。
28.根据权利要求1至3中任一项所述的构件化软件系统中实现WebService调用的 方法,其特征在于,所述的解析并返回SOAP头信息,包括以下步骤(Jl)从SOAP信封中取得SOAP头信息;(J2) SOAP头信息按Map结构进行存储;(J3)遍历SOAP头信息下的结点,结点名称作为Map结构的键;(J4)遍历键结点的子结点,把其文档对象反序列化为服务数据对象,作为Map结构的值;(J5)S0AP头信息保存到调用的上下文中,以供其它构件资源访问。
29.根据权利要求1至3中任一项所述的构件化软件系统中实现WebService调用的 方法,其特征在于,所述的解析并返回SOAP附件信息,包括以下步骤(Kl)从SOAP信封中取得SOAP附件信息; (K2)将SOAP附件信息按Map结构进行存储; (K3)将Map结构的键对应于附件的ContentId ; (K4)将Map结构的值对应于附件的详细内容;(K5)将SOAP附件信息保存到调用的上下文中,以供其它构件资源访问。
全文摘要
本发明涉及一种构件化软件系统中实现Web Service调用的方法,所述的构件化软件系统中包括图形化构件开发平台和与该图形化构件开发平台相连接的构件运行平台,其中该方法包括Web Service调用构件开发处理操作和Web Service调用构件运行处理操作。采用该种构件化软件系统中实现Web Service调用的方法,使Web Service的开发、调用过程更加直观、简单和高效,快捷方便,系统运行效率较高,性能稳定可靠,降低了开发维护的成本;同时增强了系统可移植性和可扩展性;还能够快速回应业务需求的变化和技术变化,能够支撑建立高度模块化而且又高度整合的软件系统,适用范围较为广泛,为计算机构件化软件技术的进一步发展奠定了坚实的基础。
文档编号G06F9/44GK101853156SQ20101017198
公开日2010年10月6日 申请日期2010年5月12日 优先权日2010年5月12日
发明者游青华, 王文斌, 王 锋 申请人:上海普元信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1