Java系统的Web服务化方法与装置的制作方法

文档序号:6597413阅读:226来源:国知局

专利名称::Java系统的Web服务化方法与装置的制作方法
技术领域
:本发明实施例涉及Web服务化领域,尤其涉及一种Java系统的Web服务化方法与装置。
背景技术
:目前基于Java技术开发的系统数量十分巨大,随着应用环境的改变,这些原有系统的可使用性不断下降,Web服务技术的兴起为这些Java系统的改造提供了解决途径。Web服务(Webservice)是基于网络的、分布式的模块化组件,它执行特定的任务,遵循具体的技术规范,这些规范使得web服务能与其他兼容的组件进行互操作。Web服务体系结构中共有三种角色服务提供者(ServiceProvider):对外提供服务,并且通过注册来发布服务信息;服务注册者(ServiceRegister):提供服务的注册和定位功能;服务请求者(ServiceRequester):通过服务注册者查询所需服务,并通过服务提供者绑定服务。Web服务的产生一是手动开发,二是Web服务封装,其中,Web服务封装是指将原有的以非Web服务形态存在的程序修改成以Web服务形态存在的程序。因此,通过Web服务封装可以实现对现有Java系统的Web服务化。目前,Java系统Web服务化的过程主要靠人工完成,效率低下,软件质量难以保证。为解决上述问题,Apache组织开发的Axis项目中提供了Java2WSDL和WSDL2Java工具,这两个工具可以自动将Java程序封装为Web服务,并提供自动生成服务的访问协助代码的功能。但该工具将整个Java程序整体封装为Web服务,无法实现系统的Web服务化,例如,当原系统中既有调用者(具体指一个Java程序),又有被调用者(具体为一个Java程序),而被调用者被封装为Web服务后,调用者也必须修改调用的方式以维持原有的调用关系,即调用者需要编写适于Web服务的调用代码去调用封装的Web服务,而上述两个工具无法做到这一点,即使自动生成协助代码也只是减少了调用者编写的部分调用代码,调用者仍然要编写调用代码,因此,上述工具并没有将原有的调用关系彻底修改为Web服务方式,尤其是调用者方面,同时,现有技术将整个Java程序封装为Web服务,限制了Java程序服务化的范围。
发明内容本发明实施例提供一种Java系统的Web服务化方法与装置,用以解决现有技术无法将Java系统中调用关系Web化的缺陷,同时扩大了Web服务的可服务化范围。本发明实施例提供一种Java系统的Web服务化方法,包括对Java系统的字节码文件进行分析,获取所述Java系统中对象间的结构关系;根据所述Java系统中对象间的结构关系,将所述Java系统划分为不同的可服务化模块,所述可服务化模块包括所述Java系统中的一个或多个类;建立所述可服务化模块中每个被访问类的访问代理,并对所述可服务化模块进行Web服务化封装生成Web服务模块,以实现对所述Java系统的Web服务化,其中所述可服务化模块中的每个被访问类被映射封装为所述Web服务模块中的一个类;所述访问代理用于使客户端以访问所述可服务化模块中类的方式访问所述Web服务模块中对应的类。本发明实施例提供一种Java系统的Web服务化装置,包括分析获取模块,用于对Java系统的字节码文件进行分析,获取所述Java系统中对象间的结构关系;划分模块,用于根据所述Java系统中对象间的结构关系,将所述Java系统划分为不同的可服务化模块,所述可服务化模块包括所述Java系统中的一个或多个类;封装生成模块,用于建立所述可服务化模块中每个被访问类的访问代理,并对所述可服务化模块进行Web服务化封装生成Web服务模块,以实现对所述Java系统的Web服务化,其中所述可服务化模块中的每个被访问类被映射封装为所述Web服务模块中的一个类;所述访问代理用于使客户端以访问所述可服务化模块中类的方式访问所述Web服务模块中对应的类。本发明实施例的Java系统的Web服务化方法与装置,通过对Java系统进行模块化划分,通过可服务化模块扩展了原Java系统的可服务范围;在对可服务化模块进行Web封装的同时,建立访问Web服务模块中类或类对象的访问代理,通过访问代理,客户端无须修改原来的调用关系,可以直接使用Web服务。为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本发明一实施例的Java系统的Web服务化方法的流程图;图2为图1中步骤11一种实施方法的流程图;图3为图1中步骤12—种实施方法的流程图;图4为本发明一实施例的Java系统的Web服务化装置的结构示意图。具体实施例方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。Web服务技术需要一套规范来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统,要实现互操作性,web服务技术必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。目前常用的规范有可扩展标记语言(ExtensibleMarkupLanguage;简称为XML):它是Web服务技术中表示数据的基本格式。XML与平台无关,也与厂商无关,因此获得广泛应用。简单对象访问协议(SimpleObjectAccessProtocol;简称为S0AP):服务提供者和服务请求者之间通过传递SOAP消息来调用web服务。SOAP定义了请求和响应消息的格式,建立在XML之上,是一种跨平台的实现信息交换的简单包装方法。Web服务描述语言(WebServiceDescriptionLanguage;简称为WSDL):主要是通过用一种机器可读的方式为web服务提供一个基于XML的描述文档,用于描述Web服务及其操作。统一描述、发现、集成(UniversalDescriptionDiscoveryandIntegration;简称为UDDI):是一套基于Web的、分布式的、为web服务提供信息注册中心的实现标准规范。同时,也包含一组使企业能将自身提供的恥b服务注册以使别的企业能够发现并访问的访问协议的实现标准。—旦Web服务生成,服务调用者获得Web服务的WSDL文件后,通过使用UDDI查询获得WSDL,然后利用WSDL里的特定信息采用标准的方法(例如S0AP、超文本传输协议(HypertextTransferProtocol;简称为HTTP))来使用相应的服务。上面具体描述了Web服务形成后的使用过程,将系统Web服务化的目的就是使用Web服务,因此,在Web服务化过程中需要充分考虑使用Web服务中的各种因素,例如通信机制、语言规范等,以保证生成的Web服务在使用时能够与现有Web服务机制相适应获得最佳效果。基于上述,本发明在对Java系统进行划分或封装时,充分考虑了形成Web服务后的使用过程。图1为本发明一实施例的Java系统的Web服务化方法的流程图。如图1所示,本实施例的方法包括步骤ll,对Java系统的字节码文件进行分析,获取Java系统中对象间的结构关系;其中,字节码文件是指Java源程序文件被Java虚拟机编译后的文件,这种文件可以被Java虚拟机解释后运行。字节码技术通过在程序运行期动态的修改Java中的类(class)文件字节码的方法,使程序获得一定的灵活性。步骤12,根据Java系统中对象间的结构关系,将Java系统划分为不同的可服务化模块;其中,可服务化模块是指可以进行Web服务的最小单元,具体的一个可服务化模块可以包括Java系统中的一个类,也可以包含有多个类;例如,Java系统中有类A、类B和类C,若类A调用类B,类B调用类C,而类C又调用类A,由于类A、类B和类C之间的关系很紧凑,因此可以将三者划为一个可服务化模块;本实施例具体根据对象间的结构关系的紧凑程度进行模块的划分。步骤13,建立可服务化模块中每个被访问类的访问代理,并对可服务化模块进行Web服务化封装生成Web服务模块,以实现对Java系统的Web服务化;其中可服务化模块中的每个被访问类被映射封装为Web服务模块中的一个类;访问代理用于使客户端以访问可服务化模块中类的方式访问Web服务模块中对应的类。该步骤用于对Java系统的Web服务化,Web服务封装是指将原有的以非Web服务形式存在的程序修改为以Web服务形态存在的程序,由于Java程序的存在形态变化了,原系统中的调用关系将不再适用,本实施例通过利用Java技术中的字节码重写技术,根据原系统中的调用过程自动生成访问代理,并置于客户端,在保持原系统语义的基础上,即客户端无须修改原有的调用方式,可以直接以访问可服务化模块中类的方式访问Web服务模块中对应的类,以成功调用服务化的方法。进一步,可服务化模块中的每一个被访问类对应一个访问代理,且访问代理的标识与可服务化模块中对应类相对应,其也可以与对应的类名相同;访问代理的函数方法的名称要与可服务化模块中对应类的函数方法的名称相同,访问代理的函数方法用于调用Web服务模块中的对应类。具体的,访问代理的实现形式可以是一个类,且是一个与原有类的外部特征相同功能不同的类,例如访问代理可以采用与原有类的类名相同,方法名相同,但是方法体不同的类来实现,实现访问代理的功能的类的方法体为调用Web服务模块中对应的类的特定方法,并返回经该特定方法计算后返回的值。通常,服务化封装后,调用类和访问代理将会被布置在客户端,而被调用类将被布置在服务端。访问代理担任中介角色,中转客户端对Web服务模块中对应的类的调用,作为原有类的代理,由于访问代理与被调用类的外部特征相同,因此调用类无需修改原有的调用方式,即可直接调用访问代理,而访问代理将调用类的请求以Web服务请求的形式传送给服务端,以完成客户端的调用类对封装后布置于服务端的被调用类的调用。本实施例提供的Java系统的Web服务化方法,通过字节码重写技术自动生成可服务化模块中类的访问代理,保证调用类在不对原有的调用关系作出修改的情况下,完成对Web服务模块中的被调用类的调用,从而实现整个Java系统的Web服务化;同时,通过对Java系统进行模块划分,使Java系统的服务化范围得到扩展。进一步,本实施例提供的Java系统的Web服务化方法还包括为可服务化模块中类的对象建立客户端访问代理和服务端访问代理,并对可服务化模块进行Web服务化封装生成Web服务化模块,其中可服务化模块中类的每一个对象被映射封装为Web服务模块中对应类的一个对象;客户端访问代理用于使客户端以调用可服务化模块中类的对象的方式调用服务端访问代理,并通过服务端访问代理调用Web服务模块中对应的类的相应对象,客户端访问代理和服务端访问代理使用唯一标识可服务化模块中类的对象和Web服务模块中对应类的相应对象的标识来维护可服务化模块中类的对象和Web服务化模块中对应的类的相应对象的调用关系。具体的,当客户端调用Web服务模块中某个类的对象时,通过调用客户端访问代理实现,通过客户端访问代理创建该类的对象的标识,同时将该标识传送给服务端访问代理,使服务端访问代理生成与该标识相应的对象,以供客户端访问代理以该标识为参数通过服务端访问代理调用Web服务模块所创建的类对象。上述技术方案,用于实现对运行过程中的Java系统的Web服务化,与静态期的Java系统的Web服务化相似,区别在于需要为类的对象建立客户端访问代理和服务端访问代理。下面对上述实施例中各个步骤进行详细描述图2为图1中步骤11一种实施方法的流程图,如图2所示,步骤11具体包括步骤110,对Java系统的字节码文件进行分析,生成描述Java系统的原始结构图,该原始结构图具体描述了Java系统所包含的类以及运行过程中生成的类对象;步骤lll,对原始结构图进行静态分析,获取Java系统中静态类之间的结构信息;步骤112,运行Java系统,获取运行期中Java系统的对象调用信息;步骤113,根据静态类之间的结构信息和对象调用信息生成对象关系图,以获取Java系统中对象间的结构关系。具体的,对象关系图是一个由四元组构成的关系图,该四元组为〈V,E,I,WE〉,其中V是点集合,每个点代表Java系统运行实例中的一个对象;E是边的集合,每条边代表两个对象之间的关系,例如调用关系、继承关系等;1是实现点和边映之间映射关系的映射函数;WE是边的权重值,权重值的大小代表了两个对象之间的关系的紧凑程度。通过上述步骤得到的对象间的结构关系,既包括有Java系统中类之间的静态关系,例如继承关系,同时还包括运行过程中产生的动态关系,例如调用关系,因此,基于本实施例提供的Java系统对象间的结构关系对系统进行划分,可以实现对Java系统的最合理的划分。进一步,图3为图1中步骤12—种实施方法的流程图,如图3所示,步骤12具体包括以下步骤步骤120,根据Java系统中对象间的结构关系的紧凑度,合并对象关系图中无法分割的对象,并将对象关系图划分为不同的强连通集,以生成模块关系图;具体根据对象间关系的紧凑程度,对对象关系图进行分析并做进一步处理,具体指根据合并条件对无法分割的对象进行合并,例如存在继承关系的对象,以及根据设定的最大强连通集的划分标准求取对象间的最大强连通集,将一个最大强连通集作为一个模块,由模块和模块间的关系构成模块关系图。其中,最大强连通集描述了符合划分标准的几个类之间的关系,即将这几个类作为一个整体;其中合并条件和划分标准,可以根据实际需求和具体Java系统而设置,本实施例对此不作限制。步骤121,对模块关系图进行最大流最小割处理,获取模块关系图的切面;本步骤以模块度和系统性能为目标,对模块关系图进行最大流最小割处理,通过设置目标值以获得最佳的切面。具体为使用对象作为网络流中的节点而对象间的调用次数作为网络流中边的容量,通过最大流最小割处理可以获得总调用次数最少的切面,即保证了不同模块间的调用尽量少,而模块内的调用尽量多,这就保证了模块度和Web服务化封装后的程序的运行性能。步骤123,根据切面将Java系统划分为不同的可服务化模块。目前,基于系统的自动Web服务化过程中通常存在如下问题系统的自身特征大量系统已经成功运行在线,通常对这些系统的改造、重组和优化过程要求不破坏原有系统的行为,这对系统分解造成困难。目前大量系统缺乏技术文档,设计和开发人员已无法联系,甚至没有源码等,这些问题严重制约了服务化过程;面向对象技术的复杂性面向对象方法是目前软件生产过程中最主要的设计和开发技术之一。然而,面向对象技术和方法,如继承、多态和重载等特性,无法直接应用于Web服务架构;Java语言的特性Java语言做为目前最广泛使用的语言之一实现了面向对象语言的所有特征,同时也增加了很多独特的特性,如反射,动态类加载,垃圾回收等。而这些特性极大的增加了对Java系统Web服务化的复杂度;本发明技术方案通过上述步骤110-步骤123,可以成功的分解原有Java系统,克服了现有技术中上述无法实现对Java系统进行Web服务化的缺陷。同时,由于Web服务技术是由一系列标准规范组成,因此必须保证分解后的系统和使用Web服务的过程符合Web服务的应用场景和技术规范,本发明技术方案具体通过为静态类提供访问代理,而为运行过程中的类对象提供客户端访问代理和服务端访问代理,以保证按照Web服务应用场景和技术规范使用Web服务。下面将以具体的例子对本发明技术方案的封装原理以及封装后的使用过程进行介绍,以便于理解本发明技术方案本实施例对类级别的服务化封装过程的实例进行说明,并提供程序代码以便于更加直观的理解本实施例的技术方案。为便于说明类级别的服务化封装过程,做如下假设假设Java系统中的类A(classA)有一个方法a,要调用类B(classB)中的方法b。本实施例提供的Web服务化方法具体包括对Java系统进行分析划分,将类B划分为可服务化模块;之后将被调用类B封装为Web服务classBws,并布置于服务端(如下所示程序代码中虚线右侧)的服务环境中(例如服务容器);并通过运行字节码重写技术创建一个与类B的外部特征相同的访问代理B'(classB'),使访问代理B'代替类B,实现对类级别的服务化封装。对本实施例中的Web服务的使用过程具体为由于访问代理B'与类B的外部特征相同,所以无需修改类A的调用方式,其方法a将会调用访问代理B',而访问代理B'通过Web服务调用封装后的类B的方法b。经过上述处理后原系统成为了分布式系统,Java系统被Web服务化后,原来的类B改变为以服务的形式存在于服务端,不仅可以被原Java系统调用,还可以被新增的扩展功能调用,从而实现了原Java系统的重构和升值。其中,类级别的服务化封装过程的程序代码如下<table>tableseeoriginaldocumentpage9</column></row><table>目前类似的转化工作多数是由程序员手工完成重构和封装过程,效率低下,质量不高。本实施例提供的自动完成重构和封装的过程极大的提高了软件的复用度和软件重构过程的开发效率和质量。对于一个Java系统只有运行才具有实际意义,因此,下面将介绍本发明技术方案如何实现对类对象的封装以及使用过程本实施例对对象级别的服务化封装过程的实例进行说明,并提供程序代码以便于更加直观的理解本实施例的技术方案。一个类可以有多个类对象,Java系统被Web服务化后,当调用Web服务中的类对象时,要求客户端(调用者)和服务端(被调用者)之间的信息和状态保持一致,以保证成功调用所需的对象。对于此,本实施例通过对象标识机制实现7/10页对同一类不同对象的区分。同一对象在客户端和服务端具有相同的对象标识,当调用Web服务中类的对象时,客户端会在创建对象之时生成对象标识,具体通过调用客户端访问代理实现对类对象的创建和调用;同时客户端通过Web服务的通信机制通知服务端和客户端同步生成对象标识,并使服务端根据同时传输过去的调用参数生成与该对象标识对应的对象,以便客户端进行调用,其中对象标识具有唯一性,即不同类对象的对象标识不相同。其中,客户端通过客户端访问代理以生成的对象标识作为参数调用服务端访问代理,客户端访问代理通过该对象标识从Web服务中被调用类的多个对象中找到与该对象标识相应的对象,实现对Web服务中类的对象的调用。如下面程序代码所示,原Java系统中,类A的方法a和类B的方法b都调用了类B的方法b,但是在运行过程中类A和类B的对象却引用了类B的不同对象。根据本发明实施例提供的方法对Java系统进行Web服务化,具体的,通过对Java系统的分析,将Java系统划分为多个可服务化模块,其中类B为一个可服务化模块中的一个类,对可服务化模块进行Web服务化,同时生成类B的对象的客户端访问代理Be(classBe)和服务访问代理Bs(classBs)。其中客户端访问代理Be与类B的外部特征不同,但客户端访问代理Be的函数方法的名称要与类B的函数方法的名称相同;因此,客户端访问代理可以通过与类B的类名不同,函数方法名相同而函数方法体不同的类实现,客户端访问代理Bc的函数方法用于调用服务端访问代理Bs,且其以被调用对象的对象标识index为调用参数;其中将客户端访问代理Be的类名区别于类B,可以避免类B存在于客户端时和客户端访问代理Be发生矛盾,这点和类级别访问代理不同。而服务端访问代理Bs布置于服务端(如下程序代码中虚线右侧),与客户端访问代理Bc相应,也可以通过具体的类来实现。服务端访问代理的标识与类B的类名不同,但是函数方法名相同,且与客户端访问代理Bc的标识相对应,即知道该客户端访问代理Bc是否与其对应于同一个对象,用于实现对Web服务中相应的类的对象的调用。具体调用过程为类A的方法a通过类B的客户端访问代理Bc,调用类B的方法b,其中类A的调用方式并不发生变化;客户端访问代理根据类A创建类B的对象时产生的对象标识index,通过Web服务调用服务端访问代理Bs,服务端访问代理Bs获取到对象标识index后,通过调用语句调用类B中与对象标识index相应的对象;而类C则继续在本地按照正常方式调用类B的本地对象,同时也无须为类C调用的类B的对象建立访问代理。对象级别的服务化封装过程的程序代码具体如下<formula>formulaseeoriginaldocumentpage11</formula>上述具体描述了如何实施本发明技术方案,通过采用本发明技术方案可以成功实现Java系统的Web服务化,克服了现有技术在实现系统Web服务过程中面临的多种缺陷。图4为本发明一实施例的Java系统的Web服务化装置的结构示意图,如图4所示,本实施例的装置包括分析获取模块21、划分模块22和第一封装生成模块23。分析获取模块21用于对Java系统的字节码文件进行分析,获取Java系统中对象间的结构关系;划分模块22用于根据Java系统中对象间的结构关系,将Java系统划分为不同的可服务化模块,其中可服务化模块包括Java系统中的一个或多个类;第一封装生成模块23用于建立可服务化模块中每个被访问类的访问代理,并对可服务化模块进行Web服务化封装生成Web服务模块,以实现对Java系统的Web服务化,其中所述可服务化模块中的每个被访问类被映射封装为所述Web服务模块中的一个类;其中,访问代理用于使客户端以访问可服务化模块中类的方式访问Web服务模块中对应的类。进一步,本实施例的Java系统的Web服务化装置还包括第二封装生成模块24。在系统运行过程中,第二封装生成模块24为可服务化模块中类的对象建立客户端访问代理和服务端访问代理,并对可服务化模块进行Web服务化封装生成Web服务模块。具体的,对于类级别的访问代理,其标识与被调用类的名称相对应,即表示访问代理与被调用类之间的对应关系;对于类级别的访问代理也可以通过与被调用类的类名相同、函数名相同,但是函数方法的实现不同的类实现,可以通过字节码重写技术生成;而对于对象级别的访问代理具体包括客户端访问代理和服务端访问代理。其中客户端访问代理具体也可以由第二封装生成模块24创建具体的类来实现;且与类级别的访问代理不同,实现客户端访问代理的类的名称与被调用类的类名一定不同,函数名相同但函数方法不同,其方法用于调用服务端访问代理;对应的服务端访问代理也可以由第二封装生成模块24创建与客户端访问代理相应的类来实现,具体的该类的函数名要与被调用类的函数名相同,函数体用于实现对被调用类的对象的调用(形象的举例,可以参照上述实施例提供的对象级别程序代码中的客户端访问代理Be和服务端访问代理Bs)。本实施例提供的Java系统的Web服务化装置,通过字节码重写技术自动生成被调用类的对象的访问代理,保证客户端以原来的调用方式通过调用客户端访问代理实现对Web服务相应的被调用类的对象的调用,实现整个Java系统的Web服务化;同时,通过对Java系统进行模块划分,与现有技术相比,使Java系统的服务化范围得到扩展。具体的,分析获取模块21包括第一生成单元211、第一获取单元212、运行测试单元213、第二获取单元214和第二生成单元215。第一生成单元211用于对Java系统的字节码文件进行分析,生成描述Java系统的原始结构图;第一获取单元212与第一生成单元211连接,用于对原始结构图进行静态分析,获取Java系统中静态类之间的结构信息;运行测试单元213用于启动Java系统,以对Java系统进行测试,第二获取单元214与运行测试单元213连接,用于在Java系统运行期间获取Java系统中对象间的调用信息;第二生成单元215与第一获取单元212和第二获取单元214连接,用于根据第一获取单元212和第二获取单元214的获取结果,生成Java系统的对象关系图,并获取对象间的结构关系,以提供给划分模块对Java系统进行划分。划分模块包括合并生成单元221、第三获取单元222和划分单元223。合并生成单元221,与分析获取模块21中的第二生成单元215连接,用于根据对象间的结构关系的紧凑度,对对象关系图做进一步处理,合并无法分割的对象,并求取对象之间的最大强连通集,重新生成模块关系图;第三获取单元222与合并生成单元221连接,用于对模块关系图进行最大流最小割处理,获取模块关系图的切面,其中最大流最小割以模块度和性能为目标;划分单元223用于根据第三获取单元222获取的切面将Java系统划分为不同的可服务化模块,并将结果提供给第一封装生成模块23,以实现对可服务化模块的Web服务化。进一步,从类级别来看,第一封装生成模块23包括服务封装单元231,用于将可服务化模块封装为Web服务;代理封装单元232,用于建立访问Web服务模块中每一个被访问类的访问代理,具体该访问代理可以通过运行字节码重写技术生成;客户端通过代理封装单元生成的访问代理调用Web服务模块中的类。第二封装生成模块24包括对象标识单元,用于在客户端调用Web服务模块中的类的对象时,生成类的对象的对象标识以区别同一类的不同对象;同理,在服务端也存在对象标识单元,用于与客户端对象标识单元配合实现对Web服务模块中类的对象的调用;客户端代理单元,用于生成客户端访问代理,具体通过运行字节码重写技术实现;以及服务端代理单元,通过运行字节码重写技术生成服务端访问代理,其中客户端访问代理通过调用函数体调用服务端访问代理,并结合客户端和服务端的对象标识单元实现对Web服务模块中类的对象的调用。上述技术介绍了本实施例的Java系统的Web服务化装置中各个模块的具体实现,通过本实施例提供的技术方案,形成一个系统,可以自动实现Java系统的Web服务化,同时具有扩展Java系统可服务化范围和无须修改客户端的调用方式即可实现对Web服务的调用的效果,从而克服了现有技术中的种种缺陷。本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。权利要求一种Java系统的Web服务化方法,其特征在于,包括对Java系统的字节码文件进行分析,获取所述Java系统中对象间的结构关系;根据所述Java系统中对象间的结构关系,将所述Java系统划分为不同的可服务化模块,所述可服务化模块包括所述Java系统中的一个或多个类;建立所述可服务化模块中每个被访问类的访问代理,并对所述可服务化模块进行Web服务化封装生成Web服务模块,以实现对所述Java系统的Web服务化,其中所述可服务化模块中的每个被访问类被映射封装为所述Web服务模块中的一个类;所述访问代理用于使客户端以访问所述可服务化模块中类的方式访问所述Web服务模块中对应的类。2.根据权利要求1所述的Java系统的Web服务化方法,其特征在于,所述对Java系统的字节码文件进行分析,获取所述Java系统中对象间的结构关系,具体为对所述Java系统的字节码文件进行分析,生成描述所述Java系统的原始结构图;对所述原始结构图进行静态分析,获取所述Java系统中静态类之间的结构信息;运行所述Java系统,获取运行期中所述Java系统的对象调用信息;根据所述静态类之间的结构信息和所述对象调用信息生成对象关系图,以获取所述Java系统中对象间的结构关系。3.根据权利要求2所述的Java系统的Web服务化方法,其特征在于,根据所述Java系统中对象间的结构关系,将所述Java系统划分为不同的可服务化模块,具体为根据所述Java系统中对象间的结构关系的紧凑度,合并所述对象关系图中无法分割的对象,并将所述对象关系图划分为不同的强连通集,以生成模块关系图;对所述模块关系图进行最大流最小割处理,获取所述模块关系图的切面;根据所述切面将所述Java系统划分为不同的可服务化模块。4.根据权利要求l所述的Java系统的Web服务化方法,其特征在于,所述访问代理的标识与所述可服务化模块中对应类的名称相对应;所述访问代理的函数方法的名称与所述可服务化模块中对应类的函数方法的名称相同,所述访问代理的函数方法用于调用所述Web服务模块中对应的类。5.根据权利要求1所述的Java系统的Web服务化方法,其特征在于,还包括建立所述可服务化模块中类的对象的客户端访问代理和服务端访问代理,并对所述可服务化模块进行Web服务化封装生成所述Web服务模块;所述客户端访问代理用于使所述客户端以调用所述可服务化模块中类的对象的方式调用所述服务端访问代理,并通过所述服务端访问代理调用所述Web服务模块中对应的类的相应对象;所述客户端访问代理和所述服务端访问代理使用可唯一标记所述可服务化模块中类的对象和所述Web服务模块中对应类的相应对象的标识来维护所述可服务化模块中类的对象和所述Web服务模块中对应的类的相应对象的调用关系。6.根据权利要求5所述的Java系统的Web服务化方法,其特征在于,所述客户端访问代理的函数方法的名称和所述服务端访问代理的函数方法的名称与所述可服务化模块中对应类的函数方法的名称相同;所述客户端访问代理的标识和所述服务端访问代理的标识与所述可服务化模块中对应类的名称相对应。7.—种Java系统的Web服务化装置,其特征在于,包括分析获取模块,用于对Java系统的字节码文件进行分析,获取所述Java系统中对象间的结构关系;划分模块,用于根据所述Java系统中对象间的结构关系,将所述Java系统划分为不同的可服务化模块,所述可服务化模块包括所述Java系统中的一个或多个类;第一封装生成模块,用于建立所述可服务化模块中每个被访问类的访问代理,并对所述可服务化模块进行Web服务化封装生成Web服务模块,以实现对所述Java系统的Web服务化,其中所述可服务化模块中的每个被访问类被映射封装为所述Web服务模块中的一个类;所述访问代理用于使客户端以访问所述可服务化模块中类的方式访问所述Web服务模块中对应的类。8.根据权利要求7所述的Java系统的Web服务化装置,其特征在于,所述分析获取模块包括第一生成单元,用于对所述Java系统的字节码文件进行分析,生成描述所述Java系统的原始结构图;第一获取单元,用于对所述原始结构图进行静态分析,获取所述Java系统中静态类之间的结构信息;运行测试单元,用于启动所述Java系统,以对所述Java系统进行测试;第二获取单元,用于在所述运行测试单元启动所述Java系统期间,获取运行期中所述Java系统的对象调用信息;第二生成单元,用于根据所述静态类之间的结构信息和所述对象调用信息生成对象关系图,以获取所述Java系统中对象间的结构关系。9.根据权利要求8所述的Java系统的Web服务化装置,其特征在于,所述划分模块包括合并生成单元,用于根据所述Java系统中对象间的结构关系的紧凑度,合并所述对象关系图中无法分割的对象,并将所述对象关系图划分为不同的强连通集,以生成模块关系图;第三获取单元,用于对所述模块关系图进行最大流最小割处理,获取所述模块关系图的切面;划分单元,用于根据所述切面将所述Java系统划分为不同的可服务化模块。10.根据权利要求7所述的Java系统的Web服务化装置,其特征在于,还包括第二封装生成模块,用于建立所述可服务化模块中类的对象的客户端访问代理和服务端访问代理,并将所述可服务化模块进行Web服务化封装生成所述Web服务模块;所述客户端访问代理用于使所述客户端以调用所述可服务化模块中类的对象的方式调用所述服务端访问代理,并通过所述服务端访问代理调用所述Web服务模块中对应的类的相应对象;所述客户端访问代理和所述服务端访问代理使用唯一标识所述可服务化模块中类的对象和所述Web服务模块中对应的类的相应对象的标识来维护所述可服务化模块中类的对象和所述Web服务模块中对应的类的相应对象的调用关系。全文摘要本发明提供一种Java系统的Web服务化方法与装置,方法包括对Java系统的字节码文件进行分析,获取Java系统中对象间的结构关系;据此将Java系统划分为不同的可服务化模块,可服务化模块包括Java系统中的一个或多个类;建立可服务化模块中每个被访问类的访问代理,并对可服务化模块进行Web封装生成Web服务模块,以实现对Java系统的Web服务化;访问代理为客户端以访问可服务化模块中类的方式访问Web服务模块中对应的类。本发明提供的Java系统的Web服务化方法与装置,解决了现有技术无法将Java系统中调用关系Web服务化的缺陷,同时扩大了Web服务的可服务化范围。文档编号G06F9/44GK101719069SQ201010033669公开日2010年6月2日申请日期2010年1月4日优先权日2010年1月4日发明者孙海龙,李翔,杜宗霞,高鹏申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1