專利名稱:翻譯器以及基于翻譯器的處理多業(yè)務(wù)的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及基于呼叫處理語言(CPL)處理業(yè)務(wù)的技術(shù),尤其涉及一種基 于CPL的翻譯器以及基于翻譯器的處理多業(yè)務(wù)的系統(tǒng)和方法。
背景技術(shù):
在IP電話系統(tǒng)中,用來描述IP電話如何處理呼叫請求的語言為CPL, CPL 是基于擴展性標(biāo)記語言(XML)的腳本語言,XML的擴展性體現(xiàn)在允許業(yè)務(wù) 開發(fā)者定義創(chuàng)建業(yè)務(wù)所需的標(biāo)簽。CPL獨立于信令協(xié)議,可在不同的信令協(xié)議 下執(zhí)行,信令協(xié)議包括公共交換電話網(wǎng)上的多媒體通信協(xié)議的數(shù)據(jù)流復(fù)用標(biāo)準(zhǔn) (H.323 )和會話發(fā)起協(xié)議(SIP )。
由于CPL與其描述的處理呼叫處理請求的動作之間存在十分緊密的對應(yīng)關(guān) 系,因此,目前業(yè)務(wù)開發(fā)者通過CPL編寫CPL業(yè)務(wù)腳本來規(guī)定業(yè)務(wù)信息,進(jìn) 行業(yè)務(wù)開發(fā)。CPL業(yè)務(wù)腳本以標(biāo)簽的形式對信息進(jìn)行標(biāo)記,CPL業(yè)務(wù)腳本中包 括兩種類型的信息輔助信息和呼叫處理的動作,其中呼叫處理的動作包括頂 層動作和子動作,也就是說,CPL業(yè)務(wù)腳本的標(biāo)簽中包括輔助信息或呼叫處理 動作,其中,呼叫處理動作為頂層動作或子動作。
頂層動作指CPL業(yè)務(wù)腳本描述的業(yè)務(wù)服務(wù)器所觸發(fā)的動作,包括呼入動作 和呼出動作兩種類型,其中,呼入動作指呼叫到達(dá)該CPL業(yè)務(wù)腳本描述的業(yè)務(wù) 服務(wù)器時所產(chǎn)生的動作;而呼出動作指呼叫發(fā)自該CPL業(yè)務(wù)腳本描述的業(yè)務(wù)時 服務(wù)器產(chǎn)生的動作。舉例子來說頂層動作即描述終端對業(yè)務(wù)服務(wù)器發(fā)出第一 個呼叫請求時,所述業(yè)務(wù)服務(wù)器根據(jù)該請求進(jìn)行判斷后的處理動作;所述業(yè)務(wù) 服務(wù)器經(jīng)過一系列處理動作后,返回處理結(jié)果給所述終端的動作也稱為頂層動 作。
子動作類似于C語言中函數(shù)的概念,指可以在其他動作中調(diào)用的動作。仍 沿用對頂層動作描述中所舉的例子,子動作即描述所述業(yè)務(wù)服務(wù)器執(zhí)行完頂層 動作后,繼續(xù)進(jìn)行判斷,并選擇呼叫路由所進(jìn)行的一系列處理動作。
頂層動作與子動作的區(qū)別在于頂層動作描述在誰與誰之間建立呼叫連接, 為發(fā)起呼叫請求的終端與所述業(yè)務(wù)服務(wù)器之間的動作,而子動作是為了完成該 終端的呼叫請求,所述業(yè)務(wù)服務(wù)器所經(jīng)過的一系列處理動作,包括代理轉(zhuǎn)發(fā), 重定向等。
通過CPL編寫CPL業(yè)務(wù)腳本時,CPL中描述的節(jié)點與CPL業(yè)務(wù)腳本中的 輔助信息以及呼叫處理動作的對應(yīng)關(guān)系具體為 一個呼叫處理的動作對應(yīng)于由 一組節(jié)點構(gòu)成的集合,這些節(jié)點用來描述所述業(yè)務(wù)服務(wù)器所進(jìn)行的各種判斷選 擇,以及相應(yīng)于判斷選擇完成的動作。其中,節(jié)點指對應(yīng)于所述業(yè)務(wù)服務(wù)器中 進(jìn)行的判斷選擇操作,用CPL編寫CPL業(yè)務(wù)腳本時設(shè)置的邏輯功能判斷點。 每個節(jié)點包含幾個參數(shù)和輸出,其中,參數(shù)描述了節(jié)點的精確的行為即設(shè)置一 些匹配條件,輔助信息與匹配條件相對應(yīng);輸出指在參數(shù)符合匹配條件的前提 下,節(jié)點將要做出的判斷以及釆取的動作。這些節(jié)點從一個根節(jié)點出發(fā),根節(jié) 點的輸出與后續(xù)的子節(jié)點連接,組成一種樹狀結(jié)構(gòu)。
當(dāng)要執(zhí)行一個呼叫處理動作時,首先從頂層的根節(jié)點開始執(zhí)行,即根據(jù)參 數(shù)的匹配條件所述業(yè)務(wù)服務(wù)器進(jìn)行判斷選擇,執(zhí)行相應(yīng)的頂層動作并輸出一個 處理結(jié)果,然后將該處理結(jié)果輸入根節(jié)點下屬的子節(jié)點,繼續(xù)執(zhí)行這種處理過 程直到某個子節(jié)點沒有輸出時為止。
綜上所述,現(xiàn)有技術(shù)為基于上述CPL處理業(yè)務(wù)的技術(shù),業(yè)務(wù)開發(fā)者編寫 好CPL業(yè)務(wù)腳本后,通過在終端與業(yè)務(wù)服務(wù)器之間傳送CPL業(yè)務(wù)腳本,在業(yè) 務(wù)服務(wù)器觸發(fā)并實現(xiàn)CPL業(yè)務(wù)腳本的機制,使業(yè)務(wù)服務(wù)器能對終端的呼叫請求 進(jìn)行控制和處理。
所采用的基于呼叫處理語言處理業(yè)務(wù)的系統(tǒng),包括相連的終端以及業(yè)務(wù)服 務(wù)器,業(yè)務(wù)服務(wù)器用于對獲取的CPL業(yè)務(wù)腳本進(jìn)行觸發(fā)并編譯,執(zhí)行CPL業(yè) 務(wù)腳本所描述的業(yè)務(wù)。如圖l所示,通過上述系統(tǒng),基于呼叫處理語言處理業(yè)務(wù)的方法包括以下
步驟
步驟101:業(yè)務(wù)開發(fā)者在終端建立業(yè)務(wù)開發(fā)環(huán)境,用CPL編寫CPL業(yè)務(wù)腳 本,終端將封裝CPL業(yè)務(wù)腳本的信息發(fā)送給業(yè)務(wù)服務(wù)器,并在業(yè)務(wù)服務(wù)器上部 署呼叫業(yè)務(wù);
步驟102:業(yè)務(wù)服務(wù)器觸發(fā)CPL業(yè)務(wù)腳本,執(zhí)行呼叫業(yè)務(wù)。 CPL定義了四種標(biāo)簽,用來編寫CPL業(yè)務(wù)腳本實現(xiàn)上述呼叫處理過程,包 括 判斷選擇標(biāo)簽,進(jìn)一步包括根據(jù)主叫或被叫的地址做出選擇的標(biāo)簽 (address-switch )、根據(jù)請求中的字符串做出選擇的標(biāo)簽(string-switch )、根據(jù) 語言做出選擇的標(biāo)簽(language-switch )、根據(jù)時間做出選擇的標(biāo)簽 (time-switch )、根據(jù)主叫的優(yōu)先級做出選擇的標(biāo)簽(priority-switch),上述標(biāo) 簽用來支持不同的選擇控制方式。
② 位置修改標(biāo)簽,從位置集合中添加或輸出記錄,包括鎖定位置記錄的標(biāo) 簽(location )、查找位置記錄的標(biāo)簽(lookup )、移去位置記錄的標(biāo)簽
(remove-location )。
③ 信令操作標(biāo)簽,引發(fā)底層信令協(xié)議的操作,進(jìn)一步包括引發(fā)底層協(xié)議的 轉(zhuǎn)發(fā)操作即向一個新的地址發(fā)送呼叫請求(proxy)、引發(fā)底層協(xié)議的重定向搡 作即通知主叫將呼叫重定向到一個新的地址(redirect )、以及引發(fā)底層協(xié)議的拒 絕操作即拒絕呼叫請求(reject )。
非信令操作標(biāo)簽引發(fā)與底層協(xié)議無關(guān)的操作,進(jìn)一步包括發(fā)送電子郵件 的搡作(mail)、記錄曰志的搡作(log)。
現(xiàn)有技術(shù)存在的缺點是僅通過業(yè)務(wù)服務(wù)器處理業(yè)務(wù)所花費的時間較長, 而且用CPL編寫的CPL業(yè)務(wù)腳本僅限于描述IP電話業(yè)務(wù)即業(yè)務(wù)服務(wù)器只能處 理呼叫業(yè)務(wù),不能處理定位、短信、彩信以及GIS等其他業(yè)務(wù),在用戶基于多 業(yè)務(wù)平臺發(fā)起業(yè)務(wù)請求的情況下,不能提供對多業(yè)務(wù)接入的支持,從而業(yè)務(wù)服 務(wù)器無法觸發(fā)并實現(xiàn)用戶的多種業(yè)務(wù)請求。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種基于擴展CPL的翻譯器,降低 了通過業(yè)務(wù)服務(wù)器處理業(yè)務(wù)所花費的時間,提高了業(yè)務(wù)服務(wù)器實現(xiàn)業(yè)務(wù)的效率。
本發(fā)明的又一目的在于提供一種基于擴展CPL翻譯器的處理多業(yè)務(wù)的系
統(tǒng),提供了對多業(yè)務(wù)接入的支持,使業(yè)務(wù)服務(wù)器能觸發(fā)并實現(xiàn)用戶的多種業(yè)務(wù)請求。
本發(fā)明的再一目的在于提供一種基于擴展CPL翻譯器的處理多業(yè)務(wù)的方 法,提供了對多業(yè)務(wù)接入的支持,使業(yè)務(wù)服務(wù)器能觸發(fā)并實現(xiàn)用戶的多種業(yè)務(wù) 請求。
為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的
一種基于擴展呼叫處理語言CPL的翻譯器,翻譯器包括設(shè)置在翻譯器中的 系統(tǒng)總控模塊,所述系統(tǒng)總控模塊用于對獲取的擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯, 并創(chuàng)建配置模塊和翻譯總控模塊。
其中,該翻譯器還包括由所述系統(tǒng)總控模塊創(chuàng)建的配置模塊以及翻譯總控
模塊,配置模塊和翻譯總控模塊分別與所述系統(tǒng)總控模塊相連,且配置模塊與 翻譯總控模塊相連;
所述配置模塊用于以配置文件的方式從所述擴展CPL業(yè)務(wù)腳本的信息中提 取配置信息,并獲取配置信息中的擴展CPL業(yè)務(wù)腳本的路徑、消息類存放路徑
以及業(yè)務(wù)能力構(gòu)件類存放路徑;
所述翻譯總控模塊用于根據(jù)所述配置信息對所述擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯。
其中,該翻譯器還包括依序相連的業(yè)務(wù)驗證模塊、業(yè)務(wù)翻譯模塊、文件生 成模塊以及編譯模塊,業(yè)務(wù)驗證模塊、業(yè)務(wù)翻譯模塊、文件生成模塊或編譯模 塊分別與所述翻譯總控模塊相連;
其中,業(yè)務(wù)驗證模塊,用于對獲取的擴展CPL業(yè)務(wù)腳本進(jìn)行詞法以及語法
業(yè)務(wù)翻譯模塊,用于根據(jù)所述配置信息以及所述擴展CPL業(yè)務(wù)腳本中業(yè)務(wù)
描述文件所描述的信息,將擴展CPL業(yè)務(wù)腳本編譯成可執(zhí)行的業(yè)務(wù)實例代碼;
文件生成模塊,用于根據(jù)所述業(yè)務(wù)實例代碼以及所述業(yè)務(wù)描述文件所描述
的信息,生成最終的業(yè)務(wù)實例文件;
編譯模塊,用于編譯所述業(yè)務(wù)實例文件,生成可部署在業(yè)務(wù)服務(wù)器上的代 碼壓縮包;
所述翻譯總控模塊用于具體以調(diào)度業(yè)務(wù)驗證模塊、業(yè)務(wù)翻譯模塊、文件生 成模塊以及編譯模塊的方式對所述擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯。
一種基于擴展CPL翻譯器的處理多業(yè)務(wù)的系統(tǒng),該系統(tǒng)包括終端、基于擴 展CPL的翻譯器以及業(yè)務(wù)服務(wù)器,終端通過基于擴展CPL的翻譯器與業(yè)務(wù)服 務(wù)器相連;
所述基于擴展CPL的翻譯器用于獲取從所述終端發(fā)送的擴展CPL業(yè)務(wù)腳 本,對所述擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯,翻譯成底層代碼并對其進(jìn)行編譯,進(jìn) 行批處理生成底層代碼壓縮包后轉(zhuǎn)發(fā)給所述業(yè)務(wù)服務(wù)器;所述業(yè)務(wù)服務(wù)器用于 執(zhí)行所述底層代碼,并實現(xiàn)與所述擴展CPL業(yè)務(wù)腳本相應(yīng)的業(yè)務(wù)。
一種基于擴展CPL翻譯器的處理多業(yè)務(wù)的方法,包括以下步驟
A、 在終端建立業(yè)務(wù)開發(fā)環(huán)境,根據(jù)預(yù)設(shè)置的擴展CPL編寫擴展CPL業(yè)務(wù) 腳本;
B、 終端將封裝所述擴展CPL業(yè)務(wù)腳本的信息發(fā)送給基于擴展CPL的翻譯 器,基于擴展CPL的翻譯器翻譯擴展CPL業(yè)務(wù)腳本并轉(zhuǎn)換成底層代碼;
C、 所述基于擴展CPL的翻譯器將所述底層代碼發(fā)送給業(yè)務(wù)服務(wù)器,并在 業(yè)務(wù)服務(wù)器上部署業(yè)務(wù),業(yè)務(wù)服務(wù)器執(zhí)行底層代碼,并實現(xiàn)與所述擴展CPL業(yè) 務(wù)腳本相應(yīng)的所述業(yè)務(wù)。
其中,步驟A中所述預(yù)設(shè)置擴展CPL具體為以增加消息標(biāo)簽和增加多種 業(yè)務(wù)能力構(gòu)件標(biāo)簽的擴展方式擴展所述呼叫處理語言CPL。 其中,步驟B具體包括
Bl、所述基于擴展CPL的翻譯器通過系統(tǒng)總控模塊創(chuàng)建配置模塊和翻譯總
控模塊,終端將封裝擴展CPL業(yè)務(wù)腳本的信息發(fā)送給配置模塊,配置模塊從所 述信息中提取配置信息,所述配置信息包括所述擴展CPL業(yè)務(wù)腳本的路徑、相 應(yīng)于所述消息標(biāo)簽的消息類存放路徑、以及相應(yīng)于所述業(yè)務(wù)能力構(gòu)件標(biāo)簽的業(yè)
務(wù)能力構(gòu)件類存放路徑;
B2、所述配置模塊將所述配置信息和所述擴展CPL業(yè)務(wù)腳本發(fā)送給所述翻 譯總控模塊,翻譯總控模塊根據(jù)該配置信息對所述擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯。
其中,步驟B2中所述翻譯總控模塊對所述擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯為 以調(diào)度業(yè)務(wù)驗證模塊、業(yè)務(wù)翻譯模塊、文件生成模塊以及編譯模塊的方式對所 述擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯。
其中,步驟B2中對所述擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯具體包括
B21、所述業(yè)務(wù)驗證模塊對獲取的所述擴展CPL業(yè)務(wù)腳本進(jìn)行詞法及語法 校驗;
B22、所述業(yè)務(wù)翻譯模塊根據(jù)所述配置信息以及所述擴展CPL業(yè)務(wù)腳本中 業(yè)務(wù)描述文件所描述的信息,將所述擴展CPL業(yè)務(wù)腳本編譯成可執(zhí)行的業(yè)務(wù)實 例代碼;
B23、所述文件生成模塊根據(jù)所述業(yè)務(wù)翻譯模塊生成的所述業(yè)務(wù)實例代碼 以及所述業(yè)務(wù)描述文件所描述的信息,生成最終的業(yè)務(wù)實例文件;
B24、所述編譯模塊編譯所述業(yè)務(wù)實例文件,生成可部署在所述業(yè)務(wù)服務(wù) 器上的代碼壓縮包。
其中,所述步驟B22具體為
在編譯所述擴展CPL業(yè)務(wù)腳本時,所述業(yè)務(wù)翻譯模塊先根據(jù)擴展CPL業(yè) 務(wù)腳本中所述標(biāo)簽的執(zhí)行順序生成與其對應(yīng)的標(biāo)簽節(jié)點樹,然后以前序遍歷方 式查找標(biāo)簽節(jié)點樹上的標(biāo)簽節(jié)點,根據(jù)查找的順序以及預(yù)先設(shè)置的標(biāo)簽轉(zhuǎn)換類 (converter)判斷當(dāng)前標(biāo)簽節(jié)點是否與預(yù)先設(shè)置的converter對應(yīng),如果是,則 調(diào)用當(dāng)前標(biāo)簽節(jié)點所對應(yīng)的converter進(jìn)行處理并轉(zhuǎn)換成所述底層代碼,并按照 査找的順序?qū)?dāng)前生成的底層代碼存儲在預(yù)先設(shè)置的存儲區(qū);如果否,則返回 異常信息后,繼續(xù)執(zhí)行所述查找以及所述判斷搡作;
其中,所述業(yè)務(wù)翻譯模塊生成標(biāo)簽節(jié)點樹具體為以用于實現(xiàn)簡單應(yīng)用程 序編程接口 SAX解析技術(shù)的jdom方式生成與所述標(biāo)簽的執(zhí)行順序?qū)?yīng)的標(biāo)簽
節(jié)點樹;
所述預(yù)先設(shè)置的存儲區(qū)為存儲作用域的堆棧;
存儲所述底層代碼具體為以壓棧的方式,將當(dāng)前生成的底層代碼存儲在
該底層代碼應(yīng)插入的所述存儲作用域的堆棧;相應(yīng)地,以出棧的方式調(diào)用該底
層代碼。
采用本發(fā)明基于擴展CPL的翻譯器對從終端獲取的擴展CPL業(yè)務(wù)腳本進(jìn) 行翻譯,翻譯成底層代碼并編譯,進(jìn)行批處理生成底層代碼壓縮包后,轉(zhuǎn)發(fā)給 業(yè)務(wù)服務(wù)器,降低了通過業(yè)務(wù)服務(wù)器處理業(yè)務(wù)的時間,提高了業(yè)務(wù)服務(wù)器實現(xiàn) 業(yè)務(wù)的效率;
在現(xiàn)有系統(tǒng)的終端與業(yè)務(wù)服務(wù)器之間增加基于擴展CPL的翻譯器后構(gòu)成本 發(fā)明的系統(tǒng),在該系統(tǒng)上采用本發(fā)明的方法,通過增加消息標(biāo)簽對CPL進(jìn)行語 法上的擴展,以及相應(yīng)地增加包括定位、短信、彩信以及GIS等多種業(yè)務(wù)的能 力構(gòu)件標(biāo)簽,對CPL進(jìn)行業(yè)務(wù)能力上的擴展來增加多種業(yè)務(wù)類型,并由此基于 擴展CPL編寫的擴展CPL業(yè)務(wù)腳本提供對多業(yè)務(wù)接入的支持;由于擴展CPL 業(yè)務(wù)腳本不同于用于實現(xiàn)業(yè)務(wù)的底層代碼,屏蔽了底層代碼的具體實現(xiàn)細(xì)節(jié), 對業(yè)務(wù)進(jìn)行更抽象的描述,因此相應(yīng)地需要在終端與業(yè)務(wù)服務(wù)器之間增加基于 擴展CPL的翻譯器,采用基于擴展CPL的翻譯器翻譯擴展CPL業(yè)務(wù)腳本并轉(zhuǎn) 換成底層代碼。
綜上所述,本發(fā)明采用基于擴展CPL的翻譯器以及基于擴展CPL翻譯器 的處理多業(yè)務(wù)的系統(tǒng)和方法,首先基于擴展CPL編寫擴展CPL業(yè)務(wù)腳本,保 證多業(yè)務(wù)的接入,然后釆用基于擴展CPL的翻譯器對擴展CPL業(yè)務(wù)腳本進(jìn)行 翻譯,使業(yè)務(wù)服務(wù)器能觸發(fā)并實現(xiàn)用戶的多種業(yè)務(wù)請求。同時基于擴展CPL業(yè) 務(wù)腳本屏蔽底層代碼的具體實現(xiàn)細(xì)節(jié)對業(yè)務(wù)進(jìn)行抽象描述,提高了業(yè)務(wù)開發(fā)的 抽象層次,也就是說業(yè)務(wù)開發(fā)者無需專注于編寫底層代碼,在不需要掌握深厚 電信知識和具有編程能力的情況下,也可根據(jù)需要抽象地描述多種業(yè)務(wù),方便
了業(yè)務(wù)開發(fā)者創(chuàng)建和配置業(yè)務(wù),提高開發(fā)業(yè)務(wù)的效率。
圖1為現(xiàn)有技術(shù)處理呼叫業(yè)務(wù)的實現(xiàn)流程圖2為本發(fā)明基于擴展CPL的翻譯器的原理構(gòu)成示意圖3為本發(fā)明基于擴展CPL的翻譯器的構(gòu)成示意圖4為本發(fā)明處理多業(yè)務(wù)方法的原理實現(xiàn)流程圖5為本發(fā)明通過基于擴展CPL翻譯器處理多業(yè)務(wù)方法的實現(xiàn)流程圖6為本發(fā)明處理多業(yè)務(wù)方法中對擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯的實現(xiàn)流程
圖7為本發(fā)明處理多業(yè)務(wù)方法中一棵標(biāo)簽節(jié)點樹的示意圖。
具體實施例方式
本發(fā)明的核心思想為在基于擴展CPL的翻譯器中設(shè)置系統(tǒng)總控模塊,對 從終端獲取的擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯,翻譯成底層代碼并編譯,進(jìn)行批處 理生成底層代碼壓縮包后,轉(zhuǎn)發(fā)給業(yè)務(wù)服務(wù)器;在現(xiàn)有系統(tǒng)的終端與業(yè)務(wù)服務(wù) 器之間增加所述基于擴展CPL的翻譯器,即終端通過基于擴展CPL的翻譯器 與業(yè)務(wù)服務(wù)器相連后構(gòu)成本發(fā)明的系統(tǒng),在本發(fā)明的系統(tǒng)上采用本發(fā)明的方法, 通過增加消息標(biāo)簽對CPL進(jìn)行語法上的擴展,以及相應(yīng)增加包括定位、短信、 彩信以及GIS等多種業(yè)務(wù)的能力構(gòu)件標(biāo)簽,對CPL進(jìn)行業(yè)務(wù)能力上的擴展來增 加多種業(yè)務(wù)類型,由此基于擴展CPL編寫的擴展CPL業(yè)務(wù)腳本提供了對多業(yè) 務(wù)接入的支持;相應(yīng)的,需要在終端與業(yè)務(wù)服務(wù)器之間增加基于擴展CPL的翻 譯器,釆用基于擴展CPL的翻譯器對所述擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯,即將 擴展CPL業(yè)務(wù)腳本轉(zhuǎn)換成底層代碼,使業(yè)務(wù)服務(wù)器能觸發(fā)并實現(xiàn)用戶的多種業(yè) 務(wù)請求。
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,以下舉實施例并參照 附圖,對本發(fā)明進(jìn)一步詳細(xì)說明。
如圖2所示,本發(fā)明基于擴展CPL的翻譯器包括設(shè)置在基于擴展CPL 的翻譯器l中的系統(tǒng)總控模塊ll,系統(tǒng)總控模塊11用于對獲取的擴展CPL業(yè) 務(wù)腳本進(jìn)行翻譯后轉(zhuǎn)換成底層代碼,并創(chuàng)建配置模塊和翻譯總控模塊。其中, 擴展CPL業(yè)務(wù)腳本的生成方式為通過業(yè)務(wù)開發(fā)者在終端建立業(yè)務(wù)開發(fā)環(huán)境, 預(yù)設(shè)置以增加消息標(biāo)簽以及增加多種業(yè)務(wù)能力構(gòu)件標(biāo)簽的擴展方式擴展CPL; 根據(jù)預(yù)設(shè)置的擴展CPL,基于擴展CPL編寫擴展CPL業(yè)務(wù)腳本。
此時,基于擴展CPL的翻譯器對獲取的擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯的過 程為業(yè)務(wù)開發(fā)者先在終端建立業(yè)務(wù)開發(fā)環(huán)境,根據(jù)預(yù)設(shè)置的擴展CPL編寫擴 展CPL業(yè)務(wù)腳本;終端再將封裝擴展CPL業(yè)務(wù)腳本的信息發(fā)送給基于擴展CPL 的翻譯器,基于擴展CPL的翻譯器翻譯擴展CPL業(yè)務(wù)腳本并轉(zhuǎn)換成底層代碼; 然后,基于擴展CPL的翻譯器將底層代碼發(fā)送給業(yè)務(wù)服務(wù)器,并在業(yè)務(wù)服務(wù)器 上部署業(yè)務(wù),業(yè)務(wù)服務(wù)器執(zhí)行底層代碼實現(xiàn)與其相應(yīng)的所述業(yè)務(wù)。
基于圖2的原理,如圖3所示,基于擴展CPL的翻譯器1進(jìn)一步包括由 系統(tǒng)總控模塊11創(chuàng)建的配置模塊111以及翻譯總控模塊112,配置模塊111和 翻譯總控模塊112分別與系統(tǒng)總控模塊11相連,且配置模塊111與翻譯總控模 塊112相連;
其中,配置模塊111用于以配置文件的方式從所述擴展CPL業(yè)務(wù)腳本的信 息中提取配置信息,并獲取配置信息中的擴展CPL業(yè)務(wù)腳本的路徑、消息類存 放路徑以及業(yè)務(wù)能力構(gòu)件類存放路徑;
翻譯總控模塊112用于根據(jù)所述配置信息對所述擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯。
此時,基于擴展CPL的翻譯器對獲取的擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯的過 程為業(yè)務(wù)開發(fā)者先在終端建立業(yè)務(wù)開發(fā)環(huán)境,根據(jù)預(yù)設(shè)置的擴展CPL基于擴 展CPL編寫擴展CPL業(yè)務(wù)腳本;之后,包括兩個步驟
al、基于擴展CPL的翻譯器通過系統(tǒng)總控模塊創(chuàng)建配置模塊和翻譯總控模 塊,終端將封裝擴展CPL業(yè)務(wù)腳本的信息發(fā)送給配置模塊,配置模塊從所述信 息中提取配置信息供翻譯總控模塊使用,所述配置信息包括所述擴展CPL業(yè)務(wù)
腳本的路徑、相應(yīng)于所述消息標(biāo)簽的消息類存放路徑以及相應(yīng)于所述業(yè)務(wù)能力 構(gòu)件標(biāo)簽的業(yè)務(wù)能力構(gòu)件類存放路徑;
bl、配置模塊將所述配置信息以及所述擴展CPL業(yè)務(wù)腳本發(fā)送給翻譯總控 模塊,翻譯總控模塊根據(jù)配置信息對擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯。
步驟al和bl完成后,基于擴展CPL的翻譯器將底層代碼發(fā)送給業(yè)務(wù)服務(wù) 器,并在業(yè)務(wù)服務(wù)器上部署業(yè)務(wù),業(yè)務(wù)服務(wù)器執(zhí)行底層代碼,并實現(xiàn)與與所述 擴展CPL業(yè)務(wù)腳本相應(yīng)的業(yè)務(wù)。
其中,基于擴展CPL的翻譯器1還包括依序相連的業(yè)務(wù)驗證模塊1121、 業(yè)務(wù)翻譯模塊1122、文件生成模塊1123以及編譯模塊1124,業(yè)務(wù)驗證模塊1121、 業(yè)務(wù)翻譯模塊U22、文件生成模塊1123或編譯模塊1124分別與翻譯總控模塊 112相連。
翻譯總控模塊112用于具體以調(diào)度業(yè)務(wù)驗證模塊1121、業(yè)務(wù)翻譯模塊1122、 文件生成模塊1123以及編譯模塊1124的方式對所述擴展CPL業(yè)務(wù)腳本進(jìn)行翻 譯;業(yè)務(wù)驗證模塊1121用于對獲取的擴展CPL業(yè)務(wù)腳本進(jìn)行詞法以及語法校 驗;業(yè)務(wù)翻譯模塊1122用于根據(jù)所述配置信息以及所述擴展CPL業(yè)務(wù)腳本中 業(yè)務(wù)描述文件所描述的信息,將擴展CPL業(yè)務(wù)腳本編譯成可執(zhí)行的業(yè)務(wù)實例代 碼;文件生成模塊1123用于根據(jù)所述業(yè)務(wù)實例代碼以及所述業(yè)務(wù)描述文件所描 述的信息,生成最終的業(yè)務(wù)實例文件;編譯模塊1124用于編譯所述業(yè)務(wù)實例文 件,生成可部署在所述業(yè)務(wù)服務(wù)器上的代碼壓縮包。
此種情況下,基于擴展CPL的翻譯器對獲取的擴展CPL業(yè)務(wù)腳本進(jìn)行翻 譯的過程為業(yè)務(wù)開發(fā)者先在終端建立業(yè)務(wù)開發(fā)環(huán)境,根據(jù)預(yù)設(shè)置的擴展CPL 基于擴展CPL編寫擴展CPL業(yè)務(wù)腳本;之后,包括五個具體步驟
a2、基于擴展CPL的翻譯器通過系統(tǒng)總控模塊創(chuàng)建配置模塊和翻譯總控模 塊,終端將封裝擴展CPL業(yè)務(wù)腳本的信息發(fā)送給配置模塊,配置模塊從所述信 息中提取配置信息供翻譯總控模塊使用,所述配置信息包括所述擴展CPL業(yè)務(wù) 腳本的路徑、相應(yīng)于所述消息標(biāo)簽的消息類存放路徑以及相應(yīng)于所述業(yè)務(wù)能力 構(gòu)件標(biāo)簽的業(yè)務(wù)能力構(gòu)件類存放路徑;
b2、業(yè)務(wù)驗證模塊對獲取的擴展CPL業(yè)務(wù)腳本進(jìn)行詞法以及語法校驗,比
如校驗是否缺括號;
c2、作為進(jìn)行翻譯核心模塊的業(yè)務(wù)翻譯模塊根據(jù)所述配置信息以及所述擴 展CPL業(yè)務(wù)腳本中業(yè)務(wù)描述文件所描述的信息,將擴展CPL業(yè)務(wù)腳本編譯成
可執(zhí)行的業(yè)務(wù)實例代碼;
d2、文件生成模塊根據(jù)業(yè)務(wù)翻譯模塊生成的業(yè)務(wù)實例代碼以及所述業(yè)務(wù)描
述文件所描述的信息,生成最終的業(yè)務(wù)實例文件;
e2、編譯模塊編譯業(yè)務(wù)實例文件,生成可部署在業(yè)務(wù)服務(wù)器上的代碼壓縮包。
步驟a2 e2執(zhí)行完畢后,基于擴展CPL的翻譯器將底層代碼發(fā)送給業(yè)務(wù)服 務(wù)器,并在業(yè)務(wù)服務(wù)器上部署業(yè)務(wù),業(yè)務(wù)服務(wù)器執(zhí)行底層代碼實現(xiàn)與其相應(yīng)的 業(yè)務(wù)。
其中,步驟c2具體為
在編譯所述擴展CPL業(yè)務(wù)腳本時,首先根據(jù)擴展CPL業(yè)務(wù)腳本中所述標(biāo) 簽的執(zhí)行順序生成與其對應(yīng)的標(biāo)簽節(jié)點樹,標(biāo)簽節(jié)點樹上的標(biāo)簽節(jié)點為用于將 擴展CPL業(yè)務(wù)腳本中的標(biāo)簽翻譯成底層代碼的節(jié)點,然后以前序遍歷方式查找 標(biāo)簽節(jié)點樹上的標(biāo)簽節(jié)點,根據(jù)查找的順序以及預(yù)先設(shè)置的converter判斷當(dāng)前 標(biāo)簽節(jié)點是否與預(yù)先設(shè)置的converter對應(yīng),如果是,則調(diào)用當(dāng)前標(biāo)簽節(jié)點所對 應(yīng)的converter進(jìn)行處理并轉(zhuǎn)換成所述底層代碼,比如當(dāng)標(biāo)簽節(jié)點為業(yè)務(wù)能力構(gòu) 件標(biāo)簽時,則調(diào)用與其所對應(yīng)的converter,即業(yè)務(wù)能力構(gòu)件類進(jìn)行處理,并按 照查找的順序?qū)?dāng)前生成的底層代碼存儲在預(yù)先設(shè)置的存儲區(qū);否則,返回異 常信息后繼續(xù)執(zhí)行上述査找及判斷搡作。
本發(fā)明基于擴展CPL翻譯器的處理多業(yè)務(wù)的系統(tǒng),包括終端、基于擴展 CPL的翻譯器以及業(yè)務(wù)服務(wù)器,終端通過基于擴展CPL的翻譯器與業(yè)務(wù)服務(wù)器 相連;基于擴展CPL的翻譯器用于獲取從所述終端發(fā)送的擴展CPL業(yè)務(wù)腳本, 對該擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯,翻譯成底層代碼并對其進(jìn)行編譯,進(jìn)行批處 理生成底層代碼壓縮包后轉(zhuǎn)發(fā)給所述業(yè)務(wù)服務(wù)器;所述業(yè)務(wù)服務(wù)器用于執(zhí)行所
述底層代碼實現(xiàn)與其相應(yīng)的業(yè)務(wù)。
如圖4所示,基于擴展CPL翻譯器的處理多業(yè)務(wù)的方法包括以下步驟
步驟201、業(yè)務(wù)開發(fā)者在終端建立業(yè)務(wù)開發(fā)環(huán)境,根據(jù)預(yù)設(shè)置的擴展CPL 基于擴展CPL編寫擴展CPL業(yè)務(wù)腳本;
步驟202、終端將封裝擴展CPL業(yè)務(wù)腳本的信息發(fā)送給基于擴展CPL的翻 譯器,基于擴展CPL的翻譯器翻譯擴展CPL業(yè)務(wù)腳本并轉(zhuǎn)換成底層代碼;
步驟203、基于擴展CPL的翻譯器將底層代碼發(fā)送給業(yè)務(wù)服務(wù)器,并在業(yè) 務(wù)服務(wù)器上部署業(yè)務(wù),業(yè)務(wù)服務(wù)器執(zhí)行底層代碼,并實現(xiàn)與所述擴展CPL業(yè)務(wù) 腳本相應(yīng)的所述業(yè)務(wù)。
其中,所述步驟201中預(yù)設(shè)置擴展CPL具體為以增加消息標(biāo)簽和增加多 種業(yè)務(wù)能力構(gòu)件標(biāo)簽的擴展方式擴展CPL。
具體來說,增加消息標(biāo)簽實現(xiàn)對CPL進(jìn)行本身語言機制上的擴展,增加多 種業(yè)務(wù)能力構(gòu)件標(biāo)簽實現(xiàn)對CPL進(jìn)行附加功能即業(yè)務(wù)能力上的擴展。
對CPL進(jìn)行本身語言機制上的擴展主要基于現(xiàn)有的CPL語法增加支持多 個業(yè)務(wù)的接口,用于實現(xiàn)對多個業(yè)務(wù)接入的支持,包括以下標(biāo)簽
增加上報事件的標(biāo)簽;
增加變量聲明的標(biāo)簽,變量類型可以包括局部變量、全局變量、靜態(tài)變量;
對變量賦值的標(biāo)簽;
增加對傳入?yún)?shù)的聲明的標(biāo)簽;
增加判斷選擇類型的標(biāo)簽(switch),如整型數(shù)據(jù)的switch; 增加對數(shù)據(jù)庫的訪問標(biāo)簽;
對CPL進(jìn)行業(yè)務(wù)能力上的擴展為相應(yīng)于業(yè)務(wù)以增加業(yè)務(wù)能力構(gòu)件標(biāo)簽的方 式進(jìn)行擴展,包括用于實現(xiàn)定位、發(fā)送短信、發(fā)送彩信以及GIS等業(yè)務(wù)的業(yè)務(wù) 能力構(gòu)件標(biāo)簽。
基于上述對CPL進(jìn)行本身語言機制上的擴展以及對CPL進(jìn)行業(yè)務(wù)能力上 的擴展方式,具體擴展的五種標(biāo)簽如下
①增加消息判斷選擇標(biāo)簽(message-switch), message-switch為判斷選擇類
型(switchType )。
由于接入多種業(yè)務(wù),因此擴展CPL業(yè)務(wù)腳本執(zhí)行到message-switch時阻塞, 需等待外界消息上報,根據(jù)獲取外界消息中下級標(biāo)簽中聲明的消息類型在 message-switch進(jìn)行判斷,即根據(jù)相應(yīng)的消息類型以及業(yè)務(wù)類型信息進(jìn)行分支處 理,選擇并執(zhí)行相應(yīng)業(yè)務(wù)。 message-switch格式如下
<xs:element name="message-switch" type="MessageSwitchType" substitutionGroupy switch'V〉
② 相應(yīng)的,增加消息類型標(biāo)簽(messageType)格式如下 <xs:complexTyp6 nam6=''M6SsagcType">
<xs:group ref="Node'V>
<xs:attribute name="is" type="xs:string" use="required"/> </xs:complexType>
③ 相應(yīng)的,增加消息判斷選擇類型標(biāo)簽(messageSwitchType)格式如下 <xs:complexType name="MessageSwitchType">
<xs: complexContent〉
<xs:extension base="SwitchType"> <xs:scqucnc6〉
<xs:element name="message" type="MessageType" minOccurs="0" maxOccurs="unbounded"/> <xs:sequence minOccurs="0">
<xs:element name="not-present" type="NotPresentAction7〉 <xs:element name="message" type="MessageType" minOccurs="0" maxOccurs="unbounded'V〉 </xs:scquence〉
<xs:element name="otherwise" type="OtherwiseAction" minOccurs=" 0 "/>
</xs:S6qucncc〉 </xs:extension>
</xs: complexC ontent〉 </xs:complexType〉 上述message-switch以及相應(yīng)增力口的messageType和messageSwitchType, 用來定義消息標(biāo)簽的屬性和子元素。messageType禾卩messageSwitchType是為 Message和MessageSwitch標(biāo)簽提供的格式模板(Schema), schema —般用來定 義XML文件的格式、定義元素的從屬關(guān)系、約東條件等等。 ④增加各種消息標(biāo)簽。
這些消息標(biāo)簽為messageType,在deploy—success\iispsce\msgcfg文件夾下有
對消息標(biāo)簽的詳細(xì)定義,格式如下
msgname=CalledPartyAnswerMsg package=edu.bupt.skl.cngi.service.common.msg 其中msgname為消息名,package為消息類所在包名。
增加業(yè)務(wù)能力構(gòu)件標(biāo)簽的聲明進(jìn)而增加業(yè)務(wù)能力構(gòu)件標(biāo)簽。 業(yè)務(wù)能力構(gòu)件標(biāo)簽的聲明中包括構(gòu)件的名稱、參數(shù)的名稱和類型、是否有 返回值、返回值的名稱、是否拋出異常、對構(gòu)件的調(diào)用是同步還是異步。增加 的業(yè)務(wù)能力構(gòu)件標(biāo)簽包括用于實現(xiàn)定位、發(fā)送短信、發(fā)送彩信以及GIS等業(yè)務(wù) 的業(yè)務(wù)能力構(gòu)件標(biāo)簽。
實施例一
短信定位業(yè)務(wù)指根據(jù)用戶發(fā)送的手機號碼,調(diào)用相應(yīng)的業(yè)務(wù)能力,將包括 手機所在地的經(jīng)度以及緯度的定位信息以短信或彩E的方式返回到用戶終端, 所使用的業(yè)務(wù)能力構(gòu)件為發(fā)送短信(sendSMS)、發(fā)送彩信(sendMulMail )、 定位(getLocation)以及創(chuàng)建地圖 (creatMap)。
基于圖4的原理,當(dāng)需部署在業(yè)務(wù)服務(wù)器上的業(yè)務(wù)為短信定位業(yè)務(wù)時,本 實施例中對步驟201,即業(yè)務(wù)開發(fā)者首先需要在終端建立業(yè)務(wù)開發(fā)環(huán)境,然后 根據(jù)預(yù)設(shè)置的擴展CPL,基于擴展CPL以及業(yè)務(wù)邏輯編寫擴展CPL業(yè)務(wù)腳本 的實現(xiàn)具體包括兩個步驟
首先在終端建立業(yè)務(wù)生成環(huán)境的過程具體為
創(chuàng)建一個文件夾,名稱為CPL_***,其中***為年月日比如20060418,以 下的<根目錄〉均為此格式即盤符/CPL—***;先將iispsce文件夾拷貝到該根目 錄下;然后將iispsce文件夾下iisp.cfg內(nèi)的所有路徑改為自己機器對應(yīng)iispsce 文件夾的路徑;再將smslocation文件夾拷貝至盤符/CPL—***下,將文件夾名 smslocation改為自己定義的業(yè)務(wù)名稱,進(jìn)入servicescript文件夾下,將此xml 文件改為盒文件夾名稱相同的.xml文件,更改對應(yīng)的service.cfg中的配置路徑。
基于上述在終端建立業(yè)務(wù)生成環(huán)境的過程,其中對應(yīng)所述iispsce文件夾的 六個路徑如下
包括schema文件及參數(shù)表文件的see公用構(gòu)件配置文件的存放路徑即 sceapicfgfilepath二〈根目錄〉WiispsceWapicfgW;
see公用消息配置文件的存放路徑即scemsgcfgfilepath=<根目錄 >\\iispsce\\msgcfg\\;
log's configuration file 的存放路徑即 logcfgfilepath=<根目錄 >\\iispsce\\logcfg\\log—oam.xml;
編譯EJB所需要的庫文件的存放路徑即ejblib=<根目錄 >\\iispsce\\lib\\weblogic.jar; <根目錄〉WiispsceWlibWwebservices.jar;
翻譯所需要的公共庫文件的存放路徑即scelib=<根目錄 〉\\iispsce\\lib\\comlib.j ar;
業(yè)務(wù)bean包含的MANIFEST.MF文件路徑即servicemanifest二〈才艮目錄 >\\iispsce\\manifest\\service\\MANIFEST.MF。
基于上述在終端建立業(yè)務(wù)生成環(huán)境的過程,其中首先將smslocation文件夾 拷貝至盤符/CPLJ^下,然后更改對應(yīng)的service.cfg中的配置路徑中包括
擴展CPL業(yè)務(wù)腳本路徑,即
servicescriptpath二〈根目錄〉WsmslocationWservicescriptW;
擴展CPL業(yè)務(wù)腳本名稱servicescriptname=smslocation.xml;
工程的構(gòu)件配置文件的存放路徑,即
projectapicfgfilepath二〈根目錄〉WsmslocationWapicfgW;
工程的msg的配置文件的存放路徑,即
projectmsgcfgfilepath二〈根目錄〉WsmslocationWmsgcfgW;
總的輸出路徑即生成jar包、ear包的目錄在。/。outputpathy。Wdeployment outputpath二〈根目錄〉WsmslocationWoutputW。
在終端建立業(yè)務(wù)生成環(huán)境后,打開擴展CPL業(yè)務(wù)腳本.xml文件,進(jìn)行擴展 CPL業(yè)務(wù)腳本的編寫包括八個具體步驟
a3、在XML文檔開頭進(jìn)行說明;
b3、定義命名空間以及包括本實施例中使用到的所有標(biāo)簽所在的類庫,本 實施例實現(xiàn)短信定位業(yè)務(wù)中使用了 cpl標(biāo)簽轉(zhuǎn)換類、定位標(biāo)簽轉(zhuǎn)換類(lbs)、短 信標(biāo)簽轉(zhuǎn)換類(sms)、彩信標(biāo)簽轉(zhuǎn)換類(mulmail),并定義引用類對應(yīng)schema 所在的位置;
c3、根據(jù)業(yè)務(wù)邏輯定義標(biāo)簽的具體內(nèi)容,首先由"notifySmsReceptionMsg" 中讀取對應(yīng)的短信定位業(yè)務(wù)的名稱即執(zhí)行頂層動作,然后每當(dāng)執(zhí)行到標(biāo)簽所代 表每個具體業(yè)務(wù)即子動作時,則跳轉(zhuǎn)到包括該標(biāo)簽具體內(nèi)容的位置繼續(xù)執(zhí)行。 也就是說對獲取的多個業(yè)務(wù),根據(jù)每個標(biāo)簽對應(yīng)的具體業(yè)務(wù)進(jìn)行判斷選擇執(zhí)行 分支處理,比如執(zhí)行到"getLocationSub"標(biāo)簽時,根據(jù)"getLocationSub"所代表的 定位子動作轉(zhuǎn)到相應(yīng)的包括定位標(biāo)簽具體內(nèi)容的位置繼續(xù)執(zhí)行;
d3、定義的業(yè)務(wù)能力構(gòu)件標(biāo)簽"getLocationSub"用來實現(xiàn)定位業(yè)務(wù),此時將 調(diào)用業(yè)務(wù)能力構(gòu)件getLocationAPI, getLocationAPI所填充的輸入?yún)?shù)的書寫必 須要和schema以及API類中定義的相一致;
e3、需定義業(yè)務(wù)能力構(gòu)件標(biāo)簽"sendSMS—SuccessSub "用來實現(xiàn)發(fā)送短信成 功的子動作,此時將調(diào)用業(yè)務(wù)能力構(gòu)件sendSMSAPI, sendSMSAPI所填充的 輸入?yún)?shù)的書寫必須要和schema以及API類中定義的相 一致;
f3、定義業(yè)務(wù)能力構(gòu)件標(biāo)簽"sendSMS—FailureSub "用來實現(xiàn)發(fā)送短信失敗 的子動作,此時將調(diào)用業(yè)務(wù)能力構(gòu)件sendSMSAPI, sendSMSAPI所填充的輸入 參數(shù)的書寫必須要和schema以及API類中定義的相一致;
g3、定義業(yè)務(wù)能力構(gòu)件標(biāo)簽"sendSMS—createMapSub"用來實現(xiàn)在發(fā)送短信
時創(chuàng)建地圖的子動作,此時將調(diào)用業(yè)務(wù)能力構(gòu)件createMapAPI, createMapAPI 所填充的輸入?yún)?shù)的書寫必須要和schema以及API類中定義的相一致;
h3、定義業(yè)務(wù)能力構(gòu)件標(biāo)簽"sendMMSSub "用來實現(xiàn)發(fā)送彩信的子動作, 此時將調(diào)用業(yè)務(wù)能力構(gòu)件createMapAPI, createMapAPI所填充的輸入?yún)?shù)的書 寫必須要和schema以及API類中定義的相一致,至此,擴展CPL業(yè)務(wù)腳本編 寫完畢。
其中,實現(xiàn)步驟a3,即在XML文檔開頭進(jìn)行說明具體為 < xml version="1.0" encoding="UTF-8" > <!— edited w他XMLSPY —>
上述代碼即為輔助信息。
其中,實現(xiàn)步驟b3,即定義命名空間,定義包括本實施例使用到的所有標(biāo)簽 所在的類庫以及定義引用類對應(yīng)schema所在的位置具體為 <cpl xmlns:xsi=http:〃www. w3.org/2001/XMLSchema-instance
xmlns="urn:ietf:params:xml:ns:cpr xmlns:lbs="edu:bupt:skl:cngi:service:sce:api:lbs" xmlns: sms=" edu:bupt: ski: cngi: service: see: api: sms" xmlns:mulmail="edu:bupt:skl:cngi:service:sce:api:mulmail" xsi: schemaLocation="um: ietf:params :xml :ns: cpl
file:〃C:/cpl/iispsce/apischema/cpl.xsd edu:bupt:skl:cngi:service:sce:api:lbs file:〃C:/cpl/iispsce/apischema/GetLocation.xsd edu :bupt: ski: cngi: service: see: api: sms file :〃C :/cpl/iispsce/apischema/S endSMS .xsd edu:bupt: ski: cngi: service: see: api: mulmail file:〃C:/cpl/iispsce/apischema/SendMulMail.xsd "> 上述代碼用來描述標(biāo)簽的位置,例如
file:〃C:/cpl/iispsce/apischema/cpl.xsd edu:bupt:skl:cngi:service:sce:api:lbs 凈旨 定位業(yè)務(wù)標(biāo)簽的位置;
file:〃C:/cpl/iispsce/apischema/GetLocation.xsd edu:bupt:skl:cngi:service:sce:api:sms指
短信業(yè)務(wù)標(biāo)簽的位置。
其中實現(xiàn)步驟c3,即由"notifySmsRec印tionMsg"中讀取對應(yīng)的業(yè)務(wù)名稱, 根據(jù)"getLocationSub"轉(zhuǎn)到相應(yīng)的標(biāo)簽具體為 <incoming〉 <message-switch>
<message is="notifySmsReceptionMsg"〉
<sub ref="getLocationSub" /> </mess£ige> </message-switch>
</incoming>
其中實現(xiàn)步驟d3,即定義的業(yè)務(wù)能力構(gòu)件標(biāo)簽"getLocationSub"所包括的具
體內(nèi)容為
<subaction id="getLocationSub"> <lbs:getLocation
endUser="$(StringXserviceContext.getAttribute("sendAddress"))" accuracy="Medium"
requester="$(StringXserviceContext.getAttribute("sendAddress"))" chargedParty="$(String)(serviceContext.getAttribute("sendAddress"))"〉 <lbs:success><—!在定位成功的情況下讀取收到的觸發(fā)消息--〉 <string-switch field="$(String)(serviceContextgetAttribute("message"))"> <string is="r〉<—!如果消息為1,跳轉(zhuǎn)到標(biāo)簽"sendSMS—SuccessSub"陽隱〉 <sub ref="sendSMS—SuccessSub" />
</string>
<string is="2"><—!如果消息為2,則跳轉(zhuǎn)到標(biāo)簽"createMapSub > <sub ref="createMapSub" /> </string〉 </string-switch〉 </lbs:success>
<lbs:failure><—!若定位失敗,則跳轉(zhuǎn)到標(biāo)簽"sendSMS—FailureSub"—〉<sub ref="sendSMS—FailureSub" /〉 </lbs:failure〉 </lbs:getLocation> </subaction〉 此時,調(diào)用的業(yè)務(wù)能力構(gòu)件為getLocationAPI。
其中實現(xiàn)步驟e3,即定義的業(yè)務(wù)能力構(gòu)件標(biāo)簽"sendSMS—SuccessSub "所包
括的具體內(nèi)容為
<subaction id="sendSMS_SuccessSub"> <sms:sendSMS
destArrayOfEndUserldentifier="$(String)(serviceContext.getAttribute(''send Address")) "sende產(chǎn)"OOl" deliveryResultRequest="true" message="$"
您的經(jīng)緯度為:經(jīng)度
緯度""
chargedNumber="$(String)(serviceContext.getAttribute("sendAddress"))" /〉 </subaction〉 此時,調(diào)用的業(yè)務(wù)能力構(gòu)件為sendSMSAPI。
其中實現(xiàn)步驟f3,即定義的業(yè)務(wù)能力構(gòu)件標(biāo)簽"sendSMS_FailureSub "所包 括的具體內(nèi)容為
<subaction id="sendSMS_FailureSub"〉 <sms:sendSMS
destArrayOffindUserIdentifier="$(String)(serviceContext.getAttribute("send Address"))—" sender="001" deliveryResultRequest="true" message="
您好,系統(tǒng)定位失敗,請重試。"
chargedNumber="$(String)(serviceContext.getAttribute("sendAddress"))" /> </subaction〉
此時,調(diào)用業(yè)務(wù)能力構(gòu)件為sendSMSAPI。
其中實現(xiàn)步驟g3,即定義的業(yè)務(wù)能力構(gòu)件標(biāo)簽"sendSMS—createMapSub"
所包括的具體內(nèi)容為
<subaction id="createMapSub"〉 <lbs:createMap
centerX="$((edu.bupt.skl.cngi.protocol.lbs.padger.LocationInfo)(serviceCont extgetAttribute("locationInfo"))).getLongitude()"
center Y="$((edu.bupt.skl.cngi.protocol.lbs.padger.LocationInfo)(serviceCont ext.getAttribute("locationInfo"))).getLatitude()" MapScale="3" MapZoom="5" centerXl="0" centerYl="0" centerX2="0" centerY2="0" MapWidth="200" MapHeight="200" fikName="$this.mapName"> <lbs:success>
<goto ref="sendMMSSub" /> <—!跳轉(zhuǎn)至標(biāo)簽
"sendMMSSub"—> </lbs:success> </lbs:createMap> </subaction> 此時,調(diào)用的業(yè)務(wù)能力構(gòu)件為createMapAPI。
其中實現(xiàn)步驟h3,即定義的業(yè)務(wù)能力構(gòu)件標(biāo)簽"sendMMSSub "所包括的具
體內(nèi)容為
<subaction id="sendMMSSub"> <mulmail: sendMulMail
sender="$(StringXserviceContext.getAttribute("sendAddress"))" destArrayOffindUserIdentifier="$(String)(serviceContext.getAttribute("send Address")) "
thirdPartyPayPhone=''$(String)(serviceContext.getAttribute("sendAddress"X) "feeCode="l" subject="This is the picture showing your location." fileName="$this.mapName" conditionType="l" /> </subaction>
</cpl>
此時,調(diào)用的業(yè)務(wù)能力構(gòu)件為createMapAPI,至此擴展CPL業(yè)務(wù)腳本編寫 完畢。
基于圖4處理多業(yè)務(wù)方法的原理,參見圖5所示,所述步驟202中終端將 封裝擴展CPL業(yè)務(wù)腳本的信息發(fā)送給基于擴展CPL的翻譯器進(jìn)一步包括
步驟2021、基于擴展CPL的翻譯器通過系統(tǒng)總控模塊創(chuàng)建配置模塊和翻譯 總控模塊,終端將封裝擴展CPL業(yè)務(wù)腳本的信息發(fā)送給配置模塊,配置模塊從 所述信息中提取配置信息供翻譯總控模塊使用,所述配置信息包括所述擴展 CPL業(yè)務(wù)腳本的路徑、相應(yīng)于所述消息標(biāo)簽的消息類存放路徑以及相應(yīng)于所述 業(yè)務(wù)能力構(gòu)件標(biāo)簽的業(yè)務(wù)能力構(gòu)件類存放路徑;
步驟2022、配置模塊將所述配置信息和所述擴展CPL業(yè)務(wù)腳本發(fā)送給翻譯 總控模塊,翻譯總控模塊根據(jù)配置信息對擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯。
其中,步驟2022中作為翻譯核心模塊的翻譯總控模塊對所述擴展CPL業(yè) 務(wù)腳本進(jìn)行翻譯為以調(diào)度業(yè)務(wù)驗證模塊、業(yè)務(wù)翻譯模塊、文件生成模塊以及 編譯模塊的方式對擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯。
基于圖5處理多業(yè)務(wù)方法的原理,參見圖6,步驟2022中對擴展CPL業(yè)務(wù) 腳本進(jìn)行翻譯具體包括
步驟20221、業(yè)務(wù)驗證模塊對獲取的擴展CPL業(yè)務(wù)腳本進(jìn)行詞法以及語法 校驗,比如校驗是否缺括號;
步驟20222、作為進(jìn)行翻譯核心模塊的業(yè)務(wù)翻譯模塊根據(jù)所述配置信息以 及所述擴展CPL業(yè)務(wù)腳本中業(yè)務(wù)描述文件所描述的信息,將擴展CPL業(yè)務(wù)腳 本編譯成可執(zhí)行的業(yè)務(wù)實例代碼;
步驟20223、文件生成模塊根據(jù)業(yè)務(wù)翻譯模塊生成的業(yè)務(wù)實例代碼以及所 述業(yè)務(wù)描述文件所描述的信息,生成最終的業(yè)務(wù)實例文件;
步驟20224、編譯模塊編譯業(yè)務(wù)實例文件,生成可部署在業(yè)務(wù)服務(wù)器上的 代碼壓縮包。
基于圖6處理多業(yè)務(wù)方法的原理,步驟20222的具體實現(xiàn)過程為在編譯所述擴展CPL業(yè)務(wù)腳本時,所述業(yè)務(wù)翻譯模塊先根據(jù)擴展CPL業(yè) 務(wù)腳本中所述標(biāo)簽的執(zhí)行順序生成與其對應(yīng)的標(biāo)簽節(jié)點樹,標(biāo)簽節(jié)點樹上的標(biāo) 簽節(jié)點為用于將擴展CPL業(yè)務(wù)腳本中的標(biāo)簽翻譯成底層代碼的節(jié)點,然后以前 序遍歷方式查找標(biāo)簽節(jié)點樹上的標(biāo)簽節(jié)點,根據(jù)查找的順序以及預(yù)先設(shè)置的 converter判斷當(dāng)前標(biāo)簽節(jié)點是否與預(yù)先設(shè)置的converter對應(yīng),如果是,則調(diào)用 當(dāng)前標(biāo)簽節(jié)點所對應(yīng)的converter進(jìn)行處理并轉(zhuǎn)換成所述底層代碼,比如當(dāng)標(biāo)簽 節(jié)點為業(yè)務(wù)能力構(gòu)件標(biāo)簽,則調(diào)用與其所對應(yīng)的converter,即業(yè)務(wù)能力構(gòu)件類 進(jìn)行處理,并按照查找的順序?qū)?dāng)前生成的底層代碼存儲在預(yù)先設(shè)置的存儲區(qū); 如果否,則返回異常信息后繼續(xù)執(zhí)行上述查找以及判斷操作。
實施例二
在對所述擴展CPL業(yè)務(wù)腳本的翻譯過程定義的類包括 Interpreter用于實現(xiàn)基于擴展CPL的翻譯器對擴展CPL業(yè)務(wù)腳本翻譯的核 心算法;
AbstractTab作為業(yè)務(wù)能力構(gòu)件的抽象類,指明了業(yè)務(wù)能力構(gòu)件需要提供的律自.
i 口 ,a、,
NodeTree用于存儲由所述擴展CPL業(yè)務(wù)腳本文件生成的標(biāo)簽節(jié)點樹; TabElement用于實現(xiàn)標(biāo)簽節(jié)點樹中的標(biāo)簽節(jié)點;
ProgramSentence用于存儲一條生成的Java程序語句,并包含指向其上一條 Java語句和下 一 條Java語句的指針;
FuncRegion即作用域,例如一個函數(shù)、if-else模塊等。
FuncRegionStack即作用域堆棧,最上面的作用域是當(dāng)前語句需要插入的作 用域。
此種情況下,基于圖6的原理,以及步驟20222的具體實現(xiàn)過程,在本實 施例中對步驟20222的具體實現(xiàn)包括以下步驟
a4、業(yè)務(wù)開發(fā)生成環(huán)境首先調(diào)用Interpreter對象的interpret函數(shù),將擴展 CPL業(yè)務(wù)腳本文件的路徑傳給Interpreter對象;
b4、 Interpreter對象將XML格式的所述擴展CPL業(yè)務(wù)腳本的文件內(nèi)容解析
成一棵標(biāo)簽節(jié)點樹;
c4、 Interpreter對象生成 一 個作用域堆棧對象;
d4、Interpreter對象調(diào)用自身的initial函數(shù),生成一些基本固定的Java語句; e4、在initial函數(shù)中可以生成Java程序的第一條語句,這時候可以將 firstSentence賦值;
f4、調(diào)用NodeTree對象獲得標(biāo)簽節(jié)點樹的根節(jié)點;
g4 、 Interpreter對象調(diào)用自身的interpreffilement函數(shù),把根節(jié)點及其此處
為空的父節(jié)點傳入函數(shù);
h4、在mterpretElement函數(shù)中,將對業(yè)務(wù)能力構(gòu)件標(biāo)簽進(jìn)行解析,生成新 的java語句,插入到作用域中,并改變作用域堆棧中的值;
i4、獲取標(biāo)簽節(jié)點的子節(jié)點,然后返回步驟g4對子節(jié)點進(jìn)行遞歸調(diào)用處理, 將所述子節(jié)點及它們的父節(jié)點傳入mterpretElement函數(shù)中;
j4、處理完標(biāo)簽節(jié)點樹中所有的節(jié)點后,Interpreter對象調(diào)用自身的 writeToFile函數(shù)將生成的Java語句寫到文件中。
基于圖6的原理,以及步驟20222的具體實現(xiàn)過程,在步驟20222中,所 述業(yè)務(wù)翻譯模塊生成標(biāo)簽節(jié)點樹的一個實例具體為以用于實現(xiàn)簡單應(yīng)用程序 編程接口 SAX解析技術(shù)的jdom方式生成與所述標(biāo)簽的執(zhí)行順序?qū)?yīng)的標(biāo)簽節(jié) 點樹。預(yù)先設(shè)置的存儲區(qū)為存儲作用域的堆棧,存儲所述底層代碼具體為以 壓棧的方式,將當(dāng)前生成的底層代碼存儲在該底層代碼應(yīng)插入的所述存儲作用 域的堆棧;相應(yīng)地,以出棧的方式調(diào)用該底層代碼。
實施例三
基于圖6的原理,以及步驟20222的具體實現(xiàn)過程,并基于所述業(yè)務(wù)翻譯 模塊生成標(biāo)簽節(jié)點樹的一個實例,本實施例中,由于CPL基于XML, XML具 有用于XML的簡單應(yīng)用程序編程接口 (SAX)和文檔對象模型(DOM)兩種 通用接口,對應(yīng)不同接口采用不同的XML解析技術(shù)。本實施例采用SAX解析 技術(shù),jdom是實現(xiàn)了 SAX的java開發(fā)包,jdom用于先將XML轉(zhuǎn)換成一棵節(jié)
點樹,再對節(jié)點樹進(jìn)行搡作。因此,本實施例中,首先以jdom方式,根據(jù)擴展
CPL業(yè)務(wù)腳本中所述標(biāo)簽的執(zhí)行順序生成與該標(biāo)簽執(zhí)行順序?qū)?yīng)的標(biāo)簽節(jié)點
相應(yīng)于預(yù)先設(shè)置的converter,在擴展CPL業(yè)務(wù)腳本中定義的標(biāo)簽除了包括 特殊標(biāo)簽即cpl標(biāo)簽、incoming標(biāo)簽、subaction標(biāo)簽以及message-swith標(biāo)簽之 外,還包括在message-switch標(biāo)簽中定義的標(biāo)簽即默認(rèn)標(biāo)簽(default)、其他標(biāo) 簽(otherwise )、同步且產(chǎn)生條件判斷標(biāo)簽、同步且不產(chǎn)生條件判斷標(biāo)簽、同步 后繼標(biāo)簽、異步標(biāo)簽、異步后繼標(biāo)簽、switch類型標(biāo)簽以及switch后繼標(biāo)簽。
其中,特殊標(biāo)簽用于首先根據(jù)業(yè)務(wù)類型信息進(jìn)行業(yè)務(wù)處理,在査找時遇到 所述特殊標(biāo)簽對應(yīng)的標(biāo)簽節(jié)點時需要進(jìn)行判斷選擇,執(zhí)行分支處理。
其他標(biāo)簽用于經(jīng)由特殊標(biāo)簽對應(yīng)的標(biāo)簽節(jié)點處理后,根據(jù)業(yè)務(wù)類型的屬性 信息進(jìn)行業(yè)務(wù)處理,舉例如下
例如當(dāng)遇到cpl標(biāo)簽節(jié)點時根據(jù)業(yè)務(wù)類型信息需要判定業(yè)務(wù)請求的觸發(fā) 方式;
遇到incoming標(biāo)簽節(jié)點及message-swith標(biāo)簽節(jié)點時,根據(jù)業(yè)務(wù)類型信息 需要判定具體觸發(fā)業(yè)務(wù),比如判定是呼叫業(yè)務(wù)還是發(fā)送短信業(yè)務(wù);
遇到subaction標(biāo)簽節(jié)點時,根據(jù)業(yè)務(wù)類型信息需要判定具體觸發(fā)業(yè)務(wù)對應(yīng) 的觸發(fā)內(nèi)容,不同觸發(fā)業(yè)務(wù)對應(yīng)不同觸發(fā)內(nèi)容。對于其他標(biāo)簽來說,同一個業(yè) 務(wù)有不同屬性,以同步和異步兩種屬性為例,同步指觸發(fā)業(yè)務(wù)后無需等待返回 消息就可以進(jìn)行處理,而異步需要等待返回消息。
其中,特殊標(biāo)簽中包括的cpl標(biāo)簽節(jié)點,在業(yè)務(wù)腳本中是作為業(yè)務(wù)邏輯的 入口點。在標(biāo)準(zhǔn)的CPL業(yè)務(wù)腳本里,業(yè)務(wù)邏輯的觸發(fā)僅僅是通過呼叫業(yè)務(wù)的呼 入消息和呼出消息觸發(fā)的,并不需要在遇到cpl標(biāo)簽節(jié)點時進(jìn)行判斷。
然而在擴展CPL業(yè)務(wù)腳本里,業(yè)務(wù)邏輯的觸發(fā)來自協(xié)議網(wǎng)關(guān)層上報的消息, 除了呼叫消息,包括發(fā)送短信、彩信等其他網(wǎng)絡(luò)承載能力消息,網(wǎng)絡(luò)承載能力 指接入的不同網(wǎng)絡(luò)融合后,在融合的網(wǎng)絡(luò)中當(dāng)提供多種業(yè)務(wù)時網(wǎng)絡(luò)能承載業(yè)務(wù) 運行的能力,也包括從互聯(lián)網(wǎng)客戶端的的用戶界面觸發(fā)的用戶自定義消息。此
時,遇到cpl標(biāo)簽節(jié)點時需要進(jìn)行判斷,cpl標(biāo)簽節(jié)點是標(biāo)簽節(jié)點樹的根節(jié)點。 subaction標(biāo)簽節(jié)點針對所述子動作觸發(fā)的業(yè)務(wù)處理。如果incoming標(biāo)簽節(jié)點下 緊跟著message-switch標(biāo)簽節(jié)點即代表需進(jìn)行多種業(yè)務(wù)選擇,說明業(yè)務(wù)邏輯是 通過協(xié)議網(wǎng)關(guān)層或互聯(lián)網(wǎng)客戶端的上報消息觸發(fā)的;如果incoming標(biāo)簽節(jié)點下 緊跟的不是message-switch標(biāo)簽節(jié)點,則默認(rèn)為該業(yè)務(wù)邏輯是通過呼叫的被叫 號碼進(jìn)行觸發(fā)的。
為了使擴展CPL業(yè)務(wù)腳本能有一個較好的擴展性,使業(yè)務(wù)開發(fā)人員根據(jù)自 己的需求能夠簡便地開發(fā)出合適的能力標(biāo)簽,擴展CPL業(yè)務(wù)腳本的基于擴展 CPL的翻譯器應(yīng)該有一個通用的規(guī)則,對除了 cpl標(biāo)簽等幾個較為特殊的標(biāo)簽 之外的其他標(biāo)簽應(yīng)都能適用。在翻譯過程中就使用了一個通用的規(guī)則。為了實 現(xiàn)這個通用的規(guī)則,需要對應(yīng)業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點的業(yè)務(wù)能力構(gòu)件類提供一 些信息即描述所述業(yè)務(wù)類型的屬性信息,具體包括以下六類屬性信息
業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點是否產(chǎn)生條件判斷,當(dāng)一個業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點 下的子節(jié)點需要判斷進(jìn)行條件判斷時,就要將它預(yù)先設(shè)置成產(chǎn)生條件判斷的屬 性。例如string-switch標(biāo)簽節(jié)點,其下面的子節(jié)點string會進(jìn)行條件判斷,則 string-switch標(biāo)簽節(jié)點就需要設(shè)置成產(chǎn)生條件判斷的屬性。再例如proxy標(biāo)簽節(jié) 點,其下面的子節(jié)點是消息標(biāo)簽,并需要對這些消息標(biāo)簽的名字進(jìn)行判斷,則 proxy標(biāo)簽節(jié)點需要設(shè)置成產(chǎn)生條件判斷的屬性。
業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點是否有默認(rèn)操作,有些業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點可能 會有一些默認(rèn)搡作,比如proxy標(biāo)簽節(jié)點。
業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點是否是異步的,有些業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點在執(zhí)行 完自身的操作后需要等待外界的輸入才能使擴展CPL業(yè)務(wù)腳本繼續(xù)運行,這時 就需要將該業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點置成異步的,其他的情況就只需要置成同步 的即可。例如proxy標(biāo)簽節(jié)點,擴展CPL業(yè)務(wù)腳本在執(zhí)行proxy標(biāo)簽節(jié)點后, 需要等待呼叫網(wǎng)關(guān)返回呼叫轉(zhuǎn)接的結(jié)果才能繼續(xù)運行,因此proxy標(biāo)簽節(jié)點是 異步的。
業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點是否是一個操作, 一些業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點具有
條件判斷的功能,例如string標(biāo)簽節(jié)點,而消息類型的業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點 也會產(chǎn)生條件判斷,這時基于擴展CPL的翻譯器就需要根據(jù)該業(yè)務(wù)能力構(gòu)件標(biāo) 簽節(jié)點是否是一個操作來決定在翻譯的代碼里是否加入調(diào)用業(yè)務(wù)能力構(gòu)件標(biāo)簽 節(jié)點對應(yīng)業(yè)務(wù)能力構(gòu)件類的搡作的語句。
業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點是否有返回值,也表示業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點是否 會向serviceContext里存入其處理的結(jié)果,如果業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點有返回 值,則需要給出能力標(biāo)簽結(jié)果存入senvceContext的鍵值。
在擴展業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點時應(yīng)能正確配置標(biāo)簽的這些信息,如果配置 的信息與功能標(biāo)簽節(jié)點的設(shè)計功能不符,那么生成的業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點可 能無法達(dá)到預(yù)期的功能。對于default標(biāo)簽節(jié)點需要進(jìn)行特別處理。
其中,對default標(biāo)簽節(jié)點的處理具體為
default標(biāo)簽節(jié)點 一般都會有兄弟節(jié)點,此時default的子樹翻譯出的代碼應(yīng) 包含在一個elseU作用域中;但也可能會出現(xiàn)default標(biāo)簽節(jié)點單獨存在而沒有 其他兄弟節(jié)點的情況,此時default標(biāo)簽節(jié)點的子樹翻譯出的代碼就不需要包含 在一個elseU作用域中;
有時候一些業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點有默認(rèn)操作,但在擴展CPL業(yè)務(wù)腳本里, 該業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點的子節(jié)點不包含default標(biāo)簽節(jié)點,這時基于擴展CPL 的翻譯器就需要自動將一個default標(biāo)簽節(jié)點加為該業(yè)務(wù)能力構(gòu)件標(biāo)簽節(jié)點的最 后一個子節(jié)點;
在default標(biāo)簽節(jié)點下可能沒有子節(jié)點,這時基于擴展CPL的翻譯器就只 需要插入調(diào)用default父節(jié)點對應(yīng)的業(yè)務(wù)能力構(gòu)件標(biāo)簽的默認(rèn)搡作即可。
當(dāng)遇到異步標(biāo)簽節(jié)點需要生成新的處理函數(shù)時,新的處理函數(shù)的命名方式 采用從根節(jié)點到A節(jié)點路徑上的所有節(jié)點名稱的組合方式。
總之,基于本實施例中上述對標(biāo)簽節(jié)點處理的原理,以前序遍歷方式將標(biāo) 簽節(jié)點樹上所有的節(jié)點都遍歷后,實現(xiàn)調(diào)用當(dāng)前的標(biāo)簽節(jié)點所對應(yīng)的converter 進(jìn)行處理,并轉(zhuǎn)換成所述底層代碼。
其中,調(diào)用當(dāng)前的標(biāo)簽節(jié)點所對應(yīng)的converter進(jìn)行處理,并轉(zhuǎn)換成所述底層代碼的實現(xiàn)方法具體為每次遇到標(biāo)簽節(jié)點都會査找并調(diào)用相應(yīng)的converter, converter采用的構(gòu)造方法是一個靜態(tài)方法。例如當(dāng)遇到標(biāo)簽〈Aatfabc"〉時, 加入的語句是"A.proc(abc);"。
每個converter都有同步或異步之分,同步是指業(yè)務(wù)應(yīng)用層向協(xié)議網(wǎng)關(guān)層發(fā) 送調(diào)用請求調(diào)用converter后直接返回結(jié)果的情況;而異步是指業(yè)務(wù)應(yīng)用層向協(xié) 議網(wǎng)關(guān)層發(fā)送調(diào)用請求調(diào)用converter后需先返回給協(xié)議網(wǎng)關(guān)層,而此后業(yè)務(wù)應(yīng) 用層還需等待協(xié)議網(wǎng)關(guān)層上報消息的情況。如果標(biāo)簽節(jié)點對應(yīng)的converter是同 步的,則直接調(diào)用converter中的函數(shù);如果是異步的,并且該異步標(biāo)簽下還有 子節(jié)點,說明業(yè)務(wù)應(yīng)用層需要等待協(xié)議網(wǎng)關(guān)層的上報消息,則需要生成一個新 的函數(shù)專門處理上報消息。
例如遇到A標(biāo)簽節(jié)點,且它下面還有子節(jié)點,就需要插入以下代碼"ret =A.proc(); ret.fillContext(context); return ret;"。
如果該異步標(biāo)簽下面的標(biāo)簽節(jié)點是葉節(jié)點即最小的子節(jié)點,則插入返回值 語句,并結(jié)東當(dāng)前作用域。
如果遇至U subAction標(biāo)簽,直接生成一個函數(shù)private iMessage subActionld(iMessage msg),標(biāo)簽里的內(nèi)容按照前面所述的方法進(jìn)行翻譯。
當(dāng)節(jié)點下面有多個子節(jié)點的時候,表明該節(jié)點之后有一個條件判斷,此時 以前序遍歷方式對每個子節(jié)點及其子樹生成一個ifU語句塊,同理對子樹的處 理也是一樣。
如圖7所示的標(biāo)簽節(jié)點樹,根據(jù)上述調(diào)用當(dāng)前的標(biāo)簽節(jié)點所對應(yīng)的
converter進(jìn)行處理,并轉(zhuǎn)換成所述底層代碼的實現(xiàn)方法的原理,將標(biāo)簽節(jié)點樹
的標(biāo)簽節(jié)點進(jìn)行轉(zhuǎn)換生成的j ava代碼如下所示
Private iMessage procAInl (iMessage msg){ iMessage ret = null; A a = new A(); ret = a.proc(); ret. fillContext(context); if (conditionlsB) { B b = new B();ret = b.proc();
ret. fillContext(context);
if (conditionlsC) {
C c = new C();
ret = c.proc();
ret.fillContext(context);
return ret;
else if (conditionIsD)( D d = new D(); ret = d.proc(); ret.fillContext(context); return ret;
else if (conditionIsE){ E e = new E(); ret = e.procO; ret.fillContext(context); return ret;
以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護(hù)范
權(quán)利要求
1、一種基于擴展呼叫處理語言CPL的翻譯器,其特征在于,該翻譯器包括設(shè)置在翻譯器中的系統(tǒng)總控模塊,所述系統(tǒng)總控模塊用于對獲取的擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯,并創(chuàng)建配置模塊和翻譯總控模塊。
2、 根據(jù)權(quán)利要求1所述的基于擴展CPL的翻譯器,其特征在于,該翻譯器還包括由所述系統(tǒng)總控模塊創(chuàng)建的配置模塊以及翻譯總控模塊,配置模塊和 翻譯總控模塊分別與所述系統(tǒng)總控模塊相連,且配置模塊與翻譯總控模塊相連;所述配置模塊用于以配置文件的方式從所述擴展CPL業(yè)務(wù)腳本的信息中提 取配置信息,并獲取配置信息中的擴展CPL業(yè)務(wù)腳本的路徑、消息類存放路徑 以及業(yè)務(wù)能力構(gòu)件類存放路徑;所述翻譯總控模塊用于根據(jù)所述配置信息對所述擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯。
3、 根據(jù)權(quán)利要求2所述的基于擴展CPL的翻譯器,其特征在于,該翻譯 器還包括依序相連的業(yè)務(wù)驗證模塊、業(yè)務(wù)翻譯模塊、文件生成模塊以及編譯模 塊,業(yè)務(wù)驗證模塊、業(yè)務(wù)翻譯模塊、文件生成模塊或編譯模塊分別與所述翻譯 總控模塊相連;其中,業(yè)務(wù)驗證模塊,用于對獲取的擴展CPL業(yè)務(wù)腳本進(jìn)行詞法以及語法校驗;業(yè)務(wù)翻譯模塊,用于根據(jù)所述配置信息以及所述擴展CPL業(yè)務(wù)腳本中業(yè)務(wù) 描述文件所描述的信息,將擴展CPL業(yè)務(wù)腳本編譯成可執(zhí)行的業(yè)務(wù)實例代碼;文件生成模塊,用于根據(jù)所述業(yè)務(wù)實例代碼以及所述業(yè)務(wù)描述文件所描述 的信息,生成最終的業(yè)務(wù)實例文件;編譯模塊,用于編譯所述業(yè)務(wù)實例文件,生成可部署在業(yè)務(wù)服務(wù)器上的代 碼壓縮包;所述翻譯總控模塊用于具體以調(diào)度業(yè)務(wù)驗證模塊、業(yè)務(wù)翻譯模塊、文件生 成模塊以及編譯模塊的方式對所述擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯。
4. 一種基于擴展CPL翻譯器的處理多業(yè)務(wù)的系統(tǒng),其特征在于,該系統(tǒng) 包括終端、基于擴展CPL的翻譯器以及業(yè)務(wù)服務(wù)器,終端通過基于擴展CPL 的翻譯器與業(yè)務(wù)服務(wù)器相連;所述基于擴展CPL的翻譯器用于獲取從所述終端發(fā)送的擴展CPL業(yè)務(wù)腳 本,對所述擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯,翻譯成底層代碼并對其進(jìn)行編譯,進(jìn) 行批處理生成底層代碼壓縮包后轉(zhuǎn)發(fā)給所述業(yè)務(wù)服務(wù)器;所述業(yè)務(wù)服務(wù)器用于 執(zhí)行所述底層代碼,并實現(xiàn)與所述擴展CPL業(yè)務(wù)腳本相應(yīng)的業(yè)務(wù)。
5、 一種基于擴展CPL翻譯器的處理多業(yè)務(wù)的方法,其特征在于,包括以 下步驟A、 在終端建立業(yè)務(wù)開發(fā)環(huán)境,根據(jù)預(yù)設(shè)置的擴展CPL編寫擴展CPL業(yè)務(wù) 腳本;B、 終端將封裝所述擴展CPL業(yè)務(wù)腳本的信息發(fā)送給基于擴展CPL的翻譯 器,基于擴展CPL的翻譯器翻譯擴展CPL業(yè)務(wù)腳本并轉(zhuǎn)換成底層代碼;C、 所述基于擴展CPL的翻譯器將所述底層代碼發(fā)送給業(yè)務(wù)服務(wù)器,并在 業(yè)務(wù)服務(wù)器上部署業(yè)務(wù),業(yè)務(wù)服務(wù)器執(zhí)行底層代碼,并實現(xiàn)與所述擴展CPL業(yè) 務(wù)腳本相應(yīng)的所述業(yè)務(wù)。
6、 根據(jù)權(quán)利要求5所述的基于擴展CPL翻譯器的處理多業(yè)務(wù)的方法,其 特征在于,步驟A中所述預(yù)設(shè)置擴展CPL具體為以增加消息標(biāo)簽和增加多種 業(yè)務(wù)能力構(gòu)件標(biāo)簽的擴展方式擴展所述呼叫處理語言CPL。
7、 根據(jù)權(quán)利要求6所述的基于擴展CPL翻譯器的處理多業(yè)務(wù)的方法,其 特征在于,步驟B具體包括B1、所述基于擴展CPL的翻譯器通過系統(tǒng)總控模塊創(chuàng)建配置模塊和翻譯總 控模塊,終端將封裝擴展CPL業(yè)務(wù)腳本的信息發(fā)送給配置模塊,配置模塊從所 述信息中提取配置信息,所述配置信息包括所述擴展CPL業(yè)務(wù)腳本的路徑、相 應(yīng)于所述消息標(biāo)簽的消息類存放路徑、以及相應(yīng)于所述業(yè)務(wù)能力構(gòu)件標(biāo)簽的業(yè) 務(wù)能力構(gòu)件類存放路徑;B2、所述配置模塊將所述配置信息和所述擴展CPL業(yè)務(wù)腳本發(fā)送給所述翻 譯總控模塊,翻譯總控模塊根據(jù)該配置信息對所述擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯。
8、 根據(jù)權(quán)利要求7所述的基于擴展CPL翻譯器的處理多業(yè)務(wù)的方法,其 特征在于,步驟B2中所述翻譯總控模塊對所述擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯為 以調(diào)度業(yè)務(wù)驗證模塊、業(yè)務(wù)翻譯模塊、文件生成模塊以及編譯模塊的方式對所 述擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯。
9、 根據(jù)權(quán)利要求8所述的基于擴展CPL翻譯器的處理多業(yè)務(wù)的方法,其 特征在于,步驟B2中對所述擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯具體包括B21、所述業(yè)務(wù)驗證模塊對獲取的所述擴展CPL業(yè)務(wù)腳本進(jìn)行詞法及語法 校驗;B22、所述業(yè)務(wù)翻譯模塊根據(jù)所述配置信息以及所述擴展CPL業(yè)務(wù)腳本中 業(yè)務(wù)描述文件所描述的信息,將所述擴展CPL業(yè)務(wù)腳本編譯成可執(zhí)行的業(yè)務(wù)實 例代碼;B23、所述文件生成模塊根據(jù)所述業(yè)務(wù)翻譯模塊生成的所述業(yè)務(wù)實例代碼 以及所述業(yè)務(wù)描述文件所描述的信息,生成最終的業(yè)務(wù)實例文件;B24、所述編譯模塊編譯所述業(yè)務(wù)實例文件,生成可部署在所述業(yè)務(wù)服務(wù) 器上的代碼壓縮包。
10、 根據(jù)權(quán)利要求9所述的基于擴展CPL翻譯器的處理多業(yè)務(wù)的方法,其 特征在于,所述步驟B22具體為在編譯所述擴展CPL業(yè)務(wù)腳本時,所述業(yè)務(wù)翻譯模塊先根據(jù)擴展CPL業(yè) 務(wù)腳本中所述標(biāo)簽的執(zhí)行順序生成與其對應(yīng)的標(biāo)簽節(jié)點樹,然后以前序遍歷方 式查找標(biāo)簽節(jié)點樹上的標(biāo)簽節(jié)點,根據(jù)查找的順序以及預(yù)先設(shè)置的標(biāo)簽轉(zhuǎn)換類 converter判斷當(dāng)前標(biāo)簽節(jié)點是否與預(yù)先設(shè)置的converter對應(yīng),如果是,則調(diào)用 當(dāng)前標(biāo)簽節(jié)點所對應(yīng)的converter進(jìn)行處理并轉(zhuǎn)換成所述底層代碼,并按照查找 的順序?qū)?dāng)前生成的底層代碼存儲在預(yù)先設(shè)置的存儲區(qū);如果否,則返回異常 信息后,繼續(xù)執(zhí)行所述查找以及所述判斷操作;其中,所述業(yè)務(wù)翻譯模塊生成標(biāo)簽節(jié)點樹具體為以用于實現(xiàn)簡單應(yīng)用程 序編程接口 SAX解析技術(shù)的jdom方式生成與所述標(biāo)簽的執(zhí)行順序?qū)?yīng)的標(biāo)簽 節(jié)點樹;所述預(yù)先設(shè)置的存儲區(qū)為存儲作用域的堆棧;存儲所述底層代碼具體為以壓棧的方式,將當(dāng)前生成的底層代碼存儲在 該底層代碼應(yīng)插入的所述存儲作用域的堆棧;相應(yīng)地,以出棧的方式調(diào)用該底 層代碼。
全文摘要
本發(fā)明公開了一種基于擴展呼叫處理語言(CPL)的翻譯器,包括系統(tǒng)總控模塊,用于對獲取的擴展CPL業(yè)務(wù)腳本進(jìn)行翻譯,并創(chuàng)建配置模塊和翻譯總控模塊。在本發(fā)明系統(tǒng)上采用的方法包括以下步驟在終端建立業(yè)務(wù)開發(fā)環(huán)境,根據(jù)預(yù)設(shè)置的擴展CPL,基于擴展CPL編寫擴展CPL業(yè)務(wù)腳本;終端將封裝擴展CPL業(yè)務(wù)腳本的信息發(fā)送給翻譯器,翻譯器翻譯擴展CPL業(yè)務(wù)腳本并轉(zhuǎn)換成底層代碼;翻譯器將底層代碼發(fā)送給業(yè)務(wù)服務(wù)器,并在業(yè)務(wù)服務(wù)器上部署業(yè)務(wù),業(yè)務(wù)服務(wù)器執(zhí)行底層代碼實現(xiàn)與其相應(yīng)的所述業(yè)務(wù)。采用本發(fā)明的翻譯器以及系統(tǒng)、方法,提供了對多業(yè)務(wù)接入的支持,使業(yè)務(wù)服務(wù)器能觸發(fā)并實現(xiàn)用戶的多種業(yè)務(wù)請求。
文檔編號H04L29/02GK101106604SQ200710099028
公開日2008年1月16日 申請日期2007年5月9日 優(yōu)先權(quán)日2007年5月9日
發(fā)明者劉玉璇, 孟祥武, 宮云戰(zhàn), 泳 彭, 陳俊亮 申請人:北京郵電大學(xué)