公开/公告号CN101853156A
专利类型发明专利
公开/公告日2010-10-06
原文格式PDF
申请/专利权人 上海普元信息技术股份有限公司;
申请/专利号CN201010171986.0
申请日2010-05-12
分类号G06F9/44(20060101);
代理机构31002 上海智信专利代理有限公司;
代理人王洁;郑暄
地址 201203 上海市张江高科技园区碧波路456号4F
入库时间 2023-12-18 00:56:43
法律状态公告日
法律状态信息
法律状态
2013-11-20
专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F9/44 变更前: 变更后: 申请日:20100512
专利权人的姓名或者名称、地址的变更
2013-07-17
授权
授权
2010-11-24
实质审查的生效 IPC(主分类):G06F9/44 申请日:20100512
实质审查的生效
2010-10-06
公开
公开
技术领域
本发明涉及计算机软件领域,特别涉及构件化软件系统技术领域,具体是指一种构件化软件系统中实现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.DataObject对象。
该构件化软件系统中实现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结构中的值对应于SOAP头信息下对应键结点的值;
(84)将该SOAP头信息存储的键和值按服务数据对象的规则序列化;
(85)将序列化后的文档对象作为SOAP头信息添加到头中。
该构件化软件系统中实现Web Service调用的方法中的添加SOAP附件信息,包括以下步骤:
(91)将SOAP附件信息按Map结构进行存储;
(92)在该SOAP附件信息存储时,Map结构中的键对应于SOAP附件信息中的ContentId;
(93)在该SOAP附件信息存储时,Map结构中的值对应于SOAP附件信息中的详细内容;
(94)遍历所存储的附件信息,并作为SOAP附件信息添加到SOAP中。
该构件化软件系统中实现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请求,包括以下步骤:
(H1)构造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信封发送到连接的输出流中。
该构件化软件系统中实现Web Service调用的方法中的处理Web Service返回值,包括以下步骤:
(I1)从Http连接的输出流中取得返回的SOAP信封;
(I2)从SOAP信封中取得SOAP体的内容作为输出参数;
(I3)把输出参数按服务数据对象定义的反序列化规则进行反序列化成数据对象,并把反序列化后的值保存到调用的上下文中。
该构件化软件系统中实现Web Service调用的方法中的解析并返回SOAP头信息,包括以下步骤:
(J1)从SOAP信封中取得SOAP头信息;
(J2)SOAP头信息按Map结构进行存储;
(J3)遍历SOAP头信息下的结点,结点名称作为Map结构的键;
(J4)遍历键结点的子结点,把其文档对象反序列化为服务数据对象,作为Map结构的值;
(J5)SOAP头信息保存到调用的上下文中,以供其它构件资源访问。
该构件化软件系统中实现Web Service调用的方法中的解析并返回SOAP附件信息,包括以下步骤:
(K1)从SOAP信封中取得SOAP附件信息;
(K2)将SOAP附件信息按Map结构进行存储;
(K3)将Map结构的键对应于附件的ContentId;
(K4)将Map结构的值对应于附件的详细内容;
(K5)将SOAP附件信息保存到调用的上下文中,以供其它构件资源访问。
采用了该发明的构件化软件系统中实现Web Service调用的方法,由于其中提供了动态调用外部Web Service的方法,针对不同Web Service调用,不再需要生成其WSDL对应的stub,减少了调用的操作步骤和对不同外部工具的依赖,真正做到了灵活的调用,同时传递的数据采用标准的服务数据对象(SDO)进行封装,为异构环境的数据传递奠定了良好的基础,从而在系统的集成工作中不再需要维护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)与SDO类型转换类图。
图6为本发明的构件化软件系统中实现Web Service调用的方法中序列化、反序列化的类图。
图7为本发明的构件化软件系统中实现Web Service调用的方法中Web Service调用图元的示意图。
图8为本发明的构件化软件系统中实现Web Service调用的方法中SOAP消息结构示意图。
具体实施方式
为了能够更清楚地理解本发明的技术内容,特举以下实施例详细说明。
在调用Web Service服务时,客户端与服务器端交互的桥梁是WSDL(Web ServiceDefinition Language,Web服务定义语言),其中包括了以下几个主要元素:
●types——数据类型定义的容器,使用XML Schema来描述数据类型的结构信息。
●portType——描述服务操作的抽象集合,与Java接口类似。
●binding——数据传输过程中指定的具体传输协议以及所定义操作的数据格式规范。
●service——对外提供的服务。
●operation——对服务中所支持的操作的抽象描述,描述了访问入口的请求/响应消息以及异常的声明。
在调用Web Service过程中,客户端与服务器端交互的信息为SOAP消息,以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文件,为以下两种情形中的一种:
(i)通过{http://schemas.xmlsoap.org/wsdl/}import所引用的WSDL文件;
(ii)通过{http://schemas.xmlsoap.org/wsdl/}include所引用的WSDL文件;
(c)所述的图形化构件开发平台将所下载的WSDL文件默认保存到构件包资源树下的“接口”结点下;
(A3)所述的图形化构件开发平台导入该外部的WSDL文件所依赖的XSD文件,包括以下步骤:
(a)所述的图形化构件开发平台分析所下载的所有WSDL文件,如果WSDL文件中包含引用的其它XSD文件,则把所引用的XSD文件下载到本地;该WSDL文件中所包含引用的其它XSD文件,为以下两种情形中的一种:
(i)在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.DataObject对象;
(c)将解析后的类型信息显示在WSDL资源树下的“类型”结点下;
(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)在该SOAP头信息存储时,Map结构中的值对应于SOAP头信息下对应键结点的值;
(d)将该SOAP头信息存储的键和值按服务数据对象的规则序列化;
(e)将序列化后的文档对象作为SOAP头信息添加到头中;
(A10)所述的图形化构件开发平台添加SOAP附件信息,包括以下步骤:
(a)将SOAP附件信息按Map结构进行存储;
(b)在该SOAP附件信息存储时,Map结构中的键对应于SOAP附件信息中的ContentId;
(c)在该SOAP附件信息存储时,Map结构中的值对应于SOAP附件信息中的详细内容;
(d)遍历所存储的附件信息,并作为SOAP附件信息添加到SOAP中;
所述的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)由名称空间检索对应的服务数据对象;
(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附件信息添加到SOAP信封中;
(g)根据Web Service所在的URL建立Http连接;
(h)设置Http连接的请求属性,设置内容类型、内容长度、SOAP动作为正确的请求数据信息;
(j)把SOAP信封发送到连接的输出流中;
(B7)所述的构件运行平台处理Web Service返回值,包括以下步骤:
(a)从Http连接的输出流中取得返回的SOAP信封;
(b)从SOAP信封中取得SOAP体的内容作为输出参数;
(c)把输出参数按服务数据对象定义的反序列化规则进行反序列化成数据对象,并把反序列化后的值保存到调用的上下文中;
(B8)所述的构件运行平台解析并返回SOAP头信息,包括以下步骤:
(a)从SOAP信封中取得SOAP头信息;
(b)SOAP头信息按Map结构进行存储;
(c)遍历SOAP头信息下的结点,结点名称作为Map结构的键;
(d)遍历键结点的子结点,把其文档对象反序列化为服务数据对象,作为Map结构的值;
(e)SOAP头信息保存到调用的上下文中,以供其它构件资源访问;
(B9)所述的构件运行平台解析并返回SOAP附件信息,包括以下步骤:
(a)从SOAP信封中取得SOAP附件信息;
(b)将SOAP附件信息按Map结构进行存储;
(c)将Map结构的键对应于附件的ContentId;
(d)将Map结构的值对应于附件的详细内容;
(e)将SOAP附件信息保存到调用的上下文中,以供其它构件资源访问。
在实际使用当中,该构件化软件系统中实现调用Web Service的方法,包括图形化构件开发平台和构件的运行平台,所述的方法包括Web Service调用构件开发操作和Web Service调用构件运行操作,如图2所示。在Web Service开发和调用过程中,数据的定义和封装采用统一的服务数据对象(SDO,Service Data Object)模型,服务数据对象(SDO)统一了不同数据源类型的数据编程,提供了对通用应用程序模式的健壮支持,并使应用程序和工具更容易查询、读取,其操作按XPath规则进行,服务数据对象(SDO)与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与服务数据对象(SDO)的相互转换,包括以下步骤:
(a)服务数据对象与XSD中定义的complexType对应;
(b)服务数据对象的属性与XSD中定义complexType的属性对应;
(c)XSD中定义complexType的属性类型如为complexType,则对应另一服务数据对象,并作为服务数据对象的属性。
(5)资源树概览显示导入的WSDL文件,包括以下步骤:
(a)解析WSDL文件中的types结点下按照XML Schema的方式定义的数据类型;
(b)数据类型信息按服务数据对象(SDO)的规则,解析为服务数据对象(SDO),如果类型为XSD原生类型,则解析为Java基本类型,如果类型为复杂类型(complexType),则解析为服务数据对象(SDO)中的commonj.sdo.DataObject对象;
(c)解析后的类型信息显示在WSDL资源树下的“类型”结点下;
(d)解析WSDL文件中的portType结点,并分析出其中包括的操作以及参数类型;
(e)参数类型的解析以服务数据对象(SDO)的规则进行,在解析参数个数时,根据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)解析类型的属性,并作为子结点显示在相应的类型下,类型的解析以服务数据对象(SDO)的规则进行。
(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)输入、输出参数如果为复杂类型(SDO类型),通过XPath的方式对其定义的各个属性分别进行赋值。
(9)添加SOAP Header信息,包括以下步骤:
(a)SOAP Header信息按Map结构进行存储;
(b)Header存储时,键(key)对应SOAP Header下Header的结点名称;
(c)Header存储时,值(value)对应SOAP Header下对应键(key)结点的值;
(d)Header存储的键(key)和值(value)按服务数据对象(SDO)的规则序列化;
(e)序列化后的文档对象(document)作为SOAP Header添加到Header中。
(10)添加SOAPAttachment信息,包括以下步骤:
(a)SOAP Attachment信息按Map结构进行存储;
(b)Attachment存储时,键(key)对应附件的ContentId;
(c)Attachment存储时,值(value)对应附件的详细内容;
(d)遍历存储的Attachment信息,作为附件信息添加到SOAP中。
经过以上步骤,Web Service调用的准备阶段已经完成,开发完成的Web Service调用图元示意图如图7所示。从中可以看出,用户在调用Web Service调用时,通过两个简单的步骤:导入和设置调用参数就完成了。
所述的Web Service调用构件运行操作包括以下步骤:
(1)部署构件包下资源到构件运行环境,包括以下步骤:
(a)把构件包下的所有构件资源,如XSD文件、WSDL文件,拷贝到构件运行环境指定的目录中;
(b)构件包下定义的Java编译class文件以及页面资源(jsp文件、js文件),放到应用服务器指定的应用(webapp)目录中。
(2)加载WSDL文件到构件运行环境,解析的类图如图3所示。所述的操作包括以下步骤:
(a)构件运行环境启动时,遍历导入的所有WSDL文件;
(b)解析WSDL文件中types结点下的schema结点加载成服务数据对象(SDO)的类型;
(c)加载WSDL文件中的service、binding、portType信息,封装为运行期模型,系统中对运行期模型进行缓存,以提高性能;
(d)加载WSDL文件中的portType定义的操作信息,并对每一操作参数信息进行缓存,以提高调用性能;
(e)判定WSDL文件对应的style类型(document/literal,document/literal/wrapper,rpc/literal,rpc/encoded),并加载到WSDL运行期模型中。
(3)加载XSD文件加载到构件运行环境,包括以下步骤:
(a)构件运行环境启动时,遍历导入的所有XSD文件;
(b)解析XSD文件schema结点下的类型(element、complexType)信息,并加载成服务数据对象(SDO)的类型;
(c)对生成的服务数据对象(SDO)进行缓存,以提高类型的查找性能。
(4)服务数据对象(SDO)序列化为文档对象(document),包括以下步骤:
(a)服务数据对象(SDO)根据对应的SchemaType信息,按Schema的定义序列化为文档对象(document),包括结点名称和结点所在名称空间;
(b)服务数据对象的属性类型为服务数据对象(SDO),按Schema的定义对其属性序列化为文档对象(document)。
(5)文档对象(document)反序列化为服务数据对象(SDO),包括以下步骤:
(a)文档对象根结点取得对应的名称空间信息;
(b)由名称空间检索对应的服务数据对象(SDO);
(c)遍历文档对象的子结点,找到服务数据对象(SDO)对应的同名属性;
(d)如果为简单类型,直接进行赋值;
(e)如果为复杂类型(SDO类型),则递归进行文档对象(document)的反序列化。
(6)发送Web Service请求,流程图如图2所示。所述的操作包括以下步骤:
(a)构造SOAP信封;
(b)根据WSDL文件定义的style类型,把作为输入参数的服务数据对象(SDO)序列化成文档对象(document),序列化规则如下:
(I)输入参数的类型为简单类型,则按照输入参数对应的Schema中定义的类型进行序列化,包括需要生成的结点名称以及所在的名称空间;
(II)输入参数的类型为服务数据对象(SDO)的类型,则按照SDO的序列化进行,SDO数据对象在解析schema时已经与complexType进行了映射并对其进行了缓存,SDO数据对象在序列化时,完全按照schema定义以及WSDL定义的相应style类型生成相应的结点名称、属性以及所属的名称空间。
(c)序列化后的文档对象作为SOAP Body的内容添加到SOAP信封中;
(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)把SOAP信封发送到连接的输出流中。
(7)处理Web Service返回值,包括以下步骤:
(a)从Http连接的输出流中取得返回的SOAP信封;
(b)从SOAP信封中取得SOAP Body的内容作为输出参数;
(c)把输出参数按服务数据对象(SDO)的定义反序列化规则进行反序列化成DataObject对象,并把反序列化后的值保存到调用的上下文中,以供其它构件资源访问;
(8)解析返回SOAP Header信息,包括以下步骤:
(a)从SOAP信封中取得SOAP Header信息;
(b)SOAP Header按Map结构进行存储;
(c)遍历SOAP Header下的结点,结点名称作为Map结构的键(key);
(d)遍历键(key)结点的子结点,把其文档对象反序列化为服务数据对象(SDO),作为Map结构的值(value);
(e)SOAP Header信息保存到调用的上下文中,以供其它构件资源访问。
(9)解析返回SOAPAttachment信息,包括以下步骤:
(a)从SOAP信封中取得SOAPAttachment信息;
(b)SOAP Attachment按Map结构进行存储;
(c)Map结构的键(key)对应附件的ContentId;
(d)Map结构的值(value)对应附件的详细内容;
(e)SOAP Attachment信息保存到调用的上下文中,以供其它构件资源访问。
采用了上述的构件化软件系统中实现Web Service调用的方法,由于其中提供了动态调用外部Web Service的方法,针对不同Web Service调用,不再需要生成其WSDL对应的stub,减少了调用的操作步骤和对不同外部工具的依赖,真正做到了灵活的调用,同时传递的数据采用标准的服务数据对象(SDO)进行封装,为异构环境的数据传递奠定了良好的基础,从而在系统的集成工作中不再需要维护Web Service工具生成的大量调用Web Service代码,而且对于外部Web Service变化能够快速适应,从而使Web Service的开发、调用过程更加直观、简单和高效,提高了调用的效率,快捷方便,系统运行效率较高,性能稳定可靠,降低了开发维护的成本;同时增强了系统可移植性和可扩展性;不仅如此,该方法还能够快速回应业务需求的变化和技术变化,能够支撑建立高度模块化而且又高度整合的软件系统,适用范围较为广泛,为计算机构件化软件技术的进一步发展奠定了坚实的基础。
在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。
机译: 用于在操作系统环境中实现服务的软件模块过程调用方法,包括从表示形式对通用方法进行参数化,并执行用于对软件模块过程进行调用的通用方法
机译: 基于Web的办公软件系统,通过共享可编辑的组织结构和相关的管理方法,能够使所有组织成员共享Web中的组织图表
机译: 从本地设备上的Web浏览器调用小号的方法和系统,使用MIDlet调用网络页面视频的sess u00e7o的方法,本地设备以及comunica u00c7 u00e7o中具有本地设备