专利名称:一种基于Java的异常处理方法和异常处理机制的制作方法
技术领域:
本发明涉及一种Java智能卡的数据处理技术,特别涉及一种基于Java的异常处 理方法及异常处理机制。
背景技术:
Java语言作为一种较为成熟的编程语言,被广泛应用到各种程序的编程中。例如, 现有的电信智能卡大多使用Java语言编写应用程序,并将应用程序储存在智能卡中。随着 计算机的日益普及和快速发展,人们对应用程序的功能提出越来越高的要求。伴随着功能 的提高与加强,程序的复杂度也随之增加,由此导致程序的稳定性和可靠性下降,使程序在 运行过程中会出现各种异常状况。为了跟踪、查找程序发生异常的确切位置,人们开发了多 种捕获程序异常的方法。一般来说Java智能卡的应用程序通过调用API (Application Programming Interface,应用程序编程接口 )类数据包实现相应的功能。API类数据包(如Java, io, Java. Iang等数据包)主要以CAP (Converted Applet Package,程序转换包)文件的格式 下载到Java智能卡中。每个CAP包都有自己的异常处理信息组,通常会通过遍历CAP包的异常处理信息 组来对Java智能卡进行异常捕获。Java智能卡虚拟机规范中限定抛出异常时的字节码地 址只可能在该字节码所属CAP包中的异常处理信息组中被捕获。因此除抛出异常时的字节 码所属CAP包外,其他CAP包的异常处理信息组中是不可能捕获该异常的。当Java代码 抛出异常时,传统的做法是根据各个CAP包在Java卡运行环境(JCRE,java card runtime environment)中的注册先后顺序依次分别遍历所有CAP包的异常处理信息组,直到异常被 捕获。很明显,对其他CAP包的异常处理信息组的遍历操作会延迟异常捕获的时间,并 且当Java智能卡装载的CAP包越多,延迟时间也会越长,直接影响到Java虚拟机的执行性 能。
发明内容
本发明所要解决的技术问题是提供一种基于Java的异常处理方法及异常处理机 制,能够快速的查找到对应的CAP文件,避免了对Java智能卡上其他CAP文件异常处理信 息组的遍历,降低了智能卡异常捕获处理的时延、提高了运行效率。为了解决上述问题,本发明公开了一种基于Java的异常处理方法,包括以下步 骤建立CAP文件索引记录模块,用于记录CAP文件的索引信息;根据CAP文件索引记录模块中记录的索引信息来找到对应的CAP文件,遍历所述 CAP文件的异常信息处理组并捕获异常。进一步地,所述CAP文件索引记录模块记录的索引信息为CAP文件的句柄。
进一步地,所述建立CAP文件索引记录模块包括建立与Java方法栈对应的CAP文件句柄栈,所述CAP文件句柄栈中的栈顶元素为 正在执行的Java方法所属的CAP文件的句柄。进一步地,所述建立与Java方法栈对应的CAP文件句柄栈的方法包括系统调用CAP文件的Java方法并建立一个堆栈帧作为Java方法栈的栈内元素压 入到Java方法栈中时,系统将与该方法对应的CAP文件的句柄作为CAP文件句柄栈的栈内 元素压入到CAP文件句柄栈中。进一步地,所述方法还包括在执行完CAP文件的Java方法后,CAP文件句柄栈弹 出其中与该Java方法对应的栈顶元素。进一步地,所述建立CAP文件索引记录模块包括建立全局注册表,加载CAP文件的 同时在全局注册表中增加CAP文件的索引信息。进一步地,所述索引信息包括CAP文件的句柄及该CAP文件的方法组件存储空间 的地址范围。进一步地,所述方法还包括通过程序计数器记录的字节码地址来匹配全局注册表 中记录的方法组件存储空间的地址范围,获取对应的CAP文件句柄。为了解决上述问题,本发明还公开了一种基于Java的异常处理机制,包括CAP文 件索引记录模块,用于记录CAP文件的索引信息;异常处理接口,用于输出所述CAP文件索 引记录模块所记录的索引信息;异常捕获模块,根据所述异常处理接口提供的CAP文件的 索引信息找到对应的CAP文件,遍历所述CAP文件的异常信息处理组并进行异常捕获。进一步地,所述CAP文件索引记录模块为与Java方法栈对应的CAP文件句柄栈, 所述CAP文件句柄栈中的栈顶元素为正在执行的Java方法所属的CAP文件的句柄。进一步地,所述CAP文件索引记录模块为全局注册表,所述全局注册表记载CAP文 件的句柄及该CAP文件的方法组件存储空间地址范围。进一步地,所述CAP文件句柄是指针。与现有技术相比,本发明具有以下优点本发明的基于Java的异常处理方法及异常处理机制,通过建立CAP文件索引记录 模块来记录CAP文件的索引信息,当产生异常时,通过该索引信息来查找对应的CAP文件, 通过遍历该CAP文件的异常处理信息组,便可以捕获异常。在具体实现上,通过建立于Java方法栈对应的CAP文件句柄栈或者全局注册表的 方式,可以根据Java方法栈中的方法与CAP文件句柄栈中的句柄一一对应的关系或全局注 册表中记载的method component (方法组件)存储空间的地址范围来获取CAP文件的句柄, 从而可以快速的查找到对应的CAP文件。避免了对Java智能卡上其他CAP文件异常处理 信息组的遍历,降低了智能卡异常捕获处理的时延、提高了运行效率。
图1是本发明的一种基于Java的异常处理方法实施一的流程图;图2是本发明的一种基于Java的异常处理方法实施二的流程图;图3-图4是本发明的一种基于Java的异常处理方法实施二的示意图;图5是本发明的一种基于Java的异常处理方法实施三的流程图6是本发明的一种基于Java的异常处理机制实施例一的示意图;图7是本发明的一种基于Java的异常处理机制实施例二的示意图。
具体实施例方式为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实 施方式对本发明作进一步详细的说明。请参照图1,示出本发明的一种基于Java的异常处理方法实施一,包括以下步骤步骤101,建立CAP文件索引记录模块。CAP文件索引记录模块用于记录CAP文件的索引信息,例如CAP文件的句柄。通过 该索引信息可以查找到对应的CAP文件。CAP文件索引记录模块的形式并不限定,只要能记 录CAP文件的位置,并通过该索引信息找到对应的CAP文件即可。例如,CAP文件索引记录 模块可以是与Java方法栈对应的CAP文件句柄栈,也可以是一个全局注册表等等。步骤102,根据CAP文件索引记录模块中的索引信息来找到对应的CAP文件,遍历 所述CAP文件的异常信息处理组并捕获异常。当Java代码抛出异常时,通过CAP文件索引记录模块中记录的CAP文件索引信 息,找到对应的CAP文件,遍历该CAP文件中的异常处理信息组,捕获异常。下面对上述方法进行进一步的说明。请参照图2,示出本发明的一种基于Java的 异常处理方法实施二,包括以下步骤步骤201,建立与Java方法栈对应的CAP文件句柄栈。CAP文件句柄栈中的句柄与Java方法栈中的方法一一对应,其中CAP文件的句柄 可以是指针。Java卡规范包括Java卡虚拟机(JVM,java card virtual machine)和Java 卡运行环境和Java卡应用编程接口三个部分。Java卡虚拟机维护一个PC (程序计数器)和 一个方法栈。PC(程序计数器)存储当前要执行的指令(java字节码)的存储地址。Java方 法栈保存了一个方法(function)调用时所需要的维护信息,一个方法调用所需要的维护 信息称之为堆栈帧。堆栈帧一般包含如下几方面的信息1.方法的返回地址和参数;2.临 时变量包括方法的非静态局部变量以及编译器自动生成的其他临时变量。Java 卡在接收到应用协议数据单元(APDU,Application Protocol Data Unit) 后,由Java卡运行环境负责找到当前Applet的应用协议数据单元处理方法(Applet类的 process方法),并初始化PC(程序计数器)为该方法的地第一条指令的地址,同时构造一 个堆栈帧压入Java方法栈。因为是在Java卡运行环境中调用该方法,所以堆栈帧中方法返 回地址信息指向Java卡运行环境。与此同时,将该方法所属CAP文件句柄压入CAP文件句 柄栈。Applet的应用协议数据单元处理方法的方法体中可以嵌套调用方法,每一个方法调 用都会构建一个堆栈帧作为Java方法栈的栈内元素并压入到Java方法栈。被调用的方法 可以属于不同的CAP文件,因此我们在方法调用的同时将被调用方法所属CAP文件的句柄 作为CAP文件句柄栈的栈内元素压入CAP文件句柄栈。CAP文件句柄栈中的栈顶元素为当 前正在执行的Java方法所属的CAP文件的句柄。当一个方法结束时,Java虚拟机从Java 方法栈中弹出一个堆栈帧,并初始化PC为该堆栈帧中记录的方法返回地址继续执行。与此 同时,从CAP文件句柄栈中弹出一个CAP文件句柄。步骤202,根据CAP文件句柄来找到对应的CAP文件,遍历该CAP文件的异常信息处理组并捕获异常。若在执行某一个方法时,Java代码抛出异常,则此时可以根据上述Java方法栈与 CAP文件句柄栈的对应关系,在CAP文件句柄栈找到该方法对应的CAP文件句柄,进而找到 与该CAP文件句柄对应的CAP文件。通过遍历该CAP文件的异常处理信息组,则可以捕获异常。下面结合一个具体的实例对本实施例进行详细的说明。请参照图3,系统首先调用了 CAP文件A中的方法a,在方法a的执行过程中调用 了 CAP文件B中的方法b ;在方法b的执行过程中调用了 CAP文件A中的方法a’。系统在 调用CAP文件A中的方法a建立一个堆栈帧作为Java方法栈的栈内元素压入到Java方法 栈中,同时,将与方法a对应的CAP文件A的句柄作为CAP文件句柄栈的栈内元素压入CAP 文件句柄栈中。若在方法a执行过程中调用CAP文件B中的方法b时,同样会建立一个堆 栈帧压入到Java方法栈中,同时,将CAP文件B的句柄压入CAP文件句柄栈中。同样的,对 后续调用的CAP文件A中的方法a’也采用相同的方法将CAP文件A的句柄压入CAP文件 句柄栈中。请参照图4,当方法a’执行完成返回时,CAP文件句柄栈把栈顶元素弹出。若在方 法b的执行的过程中抛出异常时,系统只需要获取CAP文件句柄栈的栈顶元素,即CAP文件 B的句柄,然后遍历该CAP文件B的异常处理信息组,则可捕获异常。无需遍历其他的CAP 文件。请参照图5,示出本发明的一种基于Java的异常处理方法实施三,包括以下步骤步骤301,建立一个全局注册表。建立的全局注册表中,每个CAP文件对应一个表项,每加载一个CAP文件就在全局 注册表中增加一项,记录该CAP文件对应的文件句柄、methocLcomponent (方法组件)存储 空间的起始地址及结束地址。CAP文件句柄是用于指针。步骤302,根据全局注册表中CAP文件句柄和methocLcomponent (方法组件)存储 空间地址范围,找到对应的CAP文件,捕获异常。在java代码抛出异常后,遍历该全局注册表,用PC(程序计数器)记录的字节码 地址来匹配全局注册表中记录的methocLcomponent (方法组件)地址范围,找到第一个匹 配的注册表项,获取对应的CAP文件句柄。通过获取的CAP文件句柄找到与该CAP文件句 柄对应的CAP文件及该CAP文件的异常处理信息组。通过遍历该CAP文件的异常处理信息 组,则可以捕获异常。下面结合一个具体实例对本实施例进行详细说明。在CAP文件下载到Java智能卡上时,首先Java智能卡分配一段空间存储它 比如,CAP文件A在智能卡上的存储地址为=0x00000000-0x00003000。其中method_ component (方法组件)存储空间的地址范围为0x00001000-0x00002000。然后分配一个 句柄“ 1 ”,用于标识CAP文件A。因此,在加载CAP文件A时,就在全局注册表中加一个表项,其中内容为CAP 文件 A 句柄=1;methocLcomponent (方法组件)存储空间的起始地址0x00001000 ;methocLcomponent (方法组件)存储空间的结束地址0x00002000。
若在执行CAP文件A的方法时,java代码抛出异常,则遍历该全局注册表,用 PC (程序计数器)记录的字节码地址匹配注册表中记录的methocLcomponent (方法组件) 存储空间地址范围为0x00001000-0x00002000,从而获取对应的CAP文件句柄。通过获取 的CAP文件句柄找到对应的CAP文件A及该CAP文件A的异常处理信息组。通过遍历CAP 文件A的异常处理信息组,则可以捕获异常。请参照图6,示出本发明的一种基于Java的异常处理机制实施例。该异常处理机 制100包括CAP文件索引记录模块10、异常处理接口 20、及异常捕获模块30。CAP文件索引记录模块10可以是与Java方法栈对应的CAP文件句柄栈,也可以是 一个全局注册表。用于记录CAP文件的句柄等索引信息,以快速的查找到对应的CAP文件。
当CAP文件索引记录模块10为CAP文件句柄栈时,里面所记录的是CAP文件句柄, 每一个CAP文件句柄栈中的栈顶始终与当前Java方法所属CAP文件一致。当CAP文件索 引记录模块10为全局注册表时,里面所记录的是CAP文件句柄及methocLcomponent (方法 组件)存储空间的地址范围,通过methocLcomponent (方法组件)存储空间的地址范围来 查找对应的CAP文件句柄。异常处理接口 20,用于输出CAP文件索引记录模块10中的记录信息。当CAP文 件索引记录模块10为CAP文件句柄栈时,输出CAP文件句柄栈栈顶的CAP文件句柄对应的 CAP文件。当CAP文件索引记录模块10为全局注册表时,输出与methocLcomponent (方法 组件)存储空间的地址范围对应的CAP文件句柄。异常捕获模块30,用于对异常进行捕获。异常处理接口 20将CAP文件索引记录模 块10中的记录信息输出给异常捕获模块30,该异常捕获模块30通过CAP文件句柄等信息 来找到对应的CAP文件,通过遍历该CAP文件及其中的异常处理信息组来捕获异常。请参照图7,进一步地,该异常处理机制100还包括程序计数器40,程序计数器40 存储当前要执行的指令(java字节码)的存储地址。当产生异常时,通过程序计数器40中 记录的字节码地址匹配全局注册表中记录的methocLcomponent (方法组件)地址范围,从 而获取对应的CAP文件句柄,并将获取的句柄信息通过异常处理接口 20传输给异常捕获模 块30。本发明的基于Java的异常处理方法及捕获装置通过建立CAP文件索引记录模块 来记录CAP文件的索引信息,当产生异常时,通过该索引信息来查找对应的CAP文件,通过 遍历该CAP文件的异常处理信息组,便可以捕获异常。在具体实现上,通过建立于Java方 法栈对应的CAP文件句柄栈及全局注册表的方式,可以根据Java方法栈中的方法与CAP文 件句柄栈中的句柄一一对应的关系或全局注册表中记载的methocLcomponent (方法组件) 存储空间的地址范围来获取CAP文件的句柄,从而可以快速的查找到对应的CAP文件。避 免了对Java智能卡上其他CAP文件异常处理信息组的遍历,降低了智能卡异常捕获处理的 时延、提高了运行效率。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关 之处参见方法实施例的部分说明即可。本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与 其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。以上对本发明所提供的一种基于Java的异常处理方法和异常处理机制,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的 说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依 据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容 不应理解为对本发明的限制。
权利要求
1. 一种基于Java的异常处理方法,其特征在于,包括以下步骤建立CAP文件索引记录模块,用于记录CAP文件的索引信息;根据CAP文件索引记录模块中记录的索引信息来找到对应的CAP文件,遍历所述CAP 文件的异常信息处理组并捕获异常。
2.如权利要求1所述的方法,其特征在于,所述CAP文件索引记录模块记录的索引信息 为CAP文件的句柄。
3.如权利要求2所述的方法,其特征在于,所述建立CAP文件索引记录模块包括建立与Java方法栈对应的CAP文件句柄栈,所述CAP文件句柄栈中的栈顶元素为正在执行的Java方法所属的CAP文件的句柄。
4.如权利要求3所述的方法,其特征在于,所述建立与Java方法栈对应的CAP文件句 柄栈的方法包括系统调用CAP文件的Java方法并建立一个堆栈帧作为Java方法栈的栈内元素压入到 Java方法栈中时,系统将与该方法对应的CAP文件的句柄作为CAP文件句柄栈的栈内元素 压入到CAP文件句柄栈中。
5.如权利要求4所述的方法,其特征在于,所述方法还包括在执行完CAP文件的Java 方法后,CAP文件句柄栈弹出其中与该Java方法对应的栈顶元素。
6.如权利要求1所述的方法,其特征在于,所述建立CAP文件索引记录模块包括建立全 局注册表,加载CAP文件的同时在全局注册表中增加CAP文件的索引信息。
7.如权利要求6所述的方法,其特征在于,所述索引信息包括CAP文件的句柄及该CAP 文件的方法组件存储空间的地址范围。
8.如权利要求7所述的方法,其特征在于,所述方法还包括通过程序计数器记录的字 节码地址来匹配全局注册表中记录的方法组件存储空间的地址范围,获取对应的CAP文件 句柄。
9. 一种基于Java的异常处理机制,其特征在于,包括CAP文件索引记录模块,用于记录CAP文件的索引信息;异常处理接口,用于输出所述CAP文件索引记录模块所记录的索引信息;异常捕获模块,根据所述异常处理接口提供的CAP文件的索引信息找到对应的CAP文 件,遍历所述CAP文件的异常信息处理组并进行异常捕获。
10.如权利要求9所述的异常处理机制,其特征在于,所述CAP文件索引记录模块为与 Java方法栈对应的CAP文件句柄栈,所述CAP文件句柄栈中的栈顶元素为正在执行的Java 方法所属的CAP文件的句柄。
11.如权利要求9所述的异常处理机制,其特征在于,所述CAP文件索引记录模块为全 局注册表,所述全局注册表记载CAP文件的句柄及该CAP文件的方法组件存储空间地址范 围。
12.如权利要求10或11所述的异常处理机制,其特征在于,所述CAP文件句柄是指针。
全文摘要
本发明提供了一种基于Java的异常处理方法,包括以下步骤建立CAP文件索引记录模块,用于记录CAP文件的索引信息;根据CAP文件索引记录模块中记录的索引信息来找到对应的CAP文件,遍历所述CAP文件的异常信息处理组并捕获异常。本发明的基于Java的异常处理方法,通过建立CAP文件索引记录模块来记录CAP文件的索引信息,当产生异常时,通过该索引信息来查找对应的CAP文件,通过遍历该CAP文件的异常处理信息组,便可以捕获异常降低了智能卡异常捕获处理的时延、提高了运行效率。本发明还提供一种基于Java的异常处理机制。
文档编号G06F11/36GK102004694SQ20101056915
公开日2011年4月6日 申请日期2010年11月26日 优先权日2010年11月26日
发明者曾林 申请人:北京握奇数据系统有限公司