專利名稱:將抽象句法表示法1數(shù)據(jù)模型化成對象模型的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及計算機(jī)軟件開發(fā)。更具體地,本發(fā)明涉及將ASN.1(抽象句法表示法1)編碼的數(shù)據(jù)動態(tài)映射到對象模型以產(chǎn)生ASN.1數(shù)據(jù)結(jié)構(gòu)的方法。
背景技術(shù):
抽象句法表示法1(ASN.1)是一種定義相互可操作性的抽象數(shù)據(jù)和消息格式的國際標(biāo)準(zhǔn)。盡管最初ASN.1用于描述開放系統(tǒng)互聯(lián)環(huán)境中的電子郵件消息,但從那時起ASN.1已經(jīng)被更廣范圍的其他應(yīng)用所采用,如應(yīng)用在網(wǎng)絡(luò)管理、安全、移動(蜂窩)電話、空中交通管制以及因特網(wǎng)上的語音和視頻中。實例包括X.509認(rèn)證、公鑰加密標(biāo)準(zhǔn)、Kerberos(科伯羅思)、類屬安全服務(wù)API(應(yīng)用編程接口)以及認(rèn)證管理協(xié)議。
ASN.1數(shù)據(jù)類型是從基本數(shù)據(jù)類型(即,整型、實型、布爾型和空)中建立的,使用三種主要的構(gòu)建機(jī)制重復(fù)(SEQUENCE OF(之序列)和SETOF(之組))、選擇(CHOICE)以及字段列表(SEQUENCE(序列)和SET(組))。一旦已經(jīng)定義了ASN.1數(shù)據(jù),該ASN.1數(shù)據(jù)可以確定地用在其他ASN.1數(shù)據(jù)類型的定義中,就好象它是基本數(shù)據(jù)類型一樣。這樣的數(shù)據(jù)類型可以在使用前或在(向前引用)后定義。這種遞歸定義的數(shù)據(jù)結(jié)構(gòu)可能增加,結(jié)果變得非常復(fù)雜,特別是在要求將編碼ASN.1描述編碼成特異編碼法(DER)編碼字節(jié)數(shù)組,并解碼它們的情況下。DER是編碼ASN.1數(shù)據(jù)結(jié)構(gòu)以在開放系統(tǒng)互聯(lián)(OSI)的應(yīng)用層和表示層之間轉(zhuǎn)送的標(biāo)準(zhǔn)編碼法。它提供了一種方法,使表示層可以可靠地與其它計算機(jī)系統(tǒng)交換任何任意數(shù)據(jù)結(jié)構(gòu),同時應(yīng)用層可以將編碼的數(shù)據(jù)映射成適合終端用戶的任何類型的表示或語言。
現(xiàn)在,越來越多的企業(yè)已經(jīng)采用面向?qū)ο笤O(shè)計和編程,因為它具有許多優(yōu)點,諸如可復(fù)用性和易于維護(hù)等。Java是面向?qū)ο?、獨立平臺和安全語言的一個例子,它已經(jīng)從新興技術(shù)變成為一種成功的安全電子商務(wù)應(yīng)用的主流語言。
因此,將會需要一種工具,將ASN.1編碼的數(shù)據(jù)映射到對象模型,并能夠?qū)SN.1編碼的數(shù)據(jù)翻譯成原始的Java源代碼,以幫助企業(yè)有效地開發(fā)或移植到面向?qū)ο蟮?、跨平臺的應(yīng)用。
發(fā)明內(nèi)容
本發(fā)明提供一種將ASN.1數(shù)據(jù)映射成對象模型的方法、程序和系統(tǒng)。本發(fā)明具體如下識別數(shù)據(jù)流的開始,并接著產(chǎn)生該數(shù)據(jù)的新對象名;然后分析(parse)數(shù)據(jù)獲得識別符和數(shù)據(jù)長度;接著分析數(shù)據(jù)的標(biāo)簽(tag)類型,如果標(biāo)簽類型是簡單型,則為該數(shù)據(jù)產(chǎn)生一類(class)圖,并產(chǎn)生該數(shù)據(jù)的源代碼,如果標(biāo)簽類型不是簡單型,則在產(chǎn)生類圖和源代碼之前,調(diào)用子例程進(jìn)一步分析該數(shù)據(jù)。
在所附的權(quán)利要求書中陳述了本發(fā)明的確有新穎性特征的特點。但是通過結(jié)合閱讀附圖,下面的對說明性實施例的詳細(xì)描述將使本發(fā)明自身以及本發(fā)明的使用優(yōu)選模式、更進(jìn)一步的目的和優(yōu)點得到最好的理解。
圖1描述了可以實現(xiàn)本發(fā)明的數(shù)據(jù)處理系統(tǒng)的網(wǎng)絡(luò)示圖;圖2描述了根據(jù)本發(fā)明優(yōu)選實施例的可以用做服務(wù)器的數(shù)據(jù)處理系統(tǒng)的方框圖;以及圖3描述了說明可以實現(xiàn)本發(fā)明的數(shù)據(jù)處理系統(tǒng)的方框圖;圖4描述了根據(jù)本發(fā)明的從ASN.1數(shù)據(jù)類型中產(chǎn)生的對象圖;圖5描述了說明根據(jù)本發(fā)明的分析數(shù)據(jù)流以及創(chuàng)建分類以及ASN.1數(shù)據(jù)類型的例程流程圖;圖6描述了說明根據(jù)本發(fā)明的分析數(shù)據(jù)的子例程的流程圖;圖7描述了根據(jù)本發(fā)明的輸出類別圖;圖8描述了說明根據(jù)本發(fā)明的分析子例程執(zhí)行順序的對象圖。
具體實施例方式
現(xiàn)在參照附圖,圖1描述了可以實現(xiàn)本發(fā)明的數(shù)據(jù)處理系統(tǒng)的網(wǎng)絡(luò)示圖。網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100是可以實現(xiàn)本發(fā)明的計算機(jī)網(wǎng)絡(luò)。網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100包括網(wǎng)絡(luò)102,為用于在網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100中連接在一起的各種設(shè)備和計算機(jī)之間提供通信鏈路的介質(zhì)。網(wǎng)絡(luò)102可以包括諸如有線、無線通信鏈路或光纜的連接。
在所述實例中,服務(wù)器104連接到網(wǎng)絡(luò)102及存儲單元106。另外,客戶機(jī)108、110和112也連接到網(wǎng)絡(luò)102。例如這些客戶機(jī)108、110和112可以是個人計算機(jī)或網(wǎng)絡(luò)計算機(jī)。在所述實例中,服務(wù)器104向客戶機(jī)108-112提供諸如引導(dǎo)文件、操作系統(tǒng)映像(image)以及應(yīng)用程序之類的數(shù)據(jù)??蛻魴C(jī)108、110和112是服務(wù)器104的客戶機(jī)。網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100可以包括未示出的附加的服務(wù)器、客戶機(jī)和其他設(shè)備等。
在所述實例中,網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100是具有代表世界范圍的使用TCP/IP系列協(xié)議彼此進(jìn)行通信的網(wǎng)絡(luò)和網(wǎng)關(guān)的集合的網(wǎng)絡(luò)102的因特網(wǎng)。在因特網(wǎng)的中心是在包括數(shù)以千計的商業(yè)、政府、教育以及傳遞數(shù)據(jù)和消息的其他計算機(jī)系統(tǒng)的主節(jié)點或主計算機(jī)之間的高速數(shù)據(jù)通信鏈路的主干。當(dāng)然,網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100還可以被實現(xiàn)成多個不同類型的網(wǎng)絡(luò),例如,諸如企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)之類的網(wǎng)絡(luò)。圖1僅作為一個實例,而不是作為本發(fā)明的結(jié)構(gòu)限制。
參照圖2,根據(jù)本發(fā)明優(yōu)選實施例描述了可以實現(xiàn)為一個服務(wù)器(例如圖1中的服務(wù)器104)的數(shù)據(jù)處理系統(tǒng)的方框圖。數(shù)據(jù)處理系統(tǒng)200可以是包括連接到系統(tǒng)總線206上的多個處理器202和204的對稱多處理器(SMP)系統(tǒng)?;蛘?,也可以使用單個處理器系統(tǒng)。并且存儲器控制器/高速緩存器208也連接到系統(tǒng)總線206,其中提供了到本地存儲器209的接口。I/O總線橋210連接到系統(tǒng)總線206并提供到I/O總線212的接口。存儲器控制器/高速緩存器208和I/O總線橋210也可以如所述那樣集成。
連接到I/O總線212的外設(shè)部件互聯(lián)(PCI)總線橋214提供到PCI本地總線216的接口。多個調(diào)制解調(diào)器可以連接到PCI總線216。典型的PCI總線的實現(xiàn)將支持4個PCI擴(kuò)展槽或附加(add-in)連接器??梢酝ㄟ^附加板連接到PCI本地總線216上的調(diào)制解調(diào)器218和網(wǎng)絡(luò)適配器220提供圖1中至網(wǎng)絡(luò)計算機(jī)108-112的通信鏈接。
附加PCI總線橋222和224為附加PCI總線226和228提供接口,從中可以支持附加調(diào)制解調(diào)器或網(wǎng)絡(luò)適配器。在這種方式中,數(shù)據(jù)處理系統(tǒng)200允許與多個網(wǎng)絡(luò)計算機(jī)的連接。正如所述的,存儲器映射圖形適配器230和硬盤232也可以直接或間接地連接到I/O總線212。
本領(lǐng)域普通技術(shù)人員會理解,圖2所示硬件可以改變。例如,除了使用或取代所述的硬件以外,也可以使用諸如光盤驅(qū)動器等的其它外部設(shè)備。所述實例并不意味著對本發(fā)明結(jié)構(gòu)的限制。
例如圖2中描述的數(shù)據(jù)處理系統(tǒng)可以是運行著高級交互執(zhí)行體(AIX)操作系統(tǒng)的、位于紐約Armonk的國際商用機(jī)器公司的產(chǎn)品IBM RISC/System6000系統(tǒng)。
現(xiàn)在參考圖3,描述說明可以實現(xiàn)本發(fā)明的數(shù)據(jù)處理系統(tǒng)的方框圖。數(shù)據(jù)處理系統(tǒng)300是客戶計算機(jī)的實例。數(shù)據(jù)處理系統(tǒng)300采用外部部件互聯(lián)(PCI)本地總線結(jié)構(gòu)。盡管所描述的實例使用PCI總線,也可以使用諸如加速圖形接口(AGP)和工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)(ISA)的其它的總線結(jié)構(gòu)。處理器302和主存儲器304通過PCI橋308連接到PCI本地總線306上。PCI橋308也可以包括用于處理器302的集成的存儲器控制器和高速緩存器??梢酝ㄟ^直接部件互聯(lián)或通過附加板產(chǎn)生與PCI本地總線306的附加連接。在所述的實例中,局域網(wǎng)(LAN)適配器310、SCSI(小型計算機(jī)系統(tǒng)接口)主總線適配器312以及擴(kuò)展總線接口314通過直接部件互聯(lián)連接到PCI本地總線306上。相反,音頻適配器316、圖形適配器318和音頻/視頻適配器319通過插入在擴(kuò)展槽中的附加板連接到PCI本地總線306。擴(kuò)展總線接口314提供鍵盤和鼠標(biāo)適配器320、調(diào)制解調(diào)器322和附加存儲器324的連接。小型計算機(jī)系統(tǒng)接口(SCSI)主總線適配器312提供硬盤驅(qū)動器326、磁帶驅(qū)動器328以及CD-ROM驅(qū)動器330的連接。典型的PCI本地總線的實現(xiàn)將支持3至4個PCI擴(kuò)展槽或附加連接器。
操作系統(tǒng)運行在處理器302上并用于協(xié)調(diào)和提供圖3中的數(shù)據(jù)處理系統(tǒng)300中的各種部件的控制。操作系統(tǒng)可以是市場可得的操作系統(tǒng),諸如可從微軟公司得到的視窗2000。諸如Java的面向?qū)ο缶幊滔到y(tǒng)可以結(jié)合操作系統(tǒng)運行,并提供從Java程序向操作系統(tǒng)的調(diào)用或在數(shù)據(jù)處理系統(tǒng)300上的執(zhí)行的應(yīng)用程序。“Java”是太陽微系統(tǒng)公司的商標(biāo)。用于操作系統(tǒng)、面向?qū)ο蟮牟僮飨到y(tǒng)和應(yīng)用或程序的指令放置在諸如硬盤驅(qū)動器326的存儲設(shè)備上,也可以載入到用于處理器302執(zhí)行的主存儲器304中。
本領(lǐng)域普通技術(shù)人員會理解圖3的硬件可以根據(jù)實現(xiàn)來改變。除了使用圖3中所述的硬件以外,還可以使用諸如快閃ROM(或等價的非易失性存儲器)或光盤驅(qū)動器等之類的其它內(nèi)部硬件或外部設(shè)備,或替代圖3中的硬件。并且,本發(fā)明的處理可以應(yīng)用到多處理器數(shù)據(jù)處理系統(tǒng)中。
作為另一個實例,不管數(shù)據(jù)處理系統(tǒng)300是否包括某種網(wǎng)絡(luò)通信接口,數(shù)據(jù)處理系統(tǒng)300都可以是一個獨立配置可引導(dǎo)的系統(tǒng),而不依賴某種網(wǎng)絡(luò)通信接口。作為再一個實例,數(shù)據(jù)處理系統(tǒng)300可以是個人數(shù)字助理(PDA)設(shè)備,其中配置有ROM和/或快閃ROM以便為存儲操作系統(tǒng)文件和/或用戶生成的數(shù)據(jù)提供非易失性存儲器。
圖3中所述實例和上述實例不意味著結(jié)構(gòu)限制。例如,除了采取PDA形式,數(shù)據(jù)處理系統(tǒng)300也可以是筆記本計算機(jī)或手持計算機(jī)。數(shù)據(jù)處理系統(tǒng)300還可以是信息臺(kiosk)或網(wǎng)絡(luò)(web)應(yīng)用。
本發(fā)明將ASN.1數(shù)據(jù)譯成對象模型,接著產(chǎn)生源代碼,在圖形用戶接口(GUI)上顯示每一屬性值。ASN.1數(shù)據(jù)可能是用ASN.1表示編寫的一條編碼數(shù)據(jù)、一個二進(jìn)制文件、一個由ASN.1表示法寫成的文本文件,或僅是從輸入設(shè)備鍵入的ASN.1表示。GUI可以在JavaBean(Java豆)中實現(xiàn)并封裝在運行于Beanbox(豆盒)或能夠插入到諸如Visual Cafe(可視室)的Java開發(fā)環(huán)境中的Java Archive(JAR)(Java檔案)文件中。
輸入數(shù)據(jù)的實例在表1中說明,表1包括以十六進(jìn)制顯示的二進(jìn)制編碼的數(shù)據(jù)流。
表1000000003081CD02 01010201 003081C5 302D02010000001001041841 5A4E5F50 45524D49 4E464F5F0000002041554449 544C4556 454C0030 0E3 00C020000003001010201 02040400 00000030 2B020101000000400416415A 4E5F5045 524D494E 474F5F51000000504F505F55 494E5400 300E300C 020101020000006001020404 00000000 302E0201 01041941000000705A4E5F55 45524D49 4E464F5F 5741524E00000080494E474D 4F444500 300E300C 020101020000009001020404 00000000 30370201 01042241000000A05A4E5F50 45524D49 4E464F5F 5741524E000000B0494E474D 4F444550 45524D49 54544544000000C000300E30 0C020101 02010204 04000000
從表1所示的數(shù)據(jù)流中產(chǎn)生的ASN.1數(shù)據(jù)類型如下所示<pre listing-type="program-listing">ClassA=Sequence{ attribute1 INTEGER, attribute2 INTEGER, attribute3 OCTETSTRING}ClassB=SEQUENCEOF{ attribute1 ClassA}ClassC=SEQUENCE{ attribute1 INTEGER, attribute2 OCTETSTRING, attribute3 ClassB}ClassD=SEQUENCEOF{ ClassC}ClassE=SEQUENCE{ attributel INTEGER, attribute2 INTEGER, attribute3 ClassD}</pre>現(xiàn)在參照圖4,根據(jù)本發(fā)明描述從上面說明的ASN.1數(shù)據(jù)類型中產(chǎn)生的對象圖。圖4中對象圖采用新對象模型建立技術(shù)(OMT)表示法。菱形鏈接表示聚集關(guān)系,其中一個類是由多個類組成的。用表示類別對象的方形框顯示對象模型。類名、屬性和方法列在框中,并且各類別的關(guān)系用鏈接指示。每一類具有特性表,并且對于二進(jìn)制輸入,該表列出了其中的每一對象的值。
參照圖5,描述說明根據(jù)本發(fā)明的分析數(shù)據(jù)流和創(chuàng)建類及ASN.1數(shù)據(jù)類型的例程的流程圖。將DER數(shù)據(jù)用做一個實例。但是對于基本編碼法(BER)數(shù)據(jù)流來說,該步驟也是適合的。BER或DER編碼數(shù)據(jù)具有三部分識別ASN.1值標(biāo)簽類型的識別符八位位組、給出作為數(shù)據(jù)內(nèi)容的字節(jié)數(shù)的長度八位位組以及真實數(shù)據(jù)的內(nèi)容八位位組。
使用DER法開始該例程以識別編碼數(shù)據(jù)的開始(步驟501)。編碼數(shù)據(jù)從識別符八位位組開始。通常它在輸入字節(jié)流或二進(jìn)制文件的開始,但是也不是必須如此。接著,產(chǎn)生新對象名,通常是類名(步驟502)。為方便命名起見,對象名可能是諸如 “類A”或“對象A”之類的一般名字。該例程接著分析一個或多個字節(jié)數(shù)據(jù)以獲得識別符(步驟503)。在這點上,對從數(shù)據(jù)的1至127字節(jié)的任何地方進(jìn)行分析以獲得數(shù)據(jù)長度(步驟504)。在步驟503和504依據(jù)BER法分析數(shù)據(jù)。
獲得識別符和數(shù)據(jù)長度之后,下面的步驟是識別數(shù)據(jù)所具有的標(biāo)簽類型(步驟505)。如果標(biāo)簽類型是簡單型,則產(chǎn)生類圖和ASN.1表示(步驟507)。簡單型數(shù)據(jù)具有諸如INTEGER(整型)、GENERAL STRING(通用字符串)、OCTET STRING(八位位組字符串)等之類的簡單編碼類型的標(biāo)簽。在這種情況下,通過擴(kuò)展編碼類型所對應(yīng)的超類(superclass)來構(gòu)建類,例如INTEGER對應(yīng)于Java2標(biāo)準(zhǔn)編輯API中java.lang.Integer類、GENERALSTRING對應(yīng)于java.lang.Integer類、OCTET STRING對應(yīng)于java.lang.Integer類。在圖7中說明了輸出類圖的一個實例,并且ASN.1表示法是ClassA=GeneralString。最后的步驟是產(chǎn)生數(shù)據(jù)的源代碼(步驟508)。
如果標(biāo)簽類型不是簡單型,則調(diào)用子例程分析數(shù)據(jù)內(nèi)容(步驟506)。
現(xiàn)在參考圖6,描述說明根據(jù)本發(fā)明的分析數(shù)據(jù)的子例程的流程圖?!矮@得識別符”的步驟601和“獲得數(shù)據(jù)長度”的步驟602是和參考圖5描述的相同。下面的步驟是分析標(biāo)簽類型(步驟603)。
如果標(biāo)簽類型是簡單型,則接著子例程確定所述調(diào)用是否來自主例程(步驟608)。如果調(diào)用是來自主例程,則為進(jìn)一步的引用(具有相同標(biāo)簽號的類是相同的類)記錄標(biāo)簽號,并且將類簡單地返回到主例程(步驟611)。如果調(diào)用不是來自主例程,則創(chuàng)建新的屬性名,記錄數(shù)據(jù)值,并且將屬性與其類相關(guān)聯(lián)(步驟609)。為方便起見,可將屬性命名為“attributeA”。如果到達(dá)數(shù)據(jù)末尾,則返回主例程(步驟611)。如果沒有到達(dá)數(shù)據(jù)末尾,子例程返回到步驟601。
如果構(gòu)建了步驟603中分析的標(biāo)簽,則產(chǎn)生新的類名(步驟607),并且子例程返回到步驟601,以便它能夠進(jìn)一步分析所構(gòu)建類型內(nèi)的數(shù)據(jù)內(nèi)容。子例程能夠遞歸調(diào)用以便分析在所構(gòu)建類型中的所有的數(shù)據(jù)內(nèi)容等。所構(gòu)建的類型包括構(gòu)件(component)。所構(gòu)建類型的實例如SEQUENCE、SEQUENCEOF等。SEQUENCE包括一個或多個不同的類型。SEQUENCE OF包括一個或多個給定的類型。
如果在步驟603分析的標(biāo)簽類型是顯性的,將直接到“獲得識別符”(步驟604)和“獲得數(shù)據(jù)長度”(步驟605),與步驟601和602相似。顯性標(biāo)注的類型是來自于簡單型或通過將標(biāo)簽放在基礎(chǔ)類型上構(gòu)建的類型。因此分析顯性標(biāo)注的類型以確定隱含標(biāo)簽類型(underlying tag type)(步驟606)。
如果構(gòu)建了隱含標(biāo)簽類型,則產(chǎn)生新類名(步驟607)并再次調(diào)用子例程分析在該構(gòu)建的類型中的數(shù)據(jù)內(nèi)容(返回步驟601)。如果隱含標(biāo)簽類型是簡單型,則在進(jìn)行方便的命名之后產(chǎn)生新的屬性名(步驟610)。
如果已經(jīng)到達(dá)編碼數(shù)據(jù)的末尾,則將所創(chuàng)建的類返回到主例程(步驟611)。如果還沒有到達(dá)編碼數(shù)據(jù)的末尾,則處理返回到子例程的開始(步驟601)繼續(xù)分析數(shù)據(jù)的剩余部分。
對于文本輸入,字符串分析器和語法檢查器是和底層相關(guān)聯(lián)的。他們在數(shù)據(jù)結(jié)構(gòu)上執(zhí)行遞歸檢查。對于二進(jìn)制輸入,字節(jié)分析器與底層相關(guān)聯(lián),它分析字節(jié)并識別類、標(biāo)簽號、數(shù)據(jù)長度和字節(jié)流中的內(nèi)容。
參照圖8,描述說明根據(jù)本發(fā)明的分析子例程執(zhí)行順序的對象圖。這個流程是顯示從編碼數(shù)據(jù)流中如何產(chǎn)生類圖的一個實例。
在分析數(shù)據(jù)時創(chuàng)建類的順序如下a.開始類的創(chuàng)建(創(chuàng)建該類名);b.開始構(gòu)件類1的創(chuàng)建(創(chuàng)建類名);c.開始和完成子構(gòu)件類1的構(gòu)建(如果是顯性標(biāo)注的類型,則創(chuàng)建類名、識別屬性和相關(guān)聯(lián)的值、記錄標(biāo)簽號);d.開始和完成子構(gòu)件類2的構(gòu)建(如果是顯性標(biāo)注的類型,則創(chuàng)建類名、識別屬性和他們的相關(guān)聯(lián)的值、記錄標(biāo)簽號);以及e.完成構(gòu)件類1的構(gòu)建(識別構(gòu)件類1的構(gòu)建機(jī)制。如果子構(gòu)件類1和2是相同的,則重復(fù)構(gòu)建機(jī)制。構(gòu)件類1具有兩個為“子構(gòu)件類1”和“子構(gòu)件類2”類型的屬性。如果它是顯性標(biāo)注的類型,則識別屬性和他們相關(guān)聯(lián)的值,記錄標(biāo)簽號)。
構(gòu)件類2和構(gòu)件類3依照與構(gòu)件類1相似的過程。最后因為識別了類的所有屬性,所以完成了類的構(gòu)建。
源代碼引擎是用于產(chǎn)生在Java源代碼中Java類的“skeletal(骨架)”結(jié)構(gòu)的。適當(dāng)?shù)木幋a/解碼例程被插入到Java代碼中以提供功能類(functionalclass)。這些例程產(chǎn)生對包括基本數(shù)據(jù)類型的編碼和解碼方法的實用程序(utility)的調(diào)用。實用程序庫是由Java安全組開發(fā)的,作為Java公鑰加密標(biāo)準(zhǔn)產(chǎn)品包的一部分。
ASN.1和DER編碼是固有的復(fù)雜操作。一些存在的工具包提供基本DER類,但他們?nèi)砸箝_發(fā)者對他們的ASN.1定義進(jìn)行模型化并確定如何調(diào)用DER編碼/解碼例程。當(dāng)前現(xiàn)存的工具不能幫助開發(fā)者和編程者(architect)對面向?qū)ο笮问街械腁SN.1定義進(jìn)行模型化。本發(fā)明提供了這項關(guān)鍵功能,并且因此允許開發(fā)者和編程者專注于他們試圖解決的問題,而不是機(jī)制問題。
本發(fā)明降低了在異質(zhì)類型環(huán)境中的與分析、實現(xiàn)和測試的代碼相關(guān)的時間和成本,允許軟件開發(fā)者更多關(guān)注在商業(yè)模型和結(jié)構(gòu)開發(fā)上。本發(fā)明還幫助開發(fā)者和編程者分析當(dāng)前結(jié)構(gòu)中的數(shù)據(jù)模型并增強(qiáng)了基于對象表示的設(shè)計。另一優(yōu)點是幫助測試者和網(wǎng)絡(luò)管理員分析通過動態(tài)構(gòu)建基于數(shù)據(jù)輸入流的對象模型和在圖形用戶接口中將其顯示來分析在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)。
注意下面所述是很重要的,即雖然已經(jīng)在上文中描述了本發(fā)明的全部功能的數(shù)據(jù)處理系統(tǒng),本領(lǐng)域普通技術(shù)人員將理解本發(fā)明的處理能夠以指令的計算機(jī)可讀介質(zhì)的形式和各種形式傳播,并且可以等價應(yīng)用本發(fā)明而不論實際用于實現(xiàn)傳播的信號承載介質(zhì)的具體類型。計算機(jī)可讀介質(zhì)的實例包括諸如軟磁盤、硬盤驅(qū)動器、RAM、CD-ROM、DVD-ROM之類的可記錄型介質(zhì)和諸如數(shù)字和模擬通信鏈路、使用例如射頻和光波傳輸?shù)膫鬏斝问降挠芯€或無線通信鏈路的傳輸型介質(zhì)。對于具體數(shù)據(jù)處理系統(tǒng)中的實際使用,計算機(jī)可讀介質(zhì)可以使用被解碼的編碼格式的形式。
為說明和描述的目的已經(jīng)給出了本發(fā)明的描述,但該描述不是試圖窮舉或限制本發(fā)明的公開形式。對本領(lǐng)域普通技術(shù)人員來說許多改進(jìn)和變型是顯然的。選擇并描述實施例以最好地解釋本發(fā)明的原理、實際應(yīng)用,并使被指控試圖具體使用的具有各種改進(jìn)的各種實施例的本領(lǐng)域的其他普通技術(shù)人員能夠理解本發(fā)明。
權(quán)利要求
1.一種將ASN.1(抽象句法表示法1)數(shù)據(jù)映射成對象模型的方法,該方法包括步驟識別ASN.1數(shù)據(jù)中的各對象;識別各對象的屬性;識別各對象之間的關(guān)系;以及產(chǎn)生對象模型。
2.如權(quán)利要求1的方法,還包括步驟識別數(shù)據(jù)流的開始;產(chǎn)生該數(shù)據(jù)的新對象名;分析該數(shù)據(jù)以獲得數(shù)據(jù)識別符;分析該數(shù)據(jù)以獲得數(shù)據(jù)長度;分析該數(shù)據(jù)的標(biāo)簽類型;如果標(biāo)簽類型是簡單型,則為該數(shù)據(jù)產(chǎn)生一類圖;以及產(chǎn)生該數(shù)據(jù)的源代碼。
3.如權(quán)利要求2的方法,其特征在于,還包括如果標(biāo)簽類型不是簡單型,執(zhí)行一子例程以進(jìn)一步分析數(shù)據(jù)內(nèi)容的步驟。
4.如權(quán)利要求3的方法,其特征在于,分析子例程包括步驟分析數(shù)據(jù)內(nèi)容以獲得識別符;分析數(shù)據(jù)內(nèi)容以獲得數(shù)據(jù)長度;以及分析標(biāo)簽類型。
5.如權(quán)利要求4的方法,其特征在于,還包括步驟如果標(biāo)簽類型是簡單型,確定對子例程的調(diào)用是否來自主例程;如果調(diào)用來自主例程,則為進(jìn)一步引用記錄數(shù)據(jù)標(biāo)簽號并將該數(shù)據(jù)返回到主例程;以及如果調(diào)用不是來自主例程,則為該數(shù)據(jù)產(chǎn)生屬性名,并且如果已經(jīng)到達(dá)數(shù)據(jù)末尾,則將該數(shù)據(jù)返回到主例程。
6.如權(quán)利要求5的方法,其特征在于,還包括如果沒有到達(dá)數(shù)據(jù)末尾則再調(diào)用分析子例程的步驟。
7.如權(quán)利要求4的方法,其特征在于,還包括步驟如果構(gòu)建了標(biāo)簽類型,則為該數(shù)據(jù)產(chǎn)生一新的類名;以及再調(diào)用分析子例程。
8.如權(quán)利要求4的方法,其特征在于,還包括步驟如果標(biāo)簽類型是顯性的,則進(jìn)一步分析數(shù)據(jù)內(nèi)容以獲得數(shù)據(jù)識別符和數(shù)據(jù)長度;以及分析顯性的標(biāo)簽類型以確定隱含標(biāo)簽類型。
9.如權(quán)利要求8的方法,其特征在于,還包括步驟如果隱含標(biāo)簽類型是簡單型,則為該數(shù)據(jù)產(chǎn)生一屬性名;以及如果已經(jīng)到達(dá)數(shù)據(jù)末尾,則將該數(shù)據(jù)返回到主例程。
10.如權(quán)利要求9的方法,其特征在于,還包括如果還沒有到達(dá)數(shù)據(jù)末尾,則再調(diào)用分析子例程的步驟。
11.如權(quán)利要求8的方法,其特征在于,還包括步驟如果構(gòu)建了隱含標(biāo)簽類型,則為該數(shù)據(jù)產(chǎn)生一新類名;以及再調(diào)用分析子例程。
12.一種在計算機(jī)可讀介質(zhì)中用在數(shù)據(jù)處理系統(tǒng)中的計算機(jī)程序產(chǎn)品,用于將ASN.1數(shù)據(jù)映射到對象模型,該計算機(jī)程序產(chǎn)品包括用于識別ASN.1數(shù)據(jù)中的對象的指令;用于識別各對象的屬性的指令;用于識別各對象之間的關(guān)系的指令;以及用于產(chǎn)生對象模型的指令。
13.如權(quán)利要求12的計算機(jī)程序產(chǎn)品,其特征在于,還包括用于識別數(shù)據(jù)流的開始的指令;用于產(chǎn)生該數(shù)據(jù)的新對象名的指令;用于分析數(shù)據(jù)以獲得數(shù)據(jù)識別符的指令;用于分析數(shù)據(jù)以獲得數(shù)據(jù)長度的指令;用于分析數(shù)據(jù)的標(biāo)簽類型的指令;用于如果標(biāo)簽類型是簡單型,則為該數(shù)據(jù)產(chǎn)生一類圖的指令;以及用于產(chǎn)生該數(shù)據(jù)的源代碼的指令。
14.如權(quán)利要求13的計算機(jī)程序產(chǎn)品,其特征在于,還包括用于如果標(biāo)簽類型不是簡單型,以進(jìn)一步分析數(shù)據(jù)內(nèi)容的子例程。
15.如權(quán)利要求14的計算機(jī)程序產(chǎn)品,其特征在于分析子例程包括用于分析數(shù)據(jù)內(nèi)容以獲得識別符的指令;用于分析數(shù)據(jù)內(nèi)容以獲得數(shù)據(jù)長度的指令;以及用于分析標(biāo)簽類型的指令。
16.如權(quán)利要求15的計算機(jī)程序產(chǎn)品,其特征在于,還包括如果標(biāo)簽類型是簡單型,用于確定子例程的調(diào)用是否來自主例程的指令;如果調(diào)用來自主例程,用于為進(jìn)一步引用而記錄數(shù)據(jù)標(biāo)簽號并將數(shù)據(jù)返回到主例程的指令;以及如果調(diào)用不是來自主例程,用于為該數(shù)據(jù)產(chǎn)生屬性名以及如果已經(jīng)到達(dá)數(shù)據(jù)末尾,則將該數(shù)據(jù)返回到主例程的指令。
17.如權(quán)利要求16的計算機(jī)程序產(chǎn)品,其特征在于,還包括如果沒有到達(dá)數(shù)據(jù)末尾,用于再調(diào)用分析子例程的指令。
18.如權(quán)利要求15的計算機(jī)程序產(chǎn)品,其特征在于,還包括如果構(gòu)建了標(biāo)簽類型,用于為該數(shù)據(jù)產(chǎn)生一新的類名的指令;以及用于再調(diào)用分析子例程的指令。
19.如權(quán)利要求15的計算機(jī)程序產(chǎn)品,其特征在于,還包括如果標(biāo)簽類型是顯性的,用于進(jìn)一步分析數(shù)據(jù)內(nèi)容以獲得數(shù)據(jù)識別符和數(shù)據(jù)長度的指令;以及用于分析顯性的標(biāo)簽類型以確定隱含標(biāo)簽類型的指令。
20.如權(quán)利要求19的計算機(jī)程序產(chǎn)品,其特征在于,還包括如果隱含標(biāo)簽類型是簡單型,用于為該數(shù)據(jù)產(chǎn)生一屬性名的指令;以及如果已經(jīng)到達(dá)數(shù)據(jù)末尾,用于將該數(shù)據(jù)返回到主例程的指令。
21.如權(quán)利要求20的計算機(jī)程序產(chǎn)品,其特征在于,還包括如果還沒有到達(dá)數(shù)據(jù)末尾,用于再調(diào)用分析子例程的指令。
22.如權(quán)利要求19的計算機(jī)程序產(chǎn)品,其特征在于,還包括如果構(gòu)建了隱含標(biāo)簽類型,用于為該數(shù)據(jù)產(chǎn)生一新類名的指令;以及用于再調(diào)用分析子例程的指令。
23.一種將ASN.1數(shù)據(jù)映射成對象模型的系統(tǒng),該系統(tǒng)包括用于識別ASN.1數(shù)據(jù)中的對象的裝置;用于識別各對象的屬性的裝置;用于識別各對象之間的關(guān)系的裝置;以及用于產(chǎn)生對象模型的裝置。
全文摘要
提供一種將ASN.1數(shù)據(jù)映射到對象模型的方法、程序和系統(tǒng)。本發(fā)明包括識別數(shù)據(jù)流的開始,并接著產(chǎn)生該數(shù)據(jù)的新對象名;然后分析數(shù)據(jù)以獲得識別符和數(shù)據(jù)長度;接著分析數(shù)據(jù)的標(biāo)簽類型,如果標(biāo)簽類型是簡單型,則為該數(shù)據(jù)產(chǎn)生一類圖,并產(chǎn)生該數(shù)據(jù)的源代碼,如果標(biāo)簽類型不是簡單型,則在產(chǎn)生類圖和源代碼之前,調(diào)用子例程進(jìn)一步分析該數(shù)據(jù)。
文檔編號G06F9/44GK1359065SQ0114362
公開日2002年7月17日 申請日期2001年12月14日 優(yōu)先權(quán)日2000年12月15日
發(fā)明者張曉燕, 蘭迪·S·漢弗萊, 西奧多·J·L·施雷德, 戴維斯·K·索珀 申請人:國際商業(yè)機(jī)器公司