一種基於Java的異常處理方法和異常處理機制的製作方法
2023-09-16 14:02:20 1
專利名稱:一種基於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日
發明者曾林 申請人:北京握奇數據系統有限公司