CN103455381A - 用于将源软件组件的源对象的表示解序列化为目标软件组件的方法和系统 - Google Patents
用于将源软件组件的源对象的表示解序列化为目标软件组件的方法和系统 Download PDFInfo
- Publication number
- CN103455381A CN103455381A CN201310202971XA CN201310202971A CN103455381A CN 103455381 A CN103455381 A CN 103455381A CN 201310202971X A CN201310202971X A CN 201310202971XA CN 201310202971 A CN201310202971 A CN 201310202971A CN 103455381 A CN103455381 A CN 103455381A
- Authority
- CN
- China
- Prior art keywords
- candidate type
- candidate
- source
- type
- language
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/48—Incremental compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/51—Source to source
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/4493—Object persistence
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明的实施方式提出了用于将源软件组件的源对象的表示解序列化为目标软件组件的方法和系统。具体地,提出了用于将以源语言编写的源软件组件的源对象的表示解序列化为以目标语言编写的目标软件组件的方案。相应的方法(400)包括步骤:接收(412)源对象的表示;在用于目标软件组件的目标语言中可用的多个可用类型之中确定(415-445)候选类型的集合,每个候选类型与源类型的表示兼容;计算(415-427,454-469)匹配度量的集合,每个匹配度量针对相应的候选类型,匹配度量指示候选类型与源对象的表示之间的信息内容的差别;根据匹配度量选择(433-436,448-451,472-481)候选类型中的一个候选类型;以及将源对象的表示映射(484)到所选择的候选类型的目标对象上。
Description
技术领域
根据本发明的一个或多个实施方式的方案涉及数据处理领域。更具体地,该方案涉及对象的解序列化(de-seralization)。
背景技术
在不同软件组件之间交换数据是现代数据处理系统中的常见行为。为此,可以使用序列化/解序列化技术(也称为紧缩(deflate)/膨胀(inflate)技术)。
特别地,通过将要从源软件组件向目标软件组件提供的源对象转换为可以向目标软件组件传送的表示而对其进行序列化。继而,通过在对其进行映射(即,在语义上等效于源对象)的目标软件组件中创建目标对象而解序列化源对象的表示。通常,源对象的表示是独立于源对象和目标对象的实际实现的形式;按照这种方式,有可能以可靠的方式在异构的(尤其是具有分布式架构的数据处理系统中的)软件组件之间交换数据。
然而,在该上下文中,当以不支持相同的对象类型(例如,在面向对象的编程语言中,具有不同类型的字段的类)的不同编程语言编写源软件组件和目标软件组件时出现了问题。实际上,在这种情况下,有可能没有目标软件的类型与源对象的表示完美地匹配。因此,(如果不是不可能的话)将源对象的表示自动地解序列化为相应的目标对象是非常困难的。
典型的示例是在以JavaScript语言编写的丰富互联网应用(RIA)与以Java语言编写的web服务之间交换对象,这些对象可以是以JavaScript对象表示法(JavaScript Object Notation,JSON)格式(商标);Java语言具有比JavaScript语言更丰富的类型集合,使得不可能将JavaScript对象的JSON表示解序列化为与其完美映射的Java对象。
为了解决这一问题,通常为目标软件组件添加定制转换器;该转换器包括特别编写的代码,用于处理将源对象的表示解序列化为相应的目标对象——例如,如US-A-2010/0083277(在此通过引用并入其全部公开内容)中所描述的用于将SOA框架中的传入请求消息解序列化为Java对象。
然而,这增加了目标软件组件的开发成本。另外,转换器的维持非常困难,因为其需要在两个层上运行以维持目标软件组件中的转换器与源软件组件同步。该过程消耗时间(从而还增加了目标软件组件的开发成本),并且易于出错(从而对目标软件组件的质量造成不利影响)。当源对象具有复杂的结构(例如,不同类型的项目的列表、嵌套列表的列表等)时,这个问题会特别严重。
备选地,US-A-2011/0321010(在此通过引用并入其全部公开内容)提到了使用新格式的可能性,其允许指定每个源对象的类型及其字段。然而,该格式的使用将需要所引用文献中没有描述的相应的解析器(并且该文献没有任何参考实现)。另外,在源对象(新格式)的定义和目标软件组件中都需要对每个源对象进行建模的元数据;这包括信息的复制,这对于其维护具有不利的影响。最后,所引用文献中提及的可能性将需要学习新语言(不同于当时公知的语言)。
发明内容
在一般方面,根据本发明的一个或多个实施方式的方案是基于将解序列化(至少部分)自动化的思想。
特别地,在独立权利要求中阐述了根据本发明的特定实施方式的方案的一个或多个方面,并且在从属权利要求中阐述了相同方案的有益特征,在此通过引用逐字并入所有权利要求的描述(参考向其每个其他方面应用“必要的变更”(mutatis mutandis)的本发明的实施方式的特定方面,而提供任何有益特征)。
更具体地,根据本发明的实施方式的方案的方面提供了一种用于将源软件组件的源对象的表示解序列化为目标软件组件的方法,其中,(在可用于目标软件组件的多个类型之中)选择与源类型的表示兼容的候选类型集合中的一个,用于在候选类型与源对象的表示之间根据信息内容的差别来映射源对象。
根据本发明的实施方式的方案的另一方面提供了一种用于执行该方法的计算机程序。
根据本发明的实施方式的方案的另一方面提供了一种相应的系统。
附图说明
参考以下详细描述将更好地理解根据本发明的一个或多个实施方式的方案以及其他特征及其优点,以下详细描述仅通过非限制性示例的方式,需要与附图结合阅读(其中,出于简化的目的,利用相同或者相似的参考标号来表示相应的元素,并且他们的解释是不重复的,并且每个实体的名称一般用于指示其类型和其属性二者——诸如,值、内容和表示)。特别地:
图1示出了可以应用根据本发明的实施方式的方案的系统的示意框图;
图2示出了根据本发明的实施方式的方案的应用的示例场景;
图3示出了可以用于实现根据本发明的实施方式的方案的主要软件模块;以及
图4A-图4B示出了描述涉及根据本发明的实施方式的方案的实现的活动流的活动图。
具体实施方式
具体参考图1,示出了可以应用根据本发明的实施方式的方案的系统100的示意框图。
系统100具有典型地基于互联网的分布式架构;互联网由成千上万的服务器计算机(或者简称服务器)105形成,服务器105之间通过全球通信网110连接;服务器105的子集(称为万维网或者简称为web)允许访问相应的web站点。
服务器105一般被分组为服务器群(server farm)。一般的服务器群115由若干数据处理单元形成数据处理单元包括相应的服务器105(例如,机架或者刀片类型)和存储盘120(例如,RAID类型);服务器群115还包括用于控制服务器105和盘120的控制台125(例如,个人计算机,还配备有用于读取DVD-ROM或者CD-ROM130的驱动器)。交换机/路由器系统135管理在服务器105、盘120和控制台125与网络110之间的通信;为此,服务器105、盘120和控制台125通过线缆系统140连接至交换机/路由器系统135。服务器群115还配备有冷却系统(附图中未示出),其用于将其温度维持在保证服务器105的正常操作的值。
一般的服务器105由并行连接至通信总线145的若干单元形成。具体而言,一组(一个或多个)微处理器(μP)150控制服务器105的操作;RAM155被微处理器150直接用作工作存储器,并且ROM160存储用于服务器105的启动程序的基本代码。另外,服务器105包括网络适配器165,其用于将服务器110连接至线缆系统140。
客户端计算机(或者简称客户端)的170用户(通过充当访问提供商的计算机,附图中未示出)访问互联网,以便开发由服务器105提供的服务,并且特别地通过web浏览器的方式访问其web站点。
例如,一般的客户端170可以运行RIA。RIA是在web浏览器的软件框架内运行的软件应用;RIA可以提供与标准桌面应用中的功能相似的功能,但是不需要在客户端170上安装。RIA例如通过使用AJAX技术来开发web服务(即,服务中的每一个具有在公开WSDL文档中正式描述的接口);web服务由服务器105例如在应用服务器内提供,诸如在IBM公司的WebSphere(商标)上运行的Tivoli Integrated Portal(TIP)。为此,RIA和web服务需要交换相应对象形式的数据。
RIA通常以JavaScript来编写;JavaScript是脚本语言,其由JavaScript引擎从源代码解译得到。然而,web服务通常以(纯)Java来编写;Java是高级语言,其从源代码被编译为(独立于平台的)字节代码,字节代码转而由Java虚拟机(JVM)执行。JavaScript和Java二者都是面向对象的编程语言,其包括实例化类的对象的操纵,每个类嵌入了(相应字段中)数据的定义和(可以应用于字段的方法中的)功能。另外JavaScript和Java二者都是类型语言(其中,每个字段与定义其可能值的类型以及可以在其上执行的操作相关联);然而,JavaScript的特征在于弱的或者松散的类型化(即,允许大量隐式或者显式类型的转换),而Java的特征在于强类型化(即,对类型转换施加严格的限制)。
要在RIA(即,JavaScript对象)与web服务(即,Java对象)之间交换的对象可以以JSON格式表示。JSON是文本类型的与语言无关的数据格式(其从JavaScript的子集导出)。JSON缺乏语义,任何数据元素(或者JSON元素)仅以名称/值对(使用冒号分隔)来表示;值可以是字符串、数字、布尔、空值、数组(即,值的有序序列,以逗号分隔,并且包括在方括号中)或者对象(即,数据元素的无序收集,以逗号分隔,并且以大括号封闭)。由于JavaScript是JSON的超集,并且其特征在于弱的类型化,所以任何JSON表示可以总是被映射到与其最佳匹配的JavaScript对象上(例如,通过调用eval()函数,即使出于安全的原因推荐使用JSON解析器);相反,由于Java定义了JSON不支持的若干数据类型,并且其特征在于强的类型化,所以其不可能总是将JSON对象映射到与其最佳匹配的Java对象上。
现在移至图2,示出了根据本发明的实施方式的方案的应用的示例场景。
一般的服务器(从一般的客户端)接收将要被映射到其web服务中的相应Java对象上的JavaScript对象的JSON表示205;服务器还访问可用于web服务(例如,在其加载时确定的)的Java类210的列表。服务器在可用Java类210之中选择候选Java类215的集合,所述候选Java类215与JSON表示205兼容(例如,利用正确的用于得到/设置它们的方法具有与JSON元素相对应的Java字段)。针对每个候选Java类215,服务器计算匹配度量,其指示候选Java类215与JSON表示205之间的信息内容的差别(例如,基于无法向候选Java类215指派的JSON表示的损耗JSON元素,并且基于无法由JSON表示205指派的候选Java类215的超量Java字段)。服务器在候选Java类215之中根据其匹配度量(即,提供信息内容最小差别的一个)来选择Java类225。服务器继而将JSON表示205映射到实例化所选择的Java类225的Java对象230上。
上述方案使得(JSON表示205到Java对象230的,或者更加通用的,源对象的任何表示到目标对象的)解序列化是基本上(至少一部分)是自动化的。实际上,在最实际的场景中,即使在目标对象与源对象的表示不能最佳地匹配时,也可以在没有任何手动干预的情况下创建目标对象(从而自动地处理与源对象的表示的任何差异和错位)。因此,有可能避免用于处理解序列化而特别编写的定制转换器的需要。这显著地减少了web服务(或者更通用的,任何目标软件组件)的开发成本,并且其简化了其维护;以上所有对目标软件组件的质量还具有有益效果(尤其在要被映射在其中的源对象具有复杂结构时)。
在图3中示出了可以用于实现根据本发明的实施方式的方案的主软件模块。利用参考标号300整体表示这些软件模块。信息(程序和数据)通常存储在相应服务器群的盘中,并且当程序运行时,与操作系统和其他应用程序(附图中未示出)一起(至少部分)加载到其一般服务器的工作存储器中。最初,程序例如从DVD通过相应控制台安装到盘上。
服务器包括JVM305,其上运行一般web服务310;特别地,JVM305的类加载器315负责控制web服务310所需的任何新类的定义(从存储器字节代码的相应类文件)的加载。类加载器315被定制以更新表320,该表320存储用于web服务310的可用Java类及其定义的列表(包括相应方法的说明)。
服务器还包括通用解序列化器325(也在JVM305之上运行);解序列化器320与web服务310对接,以解序列化从客户端(附图中未示出)接收的任何JavaScript对象的JSON表示。为此,解序列化器325向分类器(sorter)330传送JSON表示,分类器330还访问可用Java类的表320。分类器330确定(可用Java类中与JSON表示兼容的)候选Java类,并且将它们的名称存储在表335中。估计器340访问可用Java类的表320和候选类的表335二者(并且其还从分类器330接收JSON表示,出于简化的目的而在附图中未示出)。针对每个候选Java类,估计器340计算相应的匹配度量,并且将其存储在表345中;特别地,匹配度量包括:损耗指数,其测量无法向候选Java类的相应Java字段指派的(JSON表示的)损耗JSON元素;以及超量指数,其测量不可由相应的JSON元素指派的超量Java字段(候选Java类)。选择器350访问候选Java类的表335和匹配度量的表345二者;选择器350在候选Java类之中根据其匹配度量来选择Java类,并且将其名称返回至解序列化器325,解序列化器325转而将其传送至web服务310。
在图4A-图4B中示出了涉及根据本发明的实施方式的方案的实现的活动流的活动图。在这方面,图中的每个框可以表示模块、分段或者代码的部分,代码包括用于实现指定逻辑功能的一个或多个可执行指令。特别地,图表示可以在用于利用方法400将(从任何客户端接收的)JavaScript对象的JSON表示解序列化为相应的Java对象的示例过程。
只要类加载器接收到web服务的加载新类的请求,方法就从框403转到框406。作为响应,类加载器将新类的名称加载到web服务的可用Java类的列表中。继续到框409,照常地加载新类的定义(将其方法的定义添加到可用Java类的列表中)。活动流继而返回至403,等到来自web服务的下一请求。
以这种方式,在web服务运行时按照完全自动化的方式确定了可用Java类的列表,而不需要对其进行任何初始化。
在完全异步的方式中,只要web服务(例如,在由一般客户端提交的HTTP命令内)接收到JavaScript的JSON表示,方法就从框412转到框415。作为响应,针对每个可用Java类执行外层循环(从第一个开始);循环开始于获取当前可用Java类的方法的定义,并且将其损耗指数设置为0。该方法继而进入针对JSON表示的每个JSON元素的框418处的内层循环(从第一个开始)。继续到框420,扫描可用Java类的方法的定义,以便搜索分别用于获得和设置的获得器(getter)方法和设置器(setter)方法,与当前JSON元素具有相同名称的(可用Java类的)Java字段。例如,当可用Java类遵守JavaBeans的命名约定时,一般类型myType的一般Java字段myField的获得器方法具有以下签名:
public myType getMyField(),
这意味着该方法是公共的,返回myType类型的结果,利用关键词get之后跟随Java字段myField的名称来调用,并且不需要任何参数;备选地,如果类型myType是布尔类型,则获得器方法还可以具有以下备选签名:
public boolean isMyField().
同样地,相同Java字段的设置器方法具有以下签名:
public void setMyField(myType),
这意味着该方法是公共的,不返回任何结果,利用关键词set之后跟随Java字段myField的名称来调用,并且需要类型myType的参数。
根据上述搜索的结果,方法在框421处出现分支。如果没有找到针对JSON元素的获得器方法和/或设置器方法,则在框424处,可用Java类的损耗指数加1,以指示无法向可用Java类的任何Java字段指派JSON元素。相反,如果已经找到针对JSON元素的获得器方法和设置器方法二者,则在框427处,将其签名与JSON元素的值进行比较。如果获得器方法的签名和/或设置器方法的签名与JSON元素的值不兼容(即,获得器方法的结果无法采用该值,并且无法向设置器方法传送相同值作为参数),该方法再次通过框424(以便增加可用Java类的损耗指数)。当获得器方法的签名和设置器方法的签名二者都与JSON元素的值兼容时,活动流继而在框430处从框424或者直接从框427合并。
在任何情况下,现在会进行测试以确定是否已经处理最后一个JSON元素。如果没有,则该方法返回至框418,以对下一JSON元素重复相同的操作。相反地(一旦已经处理了JSON表示的所有JSON元素),则通过下降到框433而退出内层循环。在该阶段,验证了可用Java类与JSON表示是否完美地匹配;当可以向Java字段指派所有的JSON元素(即,损耗指数是0)时,这一条件得到满足,并且反之亦然(即,可用Java类不具有由响应设置器方法和获得器方法标识的任何其他Java字段)。如果如此,在框436处,直接选择可用Java类来映射JSON表示。
相反地,方法转到框439,其中,将可用Java类的损耗指数与阈值(例如,等于JSON元素的总数的0-30%)进行比较。如果损耗指数没有达到该阈值(意味着,JSON表示由于其JSON元素无法向相应的Java字段指派而损耗的信息的量是可接受的),在框442处,将可用Java类的名称添加到候选Java类的列表中。该方法继而下降到框445;当损耗指数达到阈值(即,等于或者大于阈值)时,也直接从框439达到相同的点。
在任何情况下,现在会进行测试以确定是否已经处理最后一个可用Java类。如果没有,则该方法返回至框415以对下一可用Java类重复相同的操作。相反地(一旦已经处理了所有的可用Java类),则通过下降到框448而退出外层循环。
在该阶段,验证了候选Java类的数目。如果仅找到一个候选Java类,则在框451处,直接选择该候选Java类用于映射JSON表示。
相反地,该方法转到框454,其中,针对每个候选Java类(从第一个开始)执行外层循环;循环开始于确定当前候选Java类的超量Java字段(即,还没有与在前的相应JSON元素相关联的Java字段,每个由相应的设置器方法和获得器方法标识),并且将其超量指数设置为0。该方法继而针对每个超量Java字段(从第一个开始)在框457处进入内层循环;在该阶段,确定超量Java字段的类型(在其设置器/获得器方法的签名中指示的)。继续到框460,确定表示超量Java字段的类型所需要的(最大)比特数目(例如,1比特用于布尔,64比特用于双精度整数等)。该方法继而转到框463,其中,将候选Java类的超量指数增加超量Java字段的比特数目,以指示该信息量无法由JSON表示在候选Java类中指派。
在框466处进行测试,以确定是否已经处理了最后一个超量Java字段。如果没有,则该方法返回至框457,以对下一个超量Java字段重复相同的操作。相反地(一旦已经处理了所有的超量Java字段),则通过下降到框469退出内层循环。现在进行另一测试以确定是否已经处理最后一个候选Java类。如果没有,则该方法返回至框454,以对下一候选Java类重复相同的操作。相反地(一旦已经处理了所有的候选Java类),通过下降到框472而退出外层循环。
在该阶段,确定具有最低损耗指数的Java类。在框475处验证如此确定的候选Java类的数目。如果仅找到一个候选Java类,则在框478处,选择该候选Java类用于映射JSON表示。相反地,该方法转至框481,其中,在候选Java类之中选择具有最低超量指数的候选Java类用于映射JSON表示(如果不止一个则选取其中的任一个)。
活动流继而在框484处从框436、框451、框478或者框481合并。在任何情况下,通过实例化所选择的Java类来创建Java对象;继而通过将与JSON元素相关联的Java字段初始化为其值,而将JSON表示映射到该Java对象。该方法继而返回至框412,等待下一JSON表示。
上述算法利用启发式求解来选择要用于映射JSON表示的Java类;其自动地确定应当最佳匹配JSON表示的Java类,以便增加能够根据Java对象的实例来构造有效、起作用的Java对象的可能性。特别地,上述两个阶段的过程首先减少了Java对象中损耗的JSON表示的信息量;针对相同条件,该过程继而减少了Java对象中超量的信息量。
例如,考虑以下JSON表示:
其包括3个JSON元素,名称为name1,namet2和name3,并且分别具有整数、布尔和字符串值。
可用于映射JSON表示的Java类(class1、class2和class3)公开了以下方法:
在这种情况下,假设损耗指数的阈值是0(意味着必须向相应的Java字段指派所有的JSON元素),则仅可用Java类class1和class2候选用于映射JSON表示;相反地,因为无法向其任何Java字段指派JSON元素name1(其值123与针对其名称的设置器/获得器方法的布尔类型不兼容),抛弃了可用Java类class3。Java类class1的超量指数是64比特(针对双精度整数类型的字段name4),而Java类class2的超量指数是1比特(针对布尔类型的字段name4)。因此,选择Java类class2用于映射JSON对象。
自然地,为了满足本地和特定要求,本领域技术人员可以针对上述方案执行多种逻辑和/或物理修改和变化。更具体地,虽然已经参考一个或多个实施方式以一定程度的特性行描述了本方案,但是应当理解,在形式和细节上的替换和改变以及其他实施方式都是可能的。特别地,甚至可以在没有上文描述中阐述的特定细节(诸如数值)的情况下实现本发明的不同实施方式,以提供对本发明的透彻理解;相反地,已经忽略或者简化了公知的特征,以避免由不必要的详细说明而混淆了描述。另外,明确指出的是,,作为一种通用的设计选择结合所公开的方案的任何实施方式描述的特定元素和/或方法步骤可以并入任何其他实施方式中。在任何情况下,序数和限定语仅用作区分具有相同名称的元素的符号,而其本身不指示任何优先权、优先级或者顺序。另外,术语包括、包含、具有、含有和涉及(及其任何形式)旨在具有开放、非穷举性的意义(即,不限于所列出的项目),术语基于、取决于、根据、用于(及其任何形式)旨在作为非穷举性的关系(即,具有包括其他变量的可能性),并且术语一/一个旨在作为一个或多个项目(除非另外明确指出)。
例如,本发明的实施方式提供了一种用于将以源语言编写的源软件组件的源对象的表示解序列化为以目标语言编写的目标软件组件的方法。该方法包括以下步骤。接收源对象的表示。在多个可用类型之中确定(一个或多个)候选类型的集合,所述多个可用类型在用于目标软件组件的目标语言中可用;每个候选类型与源类型的表示兼容。计算匹配度量的集合,每个匹配度量针对相应的候选类型;匹配度量指示候选类型与源对象的表示之间的信息内容的差别。根据匹配度量选择候选类型中的一个候选类型。将源对象的表示映射到所选择的候选类型的目标对象上。
然而,源语言、目标语言和源对象的表示可以是任何类型的,可以按照任何方式在可用类型之中确定候选类型,可以按照任何方式计算匹配度量,并且可以按照任何方式选择要用于映射源对象的表示的候选类型(参见下文)。另外,相同的方法可以应用于任何源和目标软件组件,即使在web领域之外(例如,分别是桌面应用和远程传统应用)。
在本发明的实施方式中,源语言是特征为弱类型化的语言,目标语言是特征为强类型化的语言,并且源对象的表示是以缺乏语义的语言独立的格式编写的。
然而,源语言、目标语言和源对象的表示可以是任何类型的(例如,特征为强类型化的语言,取决于这些语言之一的格式等)。
在本发明的实施方式中,源语言是JavaScript,目标语言是Java,并且格式是JSON。
然而,上述示例仅是指示性的而不是限制性的。更一般地,相同的方法还可以应用于任何其他语言(即使是传统语言,其中类型仅涉及其变量)——例如,C、C++、PHP、Python.Perl、SQL、Ruby、VisualBasic等(商标);同样地,源对象的表示可以按照任何其他格式(例如,XML、OGDL、YAML、CSV等)。
在本发明的实施方式中,该方法还包括步骤:监测来自目标软件组件的加载新类型的定义的每个请求,并且根据每个监测到的请求来更新可用类型。
然而,可用类型可以按照任何其他方式来提供,即使不是自动化的(例如,通过适当地初始化目标软件组件)。
在本发明的实施方式中,类型是类,并且目标对象是所选择的候选类的实例。监测的步骤包括:由类加载器从目标软件组件接收加载新类的定义的每个请求;类加载器根据每个监测到的请求来控制更新可用类的步骤的执行。
然而,可以按照任何其他方式来监测加载请求(例如,通过用于标准类加载器的封装器的方式,或者通过挂钩技术的方式)。
在本发明的实施方式中,源类型的表示包括(一个或多个)元素的集合,并且每个类型包括(一个或多个)字段的集合。确定候选类型的集合的步骤包括以下步骤。计算损耗指数的集合,每个损耗指数针对相应的可用类型;损耗指数测量元素中不可向可用类型的字段指派的损耗的元素。当相应的损耗指数没有达到阈值时,将每个可用类型设置为候选类型。
然而,阈值可以可配置为任何值(甚至是动态的);另外,可以按照任何方式确定候选类型,甚至不计算任何损耗指数(例如,仅考虑可以向其字段指派源对象的表示的所有元素的可用类型)。
在本发明的实施方式中,每个损耗指数包括损耗元素的数据。
然而,可以按照任何其他方式来定义损耗指数(例如,在考虑其数目之外,还可以附加地或者备选地考虑损耗元素的比特数目)。
在本发明的实施方式中,每个元素包括名称和值。计算损耗指数的集合的步骤包括针对每个可用类型的以下步骤。当可用类型缺少分别用于获得和设置的获得器方法和设置器方法时,将每个元素设置为损耗元素,字段具有元素的名称;获得器方法和设置器方法具有与元素的值兼容的签名。
然而,可以按照任何其他方式来确定损耗元素(例如,通过直接检查可用类型的字段)。
在本发明的实施方式中,将每个元素设置为损耗元素的步骤包括:搜索符合命名约定的可用类型的方法对,命名约定分别包括元素的名称以及获得器关键词和设置器关键词。
然而,获得器/设置器方法可以基于不同的命名约定,或者其可以按照任何其他方式来确定(例如,通过反省(introspection)技术)。
在本发明的实施方式中,匹配度量包括相应的损耗指数。计算匹配度量的集合的步骤还包括以下步骤。计算超量指数的集合,每个超量指数针对相应的可用类型;超量指数测量可用类型的字段中不可由元素指派的超量的那些。
然而,匹配度量可以按照任何其他方式来定义(例如,仅根据超量指数,或者更一般地通过指示候选类型与源对象的表示之间的信息内容的差别的一个或多个值的任何度量)。
在本发明的实施方式中,每个超量指数包括超量字段的比特的数目。
然而,超量指数可以按照任何其他方式来定义(例如,在其比特的数目之外,附加地或者备选地考虑超量字段的数目)。
在本发明的实施方式中,根据匹配度量选择候选类型中的一个候选类型的步骤包括:首先选择具有最低损耗指数的候选类型,其次选择具有最低超量指数的候选类型。
然而,可以根据任何其他标准来选择要用于映射源对象的表示的候选类型(例如,对损耗指数和超量指数进行加权,首先考虑超量字段的数目,其次考虑其比特数目等)。
在本发明的实施方式中,根据匹配度量来选择候选类型中的一个候选类型的步骤包括:选择候选类型中与在确定候选类型的集合的步骤期间没有损耗元素、并且没有超量字段的源对象的表示匹配的一个候选类型;匹配候选类型的选择使得跳过了计算匹配度量的集合的步骤。
然而,在简化的实现中,可以省略这一优化。
通常,如果利用等效的方法(通过使用具有更多步骤或者部分的相同功能的相似的步骤,去除某些非关键的步骤,或者添加其他可选步骤)实现相同的方案,则应用类似的考虑;另外,可以按照不同的顺序、同时或者以交错的方式执行步骤。
本发明的另一实施方式提供了一种计算机程序,其包括用于当在数据处理系统上执行计算机程序时,使得数据处理系统执行上述方法的步骤的代码装置。
所属技术领域的技术人员知道,本发明的各个方面可以实现为系统、方法或计算机程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明的各个方面还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件的上下文中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言-诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言-诸如“C”语言或类似的程序设计语言。程序代码可以作为一个独立的软件包,完全地在相关的计算机上执行、部分在这个计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在后一情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)-连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
已经参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,从而生产出一种机器,使得这些计算机程序指令在通过计算机或其他可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其他可编程数据处理装置、或其他设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article of manufacture)。也可以把计算机程序指令加载到计算机、其他可编程数据处理装置、或其他设备上,使得在计算机、其他可编程数据处理装置或其他设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其他可编程装置上执行的指令提供实现流程图和/或框图中的一个或多个方框中规定的功能/动作的过程。
本发明的另一实施方式提供了一种系统,该系统包括用于执行相同方法的步骤的装置。
然而,如果系统具有不同的结构或者包括等效的组件,或者其具有其他操作特性,可以应用相似的考虑。在任何情况下,系统的每个组件可以分离为多个元件,或者两个或者更多个组件可以一起组合为单个元件;另外,每个组件可以被复制以支持相应操作的并行执行。还需要指出的是(除非另外指出),不同组件之间的交互通常不需要是连续的,并且其可以是直接的或者间接的(通过一个或多个中间介质)。另外,所提出的方法还可以在基于不同架构(例如,局域网、广域网、蜂窝或者卫星网)的系统上实现,并且采用任何类型(有线和/或无线)的连接。然而,不排除在独立计算机上的实现。在任何情况下,计算机可以具有另一结构,或者可以包括类似的元件(诸如临时存储程序或者其一部分的高速缓存存储器);另外,可以利用基于物理机器或者虚拟机的任何代码执行实体(诸如,PDA、移动电话等)或者利用多个实体的组合(诸如,多层架构、网格计算基础架构等)来代替计算机。
Claims (14)
1.一种用于将以源语言编写的源软件组件的源对象的表示解序列化为以目标语言编写的目标软件组件的方法(400),该方法包括步骤:
接收(412)所述源对象的所述表示;
在用于所述目标软件组件的所述目标语言中可用的多个可用类型之中确定(415-445)候选类型的集合,每个候选类型与源类型的所述表示兼容;
计算(415-427,454-469)匹配度量的集合,每一个匹配度量针对相应的候选类型,所述匹配度量指示所述候选类型与所述源对象的所述表示之间的信息内容的差别;
根据所述匹配度量选择(433-436,448-451,472-481)所述候选类型中的一个候选类型;以及
将所述源对象的所述表示映射(484)到所选择的候选类型的目标对象上。
2.根据权利要求1所述的方法(400),其中,所述源语言是特征为弱类型化的编程语言,所述目标语言是特征为强类型化的编程语言,并且所述源对象的表示以缺少语法的语言独立的格式编写。
3.根据权利要求1或者2所述的方法(400),其中,所述源语言是JavaScript,所述目标语言是Java,并且所述格式是JSON。
4.根据权利要求1至3中任一项所述的方法(400),还包括步骤:
监测(403)来自所述目标软件组件的加载新类型的定义的每个请求;以及
根据每个监测到的请求来更新(406)所述可用类型。
5.根据权利要求4所述的方法(400),其中,所述类型是类,并且所述目标对象是所选择的候选类的实例,所述监测(403)的步骤包括:
由类加载器从所述目标软件组件接收(403)加载新类的定义的每个请求,所述类加载器根据每个监测到的请求来控制所述更新(406)可用类的步骤的执行。
6.根据权利要求1至5中任一项所述的方法(400),其中,所述源类型的表示包括元素的集合,并且每个可用类型包括字段的集合,确定(415-445)候选类型的集合的步骤包括:
计算(415-430)损耗指数的集合,每个损耗指数针对相应的可用类型,所述损耗指数测量所述元素中不可向所述可用类型的字段指派的损耗的那些元素;以及
当相应的损耗指数没有达到阈值时,将每个可用类型设置(439-442)为候选类型。
7.根据权利要求6所述的方法(400),其中,每个损耗指数包括损耗元素的数目。
8.根据权利要求6或者7所述的方法(400),其中,每个元素包括名称和值,计算(415-430)损耗指数的集合的步骤包括针对每个可用类型:
当所述可用类型缺乏分别用于获得和设置的获得器方法和设置器方法时,将每个元素设置(420-427)为损耗元素,字段具有所述元素的名称,所述获得器方法和所述设置器方法具有与所述元素的值兼容的签名。
9.根据权利要求8所述的方法(400),其中,将每个元素设置(420-427)为损耗元素的步骤包括:
搜索(420)符合命名约定的可用类型的方法对,所述命名约定分别包括所述元素的名称以及获得器关键词和设置器关键词。
10.根据权利要求6至9中任一项所述的方法(400),其中,所述匹配度量包括相应的损耗指数,计算(415-427,454-469)匹配度量的集合的步骤还包括:
计算(454-469)超量指数的集合,每个所述超量指数针对相应的可用类型,所述超量指数测量不可由所述元素指派的超量的所述可用类型的字段中的多个。
11.根据权利要求10所述的方法(400),其中,每个超量指数包括超量字段的比特的数目。
12.根据权利要求6至11中任一项所述的方法(400),其中,根据所述匹配度量来选择(433-436,448-451,472-481)所述候选类型中的一个候选类型的步骤包括:
首先选择(472-481)具有最低损耗指数的所述候选类型,并且其次选择具有最低超量指数的所述候选类型。
13.根据权利要求10至12中任一项所述的方法(400),其中,根据所述匹配度量来选择(433-436,448-451,472-481)所述候选类型中的一个候选类型的步骤包括:
在候选类型中选择(433-436)与在确定(415-445)候选类型的集合的所述步骤期间没有损耗元素并且没有超量字段的源对象的表示相匹配的匹配候选类型,选择所述匹配候选类型使得跳过计算(415-427,454-469)匹配度量的集合的所述步骤。
14.一种系统(105),包括用于执行根据权利要求1至13中任一项所述的方法(400)的步骤的装置(300)。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1209449.6A GB2502531A (en) | 2012-05-29 | 2012-05-29 | De-serializing a source object to a target object |
GB1209449.6 | 2012-05-29 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103455381A true CN103455381A (zh) | 2013-12-18 |
CN103455381B CN103455381B (zh) | 2016-09-07 |
Family
ID=46546068
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310202971.XA Expired - Fee Related CN103455381B (zh) | 2012-05-29 | 2013-05-28 | 用于将源软件组件的源对象的表示解序列化为目标软件组件的方法和系统 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9009687B2 (zh) |
CN (1) | CN103455381B (zh) |
GB (1) | GB2502531A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109684607A (zh) * | 2017-10-19 | 2019-04-26 | 腾讯科技(深圳)有限公司 | Json数据解析方法、装置、计算机设备和存储介质 |
CN109804363A (zh) * | 2016-10-20 | 2019-05-24 | 微软技术许可有限责任公司 | 使用通过示例的格式修改的连接 |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9038032B2 (en) * | 2012-05-25 | 2015-05-19 | Fujitsu Limited | Symbolic execution and automatic test case generation for JavaScript programs |
US9152388B2 (en) * | 2013-03-15 | 2015-10-06 | Sap Se | Tailored language sets for business level scripting |
US9921945B2 (en) | 2015-04-06 | 2018-03-20 | Adp, Llc | Automatic verification of JSON data |
US10073723B2 (en) * | 2016-06-08 | 2018-09-11 | Oracle International Corporation | Dynamic range-based messaging |
US11176487B2 (en) | 2017-09-28 | 2021-11-16 | Oracle International Corporation | Gradient-based auto-tuning for machine learning and deep learning models |
US11544494B2 (en) | 2017-09-28 | 2023-01-03 | Oracle International Corporation | Algorithm-specific neural network architectures for automatic machine learning model selection |
US11451565B2 (en) | 2018-09-05 | 2022-09-20 | Oracle International Corporation | Malicious activity detection by cross-trace analysis and deep learning |
US11082438B2 (en) * | 2018-09-05 | 2021-08-03 | Oracle International Corporation | Malicious activity detection by cross-trace analysis and deep learning |
US11218498B2 (en) | 2018-09-05 | 2022-01-04 | Oracle International Corporation | Context-aware feature embedding and anomaly detection of sequential log data using deep recurrent neural networks |
US11579951B2 (en) | 2018-09-27 | 2023-02-14 | Oracle International Corporation | Disk drive failure prediction with neural networks |
US11423327B2 (en) | 2018-10-10 | 2022-08-23 | Oracle International Corporation | Out of band server utilization estimation and server workload characterization for datacenter resource optimization and forecasting |
US11645472B2 (en) | 2020-08-28 | 2023-05-09 | International Business Machines Corporation | Conversion of result processing to annotated text for non-rich text exchange |
CN112131291B (zh) * | 2020-09-11 | 2023-12-15 | 重庆誉存大数据科技有限公司 | 基于json数据的结构化解析方法、装置、设备及存储介质 |
US11620118B2 (en) | 2021-02-12 | 2023-04-04 | Oracle International Corporation | Extraction from trees at scale |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050188356A1 (en) * | 2004-02-20 | 2005-08-25 | Fuhwei Lwo | Computer-implemented method, system and program product for comparing application program interfaces (APIs) between Java byte code releases |
CN102004744A (zh) * | 2009-09-02 | 2011-04-06 | 中国银联股份有限公司 | 从一个源表到至少一个目标库的表的数据抽取系统及方法 |
CN102081661A (zh) * | 2011-01-19 | 2011-06-01 | 吉林大学 | 基于xml的异构关系型数据库的数据集成方法和系统 |
WO2011151111A1 (en) * | 2010-06-03 | 2011-12-08 | International Business Machines Corporation | Method and system of adapting a data model to a user interface component |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6826568B2 (en) * | 2001-12-20 | 2004-11-30 | Microsoft Corporation | Methods and system for model matching |
US7500223B2 (en) | 2004-01-02 | 2009-03-03 | International Business Machines Corporation | Automatically creating JavaScript objects to invoke methods on server-side Java beans |
US20090024986A1 (en) | 2007-07-19 | 2009-01-22 | Microsoft Corporation | Runtime code modification |
US8763008B2 (en) | 2008-09-30 | 2014-06-24 | Ebay Inc. | System and method for processing messages using native data serialization/deserialization in a service-oriented pipeline architecture |
US8533665B2 (en) | 2009-11-16 | 2013-09-10 | Cisco Technology, Inc. | Generating object annotations |
US20110321010A1 (en) | 2010-06-24 | 2011-12-29 | Yifei Wang | Web application framework based on object oriented class mapping |
US8713541B2 (en) * | 2011-12-29 | 2014-04-29 | Sap Ag | Model matching for trace link generation |
-
2012
- 2012-05-29 GB GB1209449.6A patent/GB2502531A/en not_active Withdrawn
-
2013
- 2013-04-10 US US13/859,884 patent/US9009687B2/en not_active Expired - Fee Related
- 2013-05-28 CN CN201310202971.XA patent/CN103455381B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050188356A1 (en) * | 2004-02-20 | 2005-08-25 | Fuhwei Lwo | Computer-implemented method, system and program product for comparing application program interfaces (APIs) between Java byte code releases |
CN102004744A (zh) * | 2009-09-02 | 2011-04-06 | 中国银联股份有限公司 | 从一个源表到至少一个目标库的表的数据抽取系统及方法 |
WO2011151111A1 (en) * | 2010-06-03 | 2011-12-08 | International Business Machines Corporation | Method and system of adapting a data model to a user interface component |
CN102081661A (zh) * | 2011-01-19 | 2011-06-01 | 吉林大学 | 基于xml的异构关系型数据库的数据集成方法和系统 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109804363A (zh) * | 2016-10-20 | 2019-05-24 | 微软技术许可有限责任公司 | 使用通过示例的格式修改的连接 |
CN109804363B (zh) * | 2016-10-20 | 2023-05-30 | 微软技术许可有限责任公司 | 使用通过示例的格式修改的连接 |
CN109684607A (zh) * | 2017-10-19 | 2019-04-26 | 腾讯科技(深圳)有限公司 | Json数据解析方法、装置、计算机设备和存储介质 |
CN109684607B (zh) * | 2017-10-19 | 2022-04-08 | 腾讯科技(深圳)有限公司 | Json数据解析方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
GB201209449D0 (en) | 2012-07-11 |
GB2502531A (en) | 2013-12-04 |
US9009687B2 (en) | 2015-04-14 |
US20130326491A1 (en) | 2013-12-05 |
CN103455381B (zh) | 2016-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103455381A (zh) | 用于将源软件组件的源对象的表示解序列化为目标软件组件的方法和系统 | |
CN102222012B (zh) | 针对外部数据源的静态类型检查 | |
CN108255993A (zh) | 提取业务字段的方法、装置、电子设备及存储介质 | |
CN109062563B (zh) | 用于生成页面的方法和装置 | |
CN107967316A (zh) | 一种数据同步方法、设备及计算机可读存储介质 | |
CN104067276B (zh) | 客户机侧最小下载和模拟的页面导航特征 | |
CN106796522A (zh) | 用于更新源代码文件的系统和方法 | |
CN111666096B (zh) | 目标应用的热更新方法和装置、存储介质和电子设备 | |
US11095648B2 (en) | Dashboard as remote computing services | |
US20120110566A1 (en) | Apparatus and method for setting up multi-tenant saas applications | |
CN106170764A (zh) | 用于自动设备程序生成的方法和装置 | |
US20120204160A1 (en) | Managing Non-Common Features for Program Code Translation | |
CN102567485B (zh) | 用于内容检索的提供商专用解析 | |
EP2767905A1 (en) | Terminal apparatus, server, browser of terminal apparatus operating system and method of operating browser | |
US9575979B1 (en) | Determining application composition and ownership | |
CN101930400A (zh) | Sdk自动化测试系统及方法 | |
CN102880546A (zh) | 一种基于xml数据库的软件集成测试方法及系统 | |
CN103809996A (zh) | 对移动计算设备传播经更新驱动程序的方法和其传播系统 | |
CN104246695A (zh) | 嵌套仿真和动态链接环境 | |
CN112766646B (zh) | 任务流程的生成、处理方法、装置、设备和存储介质 | |
CN102742303A (zh) | 具有本地pim集成的基于消息的移动对象 | |
CN101951529A (zh) | 一种机顶盒功能测试方法及系统 | |
CN101662463A (zh) | 为用户定制服务流程的装置和方法 | |
WO2014046694A1 (en) | Decentralized cloud workflows | |
US10019345B2 (en) | Executing multi-version tests against a multi-version application |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160907 Termination date: 20200528 |