亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種Web服務(wù)模擬的方法及其系統(tǒng)和服務(wù)代理系統(tǒng)的制作方法

文檔序號:7981329閱讀:207來源:國知局
一種Web 服務(wù)模擬的方法及其系統(tǒng)和服務(wù)代理系統(tǒng)的制作方法
【專利摘要】本發(fā)明實(shí)施例提供了一種Web服務(wù)模擬的方法及其系統(tǒng)和服務(wù)代理系統(tǒng),用以解決現(xiàn)有技術(shù)中由于服務(wù)提供系統(tǒng)宕機(jī)導(dǎo)致研發(fā)測試的中斷或者在線提供服務(wù)的故障。其中,該Web服務(wù)模擬的方法是通過服務(wù)代理系統(tǒng)攔截服務(wù)調(diào)用終端發(fā)出的調(diào)用請求報(bào)文,解析該調(diào)用請求報(bào)文,并查找該調(diào)用請求報(bào)文請求調(diào)用的方法對應(yīng)的模擬方式;若查找結(jié)果為全部模擬方式,則服務(wù)代理系統(tǒng)生成響應(yīng)報(bào)文并返回至服務(wù)調(diào)用終端;若查找結(jié)果為部分模擬方式,則服務(wù)代理系統(tǒng)轉(zhuǎn)發(fā)該調(diào)用請求報(bào)文至服務(wù)提供系統(tǒng),在接收到服務(wù)提供系統(tǒng)返回的響應(yīng)報(bào)文后,處理接收到的響應(yīng)報(bào)文并返回至服務(wù)調(diào)用終端來實(shí)現(xiàn)的。該Web服務(wù)模擬系統(tǒng)包括該服務(wù)代理系統(tǒng)和服務(wù)提供系統(tǒng)。
【專利說明】一種Web服務(wù)模擬的方法及其系統(tǒng)和服務(wù)代理系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及面向服務(wù)構(gòu)架(Service-Oriented Architecture, S0A)應(yīng)用【技術(shù)領(lǐng)域】,尤其涉及一種Web服務(wù)模擬的方法及其系統(tǒng)和服務(wù)代理系統(tǒng)。
【背景技術(shù)】
[0002]隨著現(xiàn)代社會(huì)科學(xué)技術(shù)的發(fā)展,計(jì)算機(jī)系統(tǒng)已經(jīng)成為各行各業(yè)所依賴的工具,而在其中起著核心作用的是計(jì)算機(jī)軟件系統(tǒng)。隨著企業(yè)的不斷發(fā)展和信息技術(shù)(InformationTechnology, IT)系統(tǒng)的不斷建設(shè),企業(yè)的IT應(yīng)用系統(tǒng)越來越多,應(yīng)用日益復(fù)雜,企業(yè)對應(yīng)用系統(tǒng)之間的互聯(lián)互通也提出了新的要求。而在大型的互聯(lián)網(wǎng)應(yīng)用中,其核心職能系統(tǒng)通常有幾十個(gè)甚至更多,系統(tǒng)之間的服務(wù)依賴也非常復(fù)雜。
[0003]SOA是一種架構(gòu)模型,它將企業(yè)應(yīng)用中分散的功能組織成可以共享的基于標(biāo)準(zhǔn)的服務(wù),這些服務(wù)能夠迅速地被組合和重用,從而達(dá)到了快速響應(yīng)業(yè)務(wù)需求的目的;同時(shí),在企業(yè)級應(yīng)用領(lǐng)域,隨著應(yīng)用規(guī)模的不斷擴(kuò)大,各個(gè)系統(tǒng)之間的集成和交互變得越來越重要。在SOA環(huán)境中,系統(tǒng)不可避免地要與其他系統(tǒng)交互,可以是基于簡單對象訪問協(xié)議(SimpleObject Access Protocol, SOAP)的Web服務(wù),基于消息隊(duì)列,甚至是基于遠(yuǎn)程過程調(diào)用協(xié)議(Remote Procedure Call Protocol, RPC)的遠(yuǎn)程調(diào)用。而在大型的互聯(lián)網(wǎng)應(yīng)用中,其核心職能系統(tǒng)通常有幾十個(gè)甚至更多,系統(tǒng)之間的服務(wù)依賴也非常復(fù)雜。這種應(yīng)用架構(gòu)環(huán)境下,產(chǎn)生了以下幾個(gè)問題:
[0004]比如,在大型IT企業(yè)所使用的系統(tǒng)在上線使用之前研發(fā)測試過程中以及在正常上線使用過程中,由于應(yīng)用系統(tǒng)眾多,且系統(tǒng)之間的依賴關(guān)系非常復(fù)雜,這樣服務(wù)提供系統(tǒng)與服務(wù)調(diào)用系統(tǒng)之間交互非常多,服務(wù)提供系統(tǒng)的壓力非常大,只要服務(wù)提供系統(tǒng)中的某一個(gè)服務(wù)器因?yàn)橛布收匣蛘咂渌N種原因宕機(jī),系統(tǒng)間的服務(wù)調(diào)用就無法正常進(jìn)行,這樣就會(huì)導(dǎo)致研發(fā)測試的中斷或者在線提供服務(wù)的故障。

【發(fā)明內(nèi)容】

[0005]本發(fā)明實(shí)施例提供了一種Web服務(wù)模擬的方法及其系統(tǒng)和服務(wù)代理系統(tǒng),用以解決現(xiàn)有技術(shù)中,由于應(yīng)用系統(tǒng)眾多,且系統(tǒng)之間的依賴關(guān)系非常復(fù)雜使得服務(wù)提供系統(tǒng)的壓力較大可能導(dǎo)致研發(fā)測試的中斷或者在線提供服務(wù)的故障的問題。
[0006]基于上述問題,本發(fā)明實(shí)施例提供的一種Web服務(wù)模擬的方法,包括:
[0007]服務(wù)代理系統(tǒng)攔截服務(wù)調(diào)用終端發(fā)出的調(diào)用請求報(bào)文,解析出此調(diào)用請求報(bào)文包含的服務(wù)名、方法名和輸入?yún)?shù)類型,并根據(jù)預(yù)設(shè)的各服務(wù)的服務(wù)名、服務(wù)所包含的各方法的方法名、各方法的輸入?yún)?shù)類型及各方法模擬方式的對應(yīng)關(guān)系查找所述調(diào)用請求報(bào)文請求調(diào)用的方法對應(yīng)的模擬方式;
[0008]若查找結(jié)果為全部模擬方式,則所述服務(wù)代理系統(tǒng)根據(jù)預(yù)設(shè)的第一模擬模板生成響應(yīng)報(bào)文并返回至所述服務(wù)調(diào)用終端;
[0009]若查找結(jié)果為部分模擬方式,則所述服務(wù)代理系統(tǒng)轉(zhuǎn)發(fā)該調(diào)用請求報(bào)文至服務(wù)提供系統(tǒng),在接收到所述服務(wù)提供系統(tǒng)返回的響應(yīng)報(bào)文后,按照預(yù)設(shè)的第二模擬模板對接收到的響應(yīng)報(bào)文進(jìn)行處理后返回至服務(wù)調(diào)用終端。
[0010]本發(fā)明實(shí)施例提供的一種服務(wù)代理系統(tǒng)包括:
[0011]報(bào)文攔截模塊,用于攔截服務(wù)調(diào)用終端發(fā)出的調(diào)用請求報(bào)文;
[0012]報(bào)文解析模塊,用于解析出所述調(diào)用請求報(bào)文包含的服務(wù)名、方法名和輸入?yún)?shù)類型,并根據(jù)預(yù)設(shè)的各服務(wù)的服務(wù)名、服務(wù)所包含的各方法的方法名、各方法的輸入?yún)?shù)類型及各方法模擬方式的對應(yīng)關(guān)系查找所述調(diào)用請求報(bào)文請求調(diào)用的方法對應(yīng)的模擬方式;
[0013]報(bào)文構(gòu)造模塊,用于在查找結(jié)果為全部模擬方式時(shí),根據(jù)預(yù)設(shè)的第一模擬模板生成響應(yīng)報(bào)文,并用于在查找結(jié)果為部分模擬方式時(shí)以及接收到所述服務(wù)提供系統(tǒng)返回的響應(yīng)報(bào)文后,按照預(yù)設(shè)的第二模擬模板對接收到的響應(yīng)報(bào)文進(jìn)行處理;
[0014]報(bào)文轉(zhuǎn)發(fā)模塊,用于轉(zhuǎn)發(fā)所述報(bào)文構(gòu)造模塊根據(jù)所述的第一模擬模板生成的響應(yīng)報(bào)文至所述服務(wù)調(diào)用終端;以及在所述方法被設(shè)置為部分模擬方式時(shí),轉(zhuǎn)發(fā)該調(diào)用請求報(bào)文至服務(wù)提供系統(tǒng),并轉(zhuǎn)發(fā)所述報(bào)文構(gòu)造模塊根據(jù)所述第二模擬模板處理后的響應(yīng)報(bào)文至所述服務(wù)調(diào)用終端。
[0015]本發(fā)明實(shí)施例還提供一種Web服務(wù)模擬的系統(tǒng),包括本發(fā)明實(shí)施例提供的上述服務(wù)代理系統(tǒng)以及服務(wù)提供系統(tǒng),所述服務(wù)提供系統(tǒng)用于當(dāng)接收所述服務(wù)代理系統(tǒng)轉(zhuǎn)發(fā)的調(diào)用請求報(bào)文時(shí),生成響應(yīng)報(bào)文返回至所述服務(wù)代理系統(tǒng)。
[0016]本發(fā)明實(shí)施例的有益效果包括:
[0017]本發(fā)明實(shí)施例提供了一種Web服務(wù)模擬的方法及其系統(tǒng)和服務(wù)代理系統(tǒng),利用服務(wù)代理系統(tǒng)響應(yīng)服務(wù)調(diào)用終端對被設(shè)置為全部模擬方式的方法的調(diào)用,當(dāng)服務(wù)提供系統(tǒng)由于硬件故障或者其他原因宕機(jī)時(shí),服務(wù)代理系統(tǒng)可以直接響應(yīng)服務(wù)調(diào)用系統(tǒng),從而隔離了服務(wù)提供系統(tǒng)對服務(wù)調(diào)用系統(tǒng)的影響,使得在服務(wù)提供系統(tǒng)壓力較大或者宕機(jī)的情況下,研發(fā)測試可以繼續(xù)或者在線提供服務(wù)不會(huì)出故障。
【專利附圖】

【附圖說明】
[0018]圖1為本發(fā)明實(shí)施例提供的一種Web服務(wù)模擬系統(tǒng)在具體應(yīng)用中的架構(gòu)圖;
[0019]圖2為本發(fā)明實(shí)施例提供的一種Web服務(wù)模擬的方法的流程圖;
[0020]圖3為本發(fā)明實(shí)施例提供的服務(wù)代理系統(tǒng)中添加新的服務(wù)的流程圖;
[0021]圖4為本發(fā)明實(shí)施例提供的某一服務(wù)中的某一方法的第一模擬模板的不意圖;
[0022]圖5為本發(fā)明實(shí)施例提供的服務(wù)代理系統(tǒng)根據(jù)第一模擬模板生成的響應(yīng)報(bào)文的示意圖;
[0023]圖6為本發(fā)明實(shí)施例提供的服務(wù)代理系統(tǒng)轉(zhuǎn)發(fā)調(diào)用請求報(bào)文至服務(wù)提供系統(tǒng)的流程圖;
[0024]圖7為本發(fā)明實(shí)施例提供的某一服務(wù)中的某一方法的第二模擬模板的示意圖;
[0025]圖8為本發(fā)明實(shí)施例提供的服務(wù)提供系統(tǒng)返回的響應(yīng)報(bào)文的示意圖;
[0026]圖9為本發(fā)明實(shí)施例提供的根據(jù)第二模擬模板對服務(wù)提供系統(tǒng)返回的響應(yīng)報(bào)文進(jìn)行處理后的響應(yīng)報(bào)文的示意圖;
[0027]圖10為本發(fā)明實(shí)施例提供的一種Web服務(wù)模擬的方法在具體應(yīng)用時(shí)進(jìn)行服務(wù)模擬的流程圖;
[0028]圖11為本發(fā)明實(shí)施例提供的一種服務(wù)代理系統(tǒng)的結(jié)構(gòu)示意圖;
[0029]圖12為本發(fā)明實(shí)施例提供的一種Web服務(wù)模擬的系統(tǒng)的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0030]下面結(jié)合說明書附圖,對本發(fā)明實(shí)施例提供的一種Web服務(wù)模擬的方法及其系統(tǒng)和服務(wù)代理系統(tǒng)的【具體實(shí)施方式】及其能夠達(dá)到的有益效果進(jìn)行詳細(xì)的闡述。
[0031]本發(fā)明實(shí)施例提供的一種Web服務(wù)模擬系統(tǒng)在具體應(yīng)用時(shí)的架構(gòu)如圖1所示,包括:
[0032]服務(wù)代理系統(tǒng)11,位于服務(wù)調(diào)用系統(tǒng)13和服務(wù)提供系統(tǒng)12之間,它既可以是軟件模塊,也可以是能夠?qū)崿F(xiàn)代理功能的硬件設(shè)備;
[0033]服務(wù)提供系統(tǒng)12,可以提供服務(wù)或方法以供其他系統(tǒng)調(diào)用;
[0034]服務(wù)調(diào)用系統(tǒng)13,可以為用戶,也可以為終端設(shè)備。
[0035]圖2是本發(fā)明實(shí)施例提供的一種Web服務(wù)模擬的方法的流程圖,該方法包含下述步驟:
[0036]S201、服務(wù)代理系統(tǒng)攔截服務(wù)調(diào)用終端發(fā)出的調(diào)用請求報(bào)文,此服務(wù)調(diào)用終端是服務(wù)調(diào)用系統(tǒng)中的某一個(gè)終端;
[0037]本步驟通過服務(wù)調(diào)用終端將調(diào)用請求報(bào)文中的目標(biāo)IP地址由提供該調(diào)用請求報(bào)文中請求調(diào)用的方法的服務(wù)提供系統(tǒng)中的地址修改為服務(wù)代理系統(tǒng)中的地址來實(shí)現(xiàn);
[0038]S202、服務(wù)代理系統(tǒng)解析出此調(diào)用請求報(bào)文包含服務(wù)名、方法名、輸入?yún)?shù)類型;
[0039]S203、服務(wù)代理系統(tǒng)根據(jù)預(yù)設(shè)的各服務(wù)的服務(wù)名、服務(wù)所包含的各方法的方法名、各方法的輸入?yún)?shù)類型及各方法模擬方式的對應(yīng)關(guān)系查找所述調(diào)用請求報(bào)文請求調(diào)用的方法對應(yīng)的模擬方式,若查找結(jié)果為全部模擬方式,則執(zhí)行S204,若查找結(jié)果為部分模擬方式,則執(zhí)行S206 ;
[0040]S204、服務(wù)代理系統(tǒng)根據(jù)預(yù)設(shè)的第一模擬模板生成響應(yīng)報(bào)文;
[0041]S205、服務(wù)代理系統(tǒng)將S204中生成的響應(yīng)報(bào)文返回至服務(wù)調(diào)用終端;
[0042]這樣,服務(wù)調(diào)用終端不再依賴服務(wù)提供系統(tǒng),可以減小服務(wù)提供系統(tǒng)的壓力,避免由于服務(wù)提供系統(tǒng)的故障導(dǎo)致的服務(wù)調(diào)用的不穩(wěn)定;
[0043]S206、服務(wù)代理系統(tǒng)轉(zhuǎn)發(fā)該調(diào)用請求報(bào)文至服務(wù)提供系統(tǒng);
[0044]在S206 之后,執(zhí)行 S207 ;
[0045]S207、服務(wù)代理系統(tǒng)接收服務(wù)提供系統(tǒng)返回的響應(yīng)報(bào)文;
[0046]S208、服務(wù)代理系統(tǒng)根據(jù)預(yù)設(shè)的第二模擬模板處理在S207中接收到的響應(yīng)報(bào)文;
[0047]S209、服務(wù)代理系統(tǒng)將在S208中處理后的響應(yīng)報(bào)文返回至服務(wù)調(diào)用終端。
[0048]進(jìn)一步地,S203中預(yù)先設(shè)置各服務(wù)的服務(wù)名、服務(wù)所包含的各方法的方法名、各方法的輸入?yún)?shù)類型及各方法模擬方式的對應(yīng)關(guān)系具體通過下述方式來實(shí)現(xiàn):
[0049]服務(wù)代理系統(tǒng)訪問預(yù)先設(shè)置的各服務(wù)對應(yīng)的Web服務(wù)描述語言WSDL的地址,獲得各服務(wù)對應(yīng)的WSDL描述;或者服務(wù)代理系統(tǒng)接收服務(wù)的WSDL描述文件獲得此服務(wù)的WSDL描述;服務(wù)代理系統(tǒng)解析每個(gè)服務(wù)對應(yīng)的WSDL描述,獲得此服務(wù)的服務(wù)名、此服務(wù)中包含的所有方法的方法名、各方法的輸入?yún)?shù)類型及輸出參數(shù)的參數(shù)名、參數(shù)類型并存儲(chǔ);服務(wù)代理系統(tǒng)將獲得的每個(gè)服務(wù)的服務(wù)名、所包含的各方法的方法名、各方法的輸入?yún)?shù)類型與設(shè)置的各方法模擬方式對應(yīng)存儲(chǔ)。
[0050]圖3給出了預(yù)先設(shè)置各服務(wù)的服務(wù)名、服務(wù)所包含的各方法的方法名、各方法的輸入?yún)?shù)類型及各方法模擬方式的對應(yīng)關(guān)系的實(shí)現(xiàn)流程:
[0051]S301,服務(wù)代理系統(tǒng)中的WSDL獲取器從操作者接收某個(gè)服務(wù)的WSDL地址或者WSDL描述文件,若WSDL獲取器接收的是WSDL地址,則執(zhí)行S302,若WSDL獲取器接收的是WSDL描述文件,則執(zhí)行S304 ;
[0052]S302, WSDL獲取器訪問接收到的WSDL地址,此WSDL地址例如可以位于服務(wù)提供系統(tǒng)中;然后執(zhí)彳丁 S303 ;
[0053]S303,服務(wù)提供系統(tǒng)向WSDL獲取器返回其請求訪問的WSDL描述文件;
[0054]S304,WSDL獲取器將獲取到的WSDL描述文件發(fā)送至服務(wù)代理系統(tǒng)中的WSDL解析器;
[0055]S305, WSDL解析器解析S304中接收的WSDL描述文件;如服務(wù)中包含的所有的方法、各方法的方法名、各方法的輸入?yún)?shù)類型和輸出參數(shù)的參數(shù)名、參數(shù)類型;
[0056]S306, WSDL解析器將解析出的結(jié)果發(fā)送至數(shù)據(jù)庫訪問對象請求存儲(chǔ)。
[0057]S307,數(shù)據(jù)庫訪問對象將WSDL解析器解析出的結(jié)果放入數(shù)據(jù)庫中存儲(chǔ);
[0058]S308,數(shù)據(jù)庫向操作者返回添加成功的消息;
[0059]S309,數(shù)據(jù)庫接收操作者對添加的該服務(wù)中包含的各方法設(shè)置的模擬方式;
[0060]S310,數(shù)據(jù)庫將該服務(wù)的服務(wù)名、該服務(wù)所包含的各方法的方法名、各方法的輸入?yún)?shù)類型與各方法的模擬方式的對應(yīng)存儲(chǔ)。
[0061]然后,在該服務(wù)中所包含的各個(gè)方法的方法名、各個(gè)方法的輸入?yún)?shù)類型及各個(gè)方法的模擬方式的對應(yīng)關(guān)系全部存入到數(shù)據(jù)庫后,操作者繼續(xù)添加新的服務(wù)以及設(shè)置添加的新的服務(wù)中包含的所有的方法的模擬方式。
[0062]進(jìn)一步地,步驟S204中的第一模擬模板通過下述步驟預(yù)先生成:
[0063]首先,服務(wù)代理系統(tǒng)根據(jù)各服務(wù)的服務(wù)名、服務(wù)所包含的各方法的方法名、各方法的輸入?yún)?shù)類型及各方法的模擬方式的對應(yīng)關(guān)系查找出設(shè)置為全部模擬方式的方法;
[0064]然后,針對設(shè)置為全部模擬方式的每個(gè)方法,由操作者根據(jù)解析得到的該方法的每一個(gè)輸出參數(shù)的參數(shù)類型為其設(shè)置對應(yīng)的參數(shù)值,然后操作者將設(shè)置的輸出參數(shù)的參數(shù)值及對應(yīng)輸出參數(shù)的參數(shù)名、參數(shù)類型作為第一模擬模板保存在數(shù)據(jù)庫中。
[0065]下面對第一模擬模板的格式進(jìn)行舉例說明,圖4給出了一種服務(wù)名為S的服務(wù)中某一方法的第一模擬模板的格式(當(dāng)然本申請實(shí)施例并不限于此種格式),該方法的方法名為F,方法F包含兩個(gè)輸出參數(shù),其參數(shù)名分別為參數(shù)SFl和參數(shù)SF2,參數(shù)SFl的參數(shù)類型為int,參數(shù)SF2的參數(shù)類型為float,操作者根據(jù)參數(shù)SFl的參數(shù)類型int將其參數(shù)值設(shè)為整數(shù)A,根據(jù)參數(shù)SF2的參數(shù)類型float將其值設(shè)為單精度浮點(diǎn)數(shù)B。
[0066]進(jìn)一步地,在步驟S204中,服務(wù)代理系統(tǒng)根據(jù)預(yù)設(shè)的第一模擬模板生成響應(yīng)報(bào)文的具體過程為:
[0067]服務(wù)代理系統(tǒng)首先判斷調(diào)用請求報(bào)文所使用的協(xié)議,然后根據(jù)該調(diào)用請求報(bào)文所使用的協(xié)議生成相應(yīng)格式的響應(yīng)報(bào)文,最后再將存儲(chǔ)的與該調(diào)用請求報(bào)文請求調(diào)用的方法對應(yīng)的第一模擬模板的內(nèi)容填入上述響應(yīng)報(bào)文中。[0068]下面以服務(wù)調(diào)用終端使用SOAP協(xié)議發(fā)送調(diào)用請求報(bào)文為例,說明服務(wù)代理系統(tǒng)根據(jù)上述第一模擬模板生成響應(yīng)報(bào)文的過程:
[0069]首先,服務(wù)代理系統(tǒng)判斷出服務(wù)調(diào)用終端發(fā)送的調(diào)用請求報(bào)文使用的協(xié)議為SOAP協(xié)議;具體的判斷過程例如可以采用下述方式:服務(wù)代理系統(tǒng)可針對不同的協(xié)議預(yù)先配置不同的代理入口,假設(shè)服務(wù)代理系統(tǒng)開啟了兩個(gè)端口 8080、8081,其中8080端口綁定了SOAP協(xié)議,8081端口綁定了 TCP協(xié)議,因此若服務(wù)代理系統(tǒng)的8080端口接收到調(diào)用請求報(bào)文,則認(rèn)為該調(diào)用請求報(bào)文使用SOAP協(xié)議。
[0070]然后,服務(wù)代理系統(tǒng)生成SOAP協(xié)議格式的響應(yīng)報(bào)文,它包含一個(gè)SOAP封套,SOAP封套中包含SOAP報(bào)頭(可以有也可以沒有)和SOAP報(bào)文內(nèi)容(必須有),其中SOAP報(bào)文內(nèi)容為保存在第一模擬模板上的內(nèi)容,而該第一模擬模板的內(nèi)容如圖4所示,因此服務(wù)代理系統(tǒng)返回給服務(wù)調(diào)用終端的響應(yīng)報(bào)文如圖5所示。
[0071]上述全部模擬方式的方法的調(diào)用可以應(yīng)用于不需要關(guān)心服務(wù)提供系統(tǒng)內(nèi)部細(xì)節(jié)的情況,此時(shí)當(dāng)服務(wù)提供系統(tǒng)由于硬件故障或者其他原因宕機(jī)時(shí),服務(wù)代理系統(tǒng)可以直接響應(yīng)服務(wù)調(diào)用系統(tǒng),從而隔離了服務(wù)提供系統(tǒng)對服務(wù)調(diào)用系統(tǒng)的影響,使得在服務(wù)提供系統(tǒng)壓力較大或者宕機(jī)的情況下,研發(fā)測試可以繼續(xù)或者在線提供服務(wù)不會(huì)出故障。
[0072]另外,這種全部模擬方式的情況還可以應(yīng)用于研發(fā)測試環(huán)境中,此時(shí)通過服務(wù)代理系統(tǒng)為服務(wù)調(diào)用系統(tǒng)返回響應(yīng)報(bào)文從而便捷地檢驗(yàn)服務(wù)調(diào)用系統(tǒng)中的一些漏洞。下面以兩個(gè)具體的實(shí)例來說明:
[0073]在某一測試場景中,A系統(tǒng)需要調(diào)用B系統(tǒng)中的某個(gè)服務(wù),則此時(shí)A系統(tǒng)需要設(shè)置一個(gè)超時(shí)時(shí)間t以便A系統(tǒng)在發(fā)送調(diào)用請求報(bào)文之后等待超過t時(shí)間而B系統(tǒng)仍未返回響應(yīng)報(bào)文時(shí)A系統(tǒng)可以主動(dòng)中斷請求。否則,若A系統(tǒng)一直等待B系統(tǒng)的響應(yīng)報(bào)文,會(huì)影響A系統(tǒng)對其他服務(wù)的處理,甚至若A系統(tǒng)調(diào)用的多個(gè)服務(wù)都未得到響應(yīng)的話,那么A系統(tǒng)中等待響應(yīng)的服務(wù)會(huì)越來越多,最終可能導(dǎo)致系統(tǒng)故障。
[0074]而在測試過程中,需要驗(yàn)證此超時(shí)處理機(jī)制是否可靠,因此可以在A系統(tǒng)和B系統(tǒng)之間設(shè)置一個(gè)服務(wù)代理系統(tǒng),A系統(tǒng)通過該服務(wù)代理系統(tǒng)調(diào)用B系統(tǒng)的服務(wù)。在全部模擬的情況下,服務(wù)代理系統(tǒng)的操作者可以在服務(wù)代理系統(tǒng)中設(shè)置一個(gè)響應(yīng)等待時(shí)間tl,其中tl>t,即服務(wù)代理系統(tǒng)在接收到調(diào)用請求報(bào)文后等待tl時(shí)間后再向A系統(tǒng)返回響應(yīng)報(bào)文,若A系統(tǒng)不再對返回的響應(yīng)報(bào)文進(jìn)行處理,則說明A系統(tǒng)設(shè)置了超時(shí)處理機(jī)制;若々系統(tǒng)繼續(xù)對返回的響應(yīng)報(bào)文進(jìn)行處理,則說明A系統(tǒng)未設(shè)置超時(shí)處理機(jī)制。這樣,可以在測試中驗(yàn)證服務(wù)調(diào)用系統(tǒng)是否設(shè)置了超時(shí)處理機(jī)制,或者設(shè)置的超時(shí)處理機(jī)制是否可靠。
[0075]在另一測試場景中,在SOA中,服務(wù)可能分布在各個(gè)系統(tǒng)中,如A系統(tǒng)和B系統(tǒng)分別具有提供某種服務(wù)的能力,服務(wù)調(diào)用系統(tǒng)(A系統(tǒng))請求調(diào)用服務(wù)提供系統(tǒng)(B系統(tǒng))中的服務(wù),在獲取到服務(wù)提供系統(tǒng)(B系統(tǒng))返回的結(jié)果后會(huì)繼續(xù)進(jìn)行自身業(yè)務(wù)的處理,這時(shí)就需要考慮服務(wù)調(diào)用系統(tǒng)(A系統(tǒng))對服務(wù)提供系統(tǒng)(B系統(tǒng))返回的結(jié)果的冪等性控制。如A系統(tǒng)具有為客戶轉(zhuǎn)賬成功后向客戶收取一定費(fèi)用的功能,而B系統(tǒng)具有轉(zhuǎn)賬的服務(wù),A系統(tǒng)需要調(diào)用B系統(tǒng)的轉(zhuǎn)賬服務(wù),A系統(tǒng)在接收到B系統(tǒng)的轉(zhuǎn)賬成功的結(jié)果后直接對客戶進(jìn)行扣費(fèi),在測試時(shí)需要考慮的是對于客戶的同一轉(zhuǎn)賬操作,轉(zhuǎn)賬成功后只能扣費(fèi)一次。而在服務(wù)調(diào)用過程中,B系統(tǒng)可能會(huì)將轉(zhuǎn)賬成功的結(jié)果多次返回到A系統(tǒng),這里就需要A系統(tǒng)有冪等性控制,即針對同一轉(zhuǎn)賬操作,不論A系統(tǒng)收到幾次B系統(tǒng)返回的轉(zhuǎn)賬成功的結(jié)果,A系統(tǒng)都只扣費(fèi)一次。在驗(yàn)證A系統(tǒng)是否具有冪等性控制時(shí),就可以通過在A系統(tǒng)和B系統(tǒng)之間設(shè)置服務(wù)代理系統(tǒng),A系統(tǒng)通過服務(wù)代理系統(tǒng)調(diào)用B系統(tǒng)的轉(zhuǎn)賬服務(wù),B系統(tǒng)通過服務(wù)代理系統(tǒng)向A系統(tǒng)返回轉(zhuǎn)賬成功的結(jié)果,可以很方便地在服務(wù)代理系統(tǒng)中設(shè)置向A系統(tǒng)返回轉(zhuǎn)賬成功的結(jié)果的次數(shù),以模擬B系統(tǒng)將轉(zhuǎn)賬成功的結(jié)果多次返回到A系統(tǒng)的場景。然后根據(jù)A系統(tǒng)對同一轉(zhuǎn)賬操作的扣費(fèi)次數(shù)來判斷A系統(tǒng)是否具有冪等性控制。
[0076]進(jìn)一步地,在步驟S206中,服務(wù)代理系統(tǒng)轉(zhuǎn)發(fā)該調(diào)用請求報(bào)文至服務(wù)提供系統(tǒng)的具體過程如圖6所示:
[0077]S601、服務(wù)代理系統(tǒng)查找請求調(diào)用的方法的轉(zhuǎn)發(fā)至服務(wù)提供系統(tǒng)的地址;
[0078]其具體過程為,服務(wù)代理系統(tǒng)根據(jù)調(diào)用請求報(bào)文的源IP、服務(wù)名、方法名和輸入?yún)?shù)類型,在預(yù)先存儲(chǔ)的服務(wù)名、方法名、輸入?yún)?shù)類型、調(diào)用請求報(bào)文的源IP與服務(wù)提供系統(tǒng)的地址的對應(yīng)關(guān)系中查找調(diào)用請求報(bào)文需要轉(zhuǎn)發(fā)至服務(wù)提供系統(tǒng)的地址;
[0079]在研發(fā)測試中,服務(wù)提供系統(tǒng)以及服務(wù)調(diào)用系統(tǒng)中可能有多個(gè)研發(fā)任務(wù)同時(shí)進(jìn)行,例如當(dāng)有兩個(gè)研發(fā)任務(wù),任務(wù)I和任務(wù)2,同時(shí)進(jìn)行時(shí),服務(wù)提供系統(tǒng)中的一部分終端為任務(wù)I提供服務(wù)調(diào)用,另一部分終端為任務(wù)2提供服務(wù)調(diào)用,服務(wù)調(diào)用系統(tǒng)中的一部分終端進(jìn)行任務(wù)I的研發(fā),另一部分終端進(jìn)行任務(wù)2的研發(fā),研發(fā)測試人員希望在處理服務(wù)調(diào)用時(shí),由研發(fā)任務(wù)I而發(fā)出的調(diào)用請求報(bào)文僅由研發(fā)任務(wù)I的系統(tǒng)來處理,由研發(fā)任務(wù)I而發(fā)出的調(diào)用請求報(bào)文僅由研發(fā)任務(wù)I的系統(tǒng)來處理,因此在查找調(diào)用請求報(bào)文轉(zhuǎn)發(fā)至服務(wù)提供系統(tǒng)的地址時(shí)就需要知道調(diào)用請求報(bào)文的源IP ;并且由于同一個(gè)服務(wù)中可能會(huì)包含方法名相同的兩個(gè)方法,這兩個(gè)方法唯一的區(qū)別是它們的輸入?yún)?shù)類型不同,因此服務(wù)提供系統(tǒng)必須根據(jù)服務(wù)名、方法名、輸入?yún)?shù)類型三種信息才能判斷服務(wù)調(diào)用終端究竟要調(diào)用哪一個(gè)方法。因此,在此步驟中查找請求調(diào)用的方法的轉(zhuǎn)發(fā)至服務(wù)提供系統(tǒng)的地址不能僅僅根據(jù)方法名來查找,而要首先根據(jù)調(diào)用請求報(bào)文的源IP來判斷該調(diào)用請求報(bào)文要由服務(wù)提供系統(tǒng)中的那些終端來處理,再根據(jù)服務(wù)名,方法名以及輸入?yún)?shù)類型首先判斷服務(wù)調(diào)用系統(tǒng)究竟要調(diào)用哪個(gè)方法,然后再在服務(wù)提供系統(tǒng)中處理該調(diào)用請求報(bào)文的那些終端中查找處理該請求調(diào)用的方法的地址。
[0080]若查找到,則執(zhí)行步驟S602,若查找不到,則執(zhí)行步驟S603 ;
[0081]在步驟S602中,服務(wù)代理系統(tǒng)轉(zhuǎn)發(fā)調(diào)用請求報(bào)文至查找到的服務(wù)提供系統(tǒng)的地址;
[0082]在步驟S603中,服務(wù)代理系統(tǒng)判斷是否預(yù)先設(shè)置了默認(rèn)轉(zhuǎn)發(fā)地址,若是,則執(zhí)行步驟S604,若否,則執(zhí)行步驟S605 ;
[0083]在步驟S604中,服務(wù)代理系統(tǒng)轉(zhuǎn)發(fā)調(diào)用請求報(bào)文至默認(rèn)轉(zhuǎn)發(fā)地址;
[0084]在步驟S605中,服務(wù)代理系統(tǒng)向服務(wù)調(diào)用終端返回錯(cuò)誤告警信息。
[0085]進(jìn)一步地,步驟S208中的第二模擬模板通過下列步驟生成:
[0086]首先,服務(wù)代理系統(tǒng)根據(jù)各服務(wù)的服務(wù)名、服務(wù)所包含的各方法的方法名、各方法的輸入?yún)?shù)類型及各方法的模擬方式的對應(yīng)關(guān)系查找出設(shè)置為部分模擬方式的方法;
[0087]然后,針對設(shè)置為部分模擬方式的每個(gè)方法,操作者首先決定該方法的全部輸出參數(shù)中的那些輸出參數(shù)需要模擬,然后再為需要模擬的輸出參數(shù)根據(jù)其參數(shù)類型設(shè)置相應(yīng)的參數(shù)值,最后將需要模擬的輸出參數(shù)的參數(shù)名、參數(shù)類型及設(shè)置的對應(yīng)的參數(shù)值保存為第二模擬模板。[0088]圖7給出了服務(wù)名為S的服務(wù)中某一方法的第二模擬模板的格式(當(dāng)然本申請實(shí)施例并不限于此種格式),該方法的方法名為M,包含三個(gè)輸出參數(shù),其參數(shù)名分別為參數(shù)SM1、參數(shù)SM2和參數(shù)SM3,參數(shù)SMl的參數(shù)類型為int,參數(shù)SM2的參數(shù)類型為float,參數(shù)SM3的參數(shù)類型為double,首先,操作者確定在該方法M的所有輸出參數(shù)中僅需要模擬SM3,因此操作者根據(jù)參數(shù)SM3的參數(shù)類型double將其參數(shù)值設(shè)為雙精度浮點(diǎn)數(shù)D,因此該方法M的第二模擬模板僅保存了服務(wù)S、方法M以及輸出參數(shù)SM3的參數(shù)名、參數(shù)類型以及參數(shù)值的內(nèi)容。
[0089]進(jìn)一步地,在步驟S208中,服務(wù)代理系統(tǒng)根據(jù)預(yù)設(shè)的第二模擬模板處理在步驟S207中接收到的響應(yīng)報(bào)文的具體過程為:
[0090]服務(wù)代理系統(tǒng)將該響應(yīng)報(bào)文所包含的與第二模擬模板所包含的輸出參數(shù)的參數(shù)名一致的輸出參數(shù)的參數(shù)值修改為與第二模擬模板中該輸出參數(shù)的參數(shù)名對應(yīng)的參數(shù)值。
[0091]下面仍然以服務(wù)調(diào)用終端使用SOAP協(xié)議發(fā)送調(diào)用請求報(bào)文,請求調(diào)用的方法為服務(wù)S中的方法M為例,說明服務(wù)代理系統(tǒng)根據(jù)第二模擬模板處理在S207中接收到的響應(yīng)報(bào)文的過程:
[0092]服務(wù)代理系統(tǒng)在S207中接收到的服務(wù)提供系統(tǒng)返回的響應(yīng)報(bào)文如圖8所示,其中SOAP報(bào)文的內(nèi)容包括服務(wù)S、方法M和三個(gè)輸出參數(shù)的參數(shù)名、參數(shù)類型以及相應(yīng)的參數(shù)值,參數(shù)SMl的參數(shù)類型為int,其參數(shù)值為整數(shù)J,參數(shù)SM2的參數(shù)類型為float,其參數(shù)值為單精度浮點(diǎn)數(shù)K,參數(shù)SM3的參數(shù)類型為double,其參數(shù)值為雙精度浮點(diǎn)數(shù)L。
[0093]然后,服務(wù)代理系統(tǒng)11根據(jù)圖7所示的第二模擬模板將在S207中接收到的響應(yīng)報(bào)文中的參數(shù)SM3的參數(shù)值由雙精度浮點(diǎn)數(shù)L替換為操作者為參數(shù)SM3設(shè)置的參數(shù)值雙精度浮點(diǎn)數(shù)D,即根據(jù)圖7所示的第二模擬模板處理后的SOAP報(bào)文如圖9所示,處理前與處理后的SOAP報(bào)文的區(qū)別是參數(shù)SM3的參數(shù)值不同了,處理前參數(shù)SM3的參數(shù)值為L,處理后參數(shù)SM3的參數(shù)值為D。
[0094]在應(yīng)用時(shí)對于復(fù)雜的服務(wù),一個(gè)方法的輸出參數(shù)通常會(huì)比較多,操作者要完整設(shè)置模擬全部輸出參數(shù)工作量會(huì)比較大,因此這里借助服務(wù)提供系統(tǒng)返回的響應(yīng)報(bào)文,操作者只需設(shè)置自己需要模擬的輸出參數(shù)即可,這樣一方面可以保證返回的輸出參數(shù)的完整性,另一方面也克服了模擬所有輸出參數(shù)比較繁瑣的問題。
[0095]下面以一個(gè)具體的實(shí)例來說明:A系統(tǒng)可以提供一種服務(wù)AS,此服務(wù)的輸出參數(shù)有ASF1、ASF2,其中ASFl處理該服務(wù)得到的真實(shí)數(shù)據(jù),ASF2為對該服務(wù)進(jìn)行處理的結(jié)果狀態(tài),可能有ASF21、ASF22幾種返回值;而當(dāng)B系統(tǒng)需要調(diào)用A系統(tǒng)的服務(wù)AS時(shí),B系統(tǒng)需要對調(diào)用AS可能出現(xiàn)的各種結(jié)果狀態(tài)進(jìn)行處理,而在實(shí)際應(yīng)用中B系統(tǒng)是不了解A系統(tǒng)的服務(wù)AS的具體實(shí)現(xiàn)細(xì)節(jié)的,在沒有服務(wù)代理系統(tǒng)時(shí)若需要模擬AS服務(wù)的各種結(jié)果狀態(tài)勢必需要投入了解AS服務(wù)的實(shí)現(xiàn)細(xì)節(jié)才能夠準(zhǔn)確模擬出來,而若采用全部模擬的方式由于方法AS的輸出參數(shù)ASFl內(nèi)容可能會(huì)非常復(fù)雜,要全部模擬,設(shè)置起來會(huì)非常繁瑣。因此采用部分模擬,即只設(shè)置需要模擬的輸出參數(shù),其余輸出參數(shù)的內(nèi)容仍然由A系統(tǒng)在響應(yīng)該方法時(shí)生成,從而簡化模板設(shè)置,提高效率。
[0096]例如,A系統(tǒng)提供的服務(wù)AS為查看用戶賬號余額的服務(wù),B系統(tǒng)調(diào)用A系統(tǒng)的服務(wù)AS時(shí),A系統(tǒng)向B系統(tǒng)返回所查看的用戶賬號的余額(對應(yīng)輸出參數(shù)ASF1),并向B系統(tǒng)返回該用戶賬號的狀態(tài)(對應(yīng)輸出參數(shù)ASF2),如當(dāng)該用戶賬號的余額不足10元時(shí),向B系統(tǒng)返回余額不足的信息(對應(yīng)ASF21 ),而當(dāng)該用戶賬號的余額超過某一規(guī)定額度時(shí),向B系統(tǒng)返回余額超限的信息(對應(yīng)ASF22),由于B系統(tǒng)需要對調(diào)用AS可能出現(xiàn)的各種結(jié)果狀態(tài)進(jìn)行處理,因此在A系統(tǒng)和B系統(tǒng)之間設(shè)置服務(wù)代理系統(tǒng),A系統(tǒng)將B系統(tǒng)調(diào)用的服務(wù)AS的輸出參數(shù)ASFl和ASF2通過代理系統(tǒng)返回給B系統(tǒng),采用部分模擬的方式,服務(wù)代理系統(tǒng)可以修改ASF2的值以便模擬服務(wù)AS的各種結(jié)果狀態(tài),檢驗(yàn)B系統(tǒng)是否能對不同的結(jié)果狀態(tài)做出正確處理,如B系統(tǒng)收到余額不足的信息時(shí),是否能提示用戶充值,或者在收到余額超限的信息時(shí),是否能提示用戶處理賬戶以使余額不再超限。而對服務(wù)AS的輸出參數(shù)ASF1,代理系統(tǒng)可以直接采用A系統(tǒng)在處理該服務(wù)時(shí)生成的值,不必在模擬ASFl的參數(shù)值。
[0097]在軟件測試過程中,采用服務(wù)代理系統(tǒng)的優(yōu)點(diǎn)是可以方便的模擬A系統(tǒng)中服務(wù)AS輸出結(jié)果的各種狀態(tài)值,以檢驗(yàn)B系統(tǒng)對服務(wù)AS所有返回的結(jié)果狀態(tài)能否正確處理,以降低漏洞發(fā)生的概率,該漏洞是指B系統(tǒng)對服務(wù)AS返回的結(jié)果狀態(tài)不能正確處理。服務(wù)代理系統(tǒng)可以更為方便的得到服務(wù)AS的各種返回的結(jié)果狀態(tài),從而提高研發(fā)效率,常規(guī)測試方式如Debug也能做到這種程度的測試模擬,但是其模擬成本會(huì)非常高。
[0098]較佳地,本發(fā)明實(shí)施例提供的一種Web服務(wù)模擬的方法還包括調(diào)用請求報(bào)文中請求調(diào)用的方法被設(shè)置為非模擬方式的情況,在這種情況下,服務(wù)代理系統(tǒng)直接轉(zhuǎn)發(fā)調(diào)用請求報(bào)文至服務(wù)提供系統(tǒng),其轉(zhuǎn)發(fā)的具體過程與圖6中所示的過程類似,在此不再贅述;服務(wù)提供系統(tǒng)在接收到轉(zhuǎn)發(fā)的調(diào)用請求報(bào)文后,進(jìn)行正常處理,然后向服務(wù)代理系統(tǒng)返回響應(yīng)報(bào)文,服務(wù)代理系統(tǒng)對該響應(yīng)報(bào)文不作任何額外處理直接轉(zhuǎn)發(fā)至服務(wù)調(diào)用終端。
[0099]下面以基于SOAP的Web服務(wù)為例,說明本發(fā)明實(shí)施例提供的一種Web服務(wù)模擬的方法在具體應(yīng)用時(shí)進(jìn)行服務(wù)模擬的過程,如圖10所示,該過程包括以下步驟:
[0100]S1001、服務(wù)調(diào)用系統(tǒng)中的某個(gè)服務(wù)調(diào)用終端發(fā)出基于SOAP協(xié)議的調(diào)用請求報(bào)文,
[0101]由于服務(wù)調(diào)用系統(tǒng)已經(jīng)將需要訪問的服務(wù)提供系統(tǒng)中的地址修改為服務(wù)代理系統(tǒng)中的地址,因此服務(wù)調(diào)用系統(tǒng)發(fā)出調(diào)用請求報(bào)文后,實(shí)際上是SOAP調(diào)用請求報(bào)文直接發(fā)送到服務(wù)代理系統(tǒng)中的接收地址;
[0102]S1002、服務(wù)代理系統(tǒng)中的報(bào)文攔截器攔截SOAP調(diào)用請求報(bào)文;
[0103]S1003、報(bào)文攔截器發(fā)送SOAP調(diào)用請求報(bào)文至服務(wù)代理系統(tǒng)中的報(bào)文解析器102 ;
[0104]S1004、報(bào)文解析器取出調(diào)用請求報(bào)文的源IP及其中的SOAP消息并解析該SOAP消息,得到服務(wù)名、方法名和輸入?yún)?shù)類型,并根據(jù)預(yù)先存儲(chǔ)在數(shù)據(jù)庫(圖10中未示出)中的各服務(wù)的服務(wù)名、服務(wù)所包含的各方法的方法名、各方法的輸入?yún)?shù)類型及各方法的模擬方式的對應(yīng)關(guān)系查找出請求調(diào)用的方法的模擬方式;
[0105]S1005、報(bào)文解析器發(fā)送SOAP調(diào)用請求報(bào)文、源IP、解析出的請求調(diào)用的服務(wù)名、方法名、輸入?yún)?shù)類型以及查找到的請求調(diào)用的方法的模擬方式至服務(wù)代理系統(tǒng)中的報(bào)文轉(zhuǎn)發(fā)器;
[0106]若請求調(diào)用的方法被設(shè)置為全部模擬方式則執(zhí)行S1006 ;若請求調(diào)用的方法被設(shè)置為部分模擬或者非模擬方式則執(zhí)行S1007 ;
[0107]S1006、報(bào)文轉(zhuǎn)發(fā)器轉(zhuǎn)發(fā)SOAP調(diào)用請求報(bào)文至服務(wù)代理系統(tǒng)中的報(bào)文構(gòu)造器;
[0108]S1007、報(bào)文轉(zhuǎn)發(fā)器根據(jù)預(yù)先存儲(chǔ)在數(shù)據(jù)庫中的服務(wù)名、方法名、輸入?yún)?shù)類型、調(diào)用請求報(bào)文的源IP以及轉(zhuǎn)發(fā)至服務(wù)提供系統(tǒng)的地址的對應(yīng)關(guān)系查找出被設(shè)置為部分模擬方式或非模擬方式的請求調(diào)用的方法的轉(zhuǎn)發(fā)至服務(wù)提供系統(tǒng)的地址;
[0109]S1008、報(bào)文轉(zhuǎn)發(fā)器轉(zhuǎn)發(fā)SOAP調(diào)用請求報(bào)文至S1007中查找到的地址;若在S1007中沒有查找到轉(zhuǎn)發(fā)至服務(wù)提供系統(tǒng)的地址,并且也沒有預(yù)設(shè)的默認(rèn)地址,則向服務(wù)調(diào)用系統(tǒng)返回錯(cuò)誤告警信息,這種情況在圖10中未示出;
[0110]S1009,報(bào)文構(gòu)造器在接收到調(diào)用請求報(bào)文后,根據(jù)該請求調(diào)用的方法所對應(yīng)的存儲(chǔ)在數(shù)據(jù)庫中的第一模擬模板生成響應(yīng)報(bào)文;
[0111]S1010,報(bào)文構(gòu)造器將響應(yīng)報(bào)文發(fā)送至報(bào)文轉(zhuǎn)發(fā)器;
[0112]S1011、報(bào)文轉(zhuǎn)發(fā)器轉(zhuǎn)發(fā)響應(yīng)報(bào)文至服務(wù)調(diào)用系統(tǒng)中的發(fā)出調(diào)用請求報(bào)文的服務(wù)調(diào)用終端;
[0113]S1012、服務(wù)提供系統(tǒng)根據(jù)接收到的調(diào)用請求報(bào)文生成響應(yīng)報(bào)文;
[0114]S1013、服務(wù)提供系統(tǒng)將生成的響應(yīng)報(bào)文返回至報(bào)文轉(zhuǎn)發(fā)器;
[0115]若請求調(diào)用的方法被設(shè)置為部分模擬方式,則執(zhí)行S1014 ;若請求調(diào)用的方法被設(shè)置為非模擬方式,則執(zhí)行S1015 ;
[0116]S1014、報(bào)文轉(zhuǎn)發(fā)器將接收到的響應(yīng)報(bào)文轉(zhuǎn)發(fā)至報(bào)文構(gòu)造器;
[0117]S1015、報(bào)文轉(zhuǎn)發(fā)器將接收到的響應(yīng)報(bào)文轉(zhuǎn)發(fā)至服務(wù)提供系統(tǒng)中的發(fā)送調(diào)用請求報(bào)文的服務(wù)調(diào)用終端;
[0118]S1016、報(bào)文構(gòu)造器根據(jù)存儲(chǔ)在數(shù)據(jù)庫中的與該請求調(diào)用的方法相對應(yīng)的第二模擬模板處理S1014中接收到的響應(yīng)報(bào)文;
[0119]S1017、報(bào)文構(gòu)造器將處理過的響應(yīng)報(bào)文發(fā)送至報(bào)文轉(zhuǎn)發(fā)器;
[0120]S1018、報(bào)文轉(zhuǎn)發(fā)器將接收到的響應(yīng)報(bào)文轉(zhuǎn)發(fā)至服務(wù)調(diào)用系統(tǒng)中的發(fā)送調(diào)用請求報(bào)文的服務(wù)調(diào)用終端。
[0121]基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例還提供了一種服務(wù)代理系統(tǒng)和Web服務(wù)模擬的系統(tǒng)。
[0122]本發(fā)明實(shí)施例提供的一種服務(wù)代理系統(tǒng),如圖11所示,包括:
[0123]報(bào)文攔截模塊111,用于攔截服務(wù)調(diào)用終端發(fā)出的調(diào)用請求報(bào)文;
[0124]報(bào)文解析模塊112,用于解析出所述調(diào)用請求報(bào)文包含服務(wù)名、方法名、輸入?yún)?shù)類型,并根據(jù)預(yù)設(shè)的各服務(wù)的服務(wù)名、服務(wù)所包含的各方法的方法名、各方法的輸入?yún)?shù)類型及各方法模擬方式的對應(yīng)關(guān)系查找所述方法的模擬方式;
[0125]報(bào)文構(gòu)造模塊113,用于在所述方法被設(shè)置為全部模擬方式時(shí),根據(jù)預(yù)設(shè)的第一模擬模板生成響應(yīng)報(bào)文,并用于在所述方法被設(shè)置為部分模擬方式時(shí)以及接收到所述服務(wù)提供系統(tǒng)返回的響應(yīng)報(bào)文后,按照預(yù)設(shè)的第二模擬模板對接收到的響應(yīng)報(bào)文進(jìn)行處理;
[0126]報(bào)文轉(zhuǎn)發(fā)模塊114,用于轉(zhuǎn)發(fā)所述報(bào)文構(gòu)造模塊根據(jù)所述的第一模擬模板生成的響應(yīng)報(bào)文至所述服務(wù)調(diào)用終端;以及在所述方法被設(shè)置為部分模擬方式時(shí),轉(zhuǎn)發(fā)該調(diào)用請求報(bào)文至服務(wù)提供系統(tǒng)12,并轉(zhuǎn)發(fā)所述報(bào)文構(gòu)造模塊根據(jù)所述第二模擬模板處理后的響應(yīng)報(bào)文至所述服務(wù)調(diào)用終端。
[0127]進(jìn)一步地,圖11所示的本發(fā)明實(shí)施例提供的服務(wù)代理系統(tǒng)還包括:
[0128]WSDL獲取模塊115,用于訪問預(yù)先設(shè)置的各服務(wù)對應(yīng)的WSDL的地址,獲得各服務(wù)對應(yīng)的WSDL描述;或者用于接收服務(wù)的WSDL描述文件獲得此服務(wù)的WSDL描述;
[0129]WSDL解析模塊116,用于解析每個(gè)服務(wù)對應(yīng)的WSDL描述,獲得此服務(wù)的服務(wù)名、此服務(wù)中包含的所有方法的方法名、各方法的輸入?yún)?shù)類型和輸出參數(shù)的參數(shù)名及參數(shù)類型;
[0130]存儲(chǔ)摸塊117,用于存儲(chǔ)獲得的每個(gè)服務(wù)的服務(wù)名、所包含的各方法的方法名、各方法的輸入?yún)?shù)類型和輸出參數(shù)的參數(shù)名及參數(shù)類型,并用于存儲(chǔ)各服務(wù)的服務(wù)名、服務(wù)所包含的各方法的方法名、各方法的輸入?yún)?shù)類型與設(shè)置的各方法模擬方式的對應(yīng)關(guān)系;
[0131]在具體應(yīng)用時(shí),存儲(chǔ)模塊117既可以是數(shù)據(jù)庫也可以是能夠?qū)崿F(xiàn)存儲(chǔ)功能的其他模塊,如果存儲(chǔ)模塊117時(shí)數(shù)據(jù)庫,則該服務(wù)代理系統(tǒng)中還可以包括數(shù)據(jù)庫訪問對象,用于對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行讀取和存儲(chǔ)的管理。
[0132]進(jìn)一步地,圖11所示的本發(fā)明實(shí)施例提供的服務(wù)代理系統(tǒng),還包括:
[0133]第一模擬模板生成模塊118,用于根據(jù)各服務(wù)的服務(wù)名、服務(wù)所包含的各方法的方法名、各方法的輸入?yún)?shù)類型及各方法的模擬方式的對應(yīng)關(guān)系查找出被設(shè)置為全部模擬方式的方法,并針對被設(shè)置為全部模擬方式的每個(gè)方法,根據(jù)該方法的每一個(gè)輸出參數(shù)的參數(shù)類型設(shè)置對應(yīng)參數(shù)值,將設(shè)置的輸出參數(shù)的參數(shù)值及對應(yīng)輸出參數(shù)的參數(shù)名、參數(shù)類型保存為第一模擬模板;
[0134]第二模擬模板生成模塊119,用于根據(jù)各服務(wù)的服務(wù)名、服務(wù)所包含的各方法的方法名、各方法的輸入?yún)?shù)類型及各方法的模擬方式的對應(yīng)關(guān)系查找出被設(shè)置為部分模擬方式的方法;并針對被設(shè)置為部分模擬方式的每個(gè)方法,根據(jù)該方法的全部輸出參數(shù)中的需要模擬的輸出參數(shù)的參數(shù)類型設(shè)置相應(yīng)的參數(shù)值,將需要模擬的輸出參數(shù)的參數(shù)名、參數(shù)類型及設(shè)置的對應(yīng)的參數(shù)值保存為第二模擬模板。
[0135]進(jìn)一步地,存儲(chǔ)模塊117還用于存儲(chǔ)被設(shè)置為全部模擬方式的各方法的第一模擬模板,并用于存儲(chǔ)被設(shè)置為部分模擬方式的各方法的第二模擬模板。
[0136]進(jìn)一步地,報(bào)文轉(zhuǎn)發(fā)模塊114,具體用于根據(jù)調(diào)用請求報(bào)文中包含的服務(wù)名、方法名、輸入?yún)?shù)類型和源IP地址,在預(yù)先存儲(chǔ)的服務(wù)名、方法名、輸入?yún)?shù)類型和源IP與轉(zhuǎn)發(fā)至服務(wù)提供系統(tǒng)的地址的對應(yīng)關(guān)系中查找所述調(diào)用請求報(bào)文請求調(diào)用的方法的轉(zhuǎn)發(fā)至服務(wù)提供系統(tǒng)的地址;若查找不到,則向服務(wù)調(diào)用終端返回錯(cuò)誤告警信息或?qū)⒄{(diào)用請求報(bào)文轉(zhuǎn)發(fā)至默認(rèn)轉(zhuǎn)發(fā)地址;若查找到,則將調(diào)用請求報(bào)文轉(zhuǎn)發(fā)至查找到的服務(wù)提供系統(tǒng)的地址。
[0137]進(jìn)一步地,報(bào)文構(gòu)造模塊114,具體用于在調(diào)用請求報(bào)文請求調(diào)用的方法被設(shè)置為全部模擬方式時(shí),根據(jù)所述調(diào)用請求報(bào)文所使用的協(xié)議,生成相應(yīng)格式的響應(yīng)報(bào)文,并將存儲(chǔ)的與所述調(diào)用請求報(bào)文請求調(diào)用的方法對應(yīng)的第一模擬模板的內(nèi)容填入該報(bào)文中;并用于在調(diào)用請求報(bào)文請求調(diào)用的方法被設(shè)置為部分模擬方式以及接收到服務(wù)提供系統(tǒng)返回的響應(yīng)報(bào)文后,將該響應(yīng)報(bào)文所包含的與存儲(chǔ)的第二模擬模板所包含的輸出參數(shù)的參數(shù)名和參數(shù)類型一致的輸出參數(shù)的參數(shù)值修改為與該第二模擬模板中該輸出參數(shù)的參數(shù)名和參數(shù)類型對應(yīng)的參數(shù)值。
[0138]較佳地,報(bào)文轉(zhuǎn)發(fā)模塊114還用于在調(diào)用請求報(bào)文請求調(diào)用的方法被設(shè)置為非模擬方式時(shí),轉(zhuǎn)發(fā)調(diào)用請求報(bào)文至服務(wù)提供系統(tǒng)12,并在接收到服務(wù)提供系統(tǒng)12返回的響應(yīng)報(bào)文后,對接收到的響應(yīng)報(bào)文不做額外的處理直接返回至服務(wù)調(diào)用終端。
[0139]本發(fā)明實(shí)施例提供的Web服務(wù)模擬的系統(tǒng),如圖12所示,包括:
[0140]本發(fā)明實(shí)施例提供的上述服務(wù)代理系統(tǒng)11 ;
[0141]服務(wù)提供系統(tǒng)12,用于接收到服務(wù)代理系統(tǒng)11轉(zhuǎn)發(fā)的調(diào)用請求報(bào)文時(shí),生成響應(yīng)報(bào)文返回至所述服務(wù)代理系統(tǒng)。
[0142]本發(fā)明實(shí)施例提供的服務(wù)代理系統(tǒng)11針對不同的通信協(xié)議對外提供不同的模擬接口,即它可以解析不同通信協(xié)議的調(diào)用請求報(bào)文,也就是說當(dāng)服務(wù)調(diào)用終端需要調(diào)用某方法時(shí),發(fā)送的調(diào)用請求報(bào)文不局限于某一種通信協(xié)議。
[0143]顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
【權(quán)利要求】
1.一種Web服務(wù)模擬的方法,其特征在于,包括: 服務(wù)代理系統(tǒng)攔截服務(wù)調(diào)用終端發(fā)出的調(diào)用請求報(bào)文,解析出調(diào)用請求報(bào)文包含的服務(wù)名、方法名和輸入?yún)?shù)類型,并根據(jù)預(yù)設(shè)的各服務(wù)的服務(wù)名、服務(wù)所包含的各方法的方法名、各方法的輸入?yún)?shù)類型及各方法模擬方式的對應(yīng)關(guān)系查找所述調(diào)用請求報(bào)文請求調(diào)用的方法對應(yīng)的模擬方式; 若查找結(jié)果為全部模擬方式,則所述服務(wù)代理系統(tǒng)根據(jù)預(yù)設(shè)的第一模擬模板生成響應(yīng)報(bào)文并返回至所述服務(wù)調(diào)用終端; 若查找結(jié)果為部分模擬方式,則所述服務(wù)代理系統(tǒng)轉(zhuǎn)發(fā)該調(diào)用請求報(bào)文至服務(wù)提供系統(tǒng),在接收到所述服務(wù)提供系統(tǒng)返回的響應(yīng)報(bào)文后,按照預(yù)設(shè)的第二模擬模板對接收到的響應(yīng)報(bào)文進(jìn)行處理后返回至服務(wù)調(diào)用終端。
2.如權(quán)利要求1所述的方法,其特征在于,各服務(wù)的服務(wù)名、服務(wù)所包含的各方法的方法名、各方法的輸入?yún)?shù)類型及各方法模擬方式的對應(yīng)關(guān)系通過下述方式預(yù)先設(shè)置: 服務(wù)代理系統(tǒng)訪問預(yù)先設(shè)置的各服務(wù)對應(yīng)的Web服務(wù)描述語言WSDL的地址,獲得各服務(wù)對應(yīng)的WSDL描述; 或者服務(wù)代理系統(tǒng)接收服務(wù)的WSDL描述文件獲得此服務(wù)的WSDL描述; 服務(wù)代理系統(tǒng)解析每個(gè)服務(wù)對應(yīng)的WSDL描述,獲得此服務(wù)的服務(wù)名、此服務(wù)中包含的所有方法的方法名、各方法的輸入?yún)?shù)類型及輸出參數(shù)的參數(shù)名、參數(shù)類型并存儲(chǔ); 服務(wù)代理系統(tǒng)將獲得的每個(gè)服務(wù)的服務(wù)名、所包含的各方法的方法名、各方法的輸入?yún)?shù)類型與設(shè)置的各方法模擬方式對應(yīng)存儲(chǔ)。
3.如權(quán)利要求2所述的方法, 其特征在于,所述第一模擬模板通過下述方式預(yù)先生成: 服務(wù)代理系統(tǒng)查找出各服務(wù)中被設(shè)置為全部模擬方式的方法; 針對被設(shè)置為全部模擬方式的每個(gè)方法,根據(jù)該方法的輸出參數(shù)的參數(shù)類型設(shè)置對應(yīng)的參數(shù)值,將設(shè)置的參數(shù)值及對應(yīng)輸出參數(shù)的參數(shù)名、參數(shù)類型保存為第一模擬模板。
4.如權(quán)利要求3所述的方法,其特征在于,所述服務(wù)代理系統(tǒng)根據(jù)預(yù)設(shè)的第一模擬模板生成響應(yīng)報(bào)文,具體包括: 所述服務(wù)代理系統(tǒng)根據(jù)所述調(diào)用請求報(bào)文所使用的協(xié)議,生成相應(yīng)格式的響應(yīng)報(bào)文,并將存儲(chǔ)的與所述調(diào)用請求報(bào)文請求調(diào)用的方法對應(yīng)的第一模擬模板的內(nèi)容填入所述報(bào)文中。
5.如權(quán)利要求1所述的方法,其特征在于,所述服務(wù)代理系統(tǒng)轉(zhuǎn)發(fā)該調(diào)用請求報(bào)文至服務(wù)提供系統(tǒng),具體包括: 所述服務(wù)代理系統(tǒng)根據(jù)所述調(diào)用請求報(bào)文中包含的源IP、服務(wù)名、方法名和輸入?yún)?shù)類型,在預(yù)先存儲(chǔ)的服務(wù)名、方法名、輸入?yún)?shù)類型、調(diào)用請求報(bào)文的源IP與服務(wù)提供系統(tǒng)的地址的對應(yīng)關(guān)系中查找所述調(diào)用請求報(bào)文所需轉(zhuǎn)發(fā)的服務(wù)提供系統(tǒng)的地址; 若查找不到,則向服務(wù)調(diào)用終端返回錯(cuò)誤告警信息或?qū)⑺稣{(diào)用請求報(bào)文轉(zhuǎn)發(fā)至預(yù)先設(shè)置的默認(rèn)轉(zhuǎn)發(fā)地址; 若查找到,則按照查找到的服務(wù)提供系統(tǒng)的地址轉(zhuǎn)發(fā)所述調(diào)用請求報(bào)文。
6.如權(quán)利要求2所述的方法,其特征在于,所述第二模擬模板通過下述方式生成: 服務(wù)代理系統(tǒng)查找出各服務(wù)中被設(shè)置為部分模擬方式的方法; 針對被設(shè)置為部分模擬方式的每個(gè)方法,根據(jù)該方法的全部輸出參數(shù)中的需要模擬的輸出參數(shù)的參數(shù)類型設(shè)置相應(yīng)的參數(shù)值,將需要模擬的輸出參數(shù)的參數(shù)名、參數(shù)類型及對應(yīng)的參數(shù)值保存為第二模擬模板。
7.如權(quán)利要求6所述的方法,其特征在于,按照預(yù)設(shè)的第二模擬模板對接收到的響應(yīng)報(bào)文進(jìn)行處理,具體包括: 將服務(wù)提供系統(tǒng)返回的響應(yīng)報(bào)文所包含的與所述第二模擬模板所包含的輸出參數(shù)的參數(shù)名一致的輸出參數(shù)的參數(shù)值修改為與所述第二模擬模板中該輸出參數(shù)的參數(shù)名對應(yīng)的參數(shù)值。
8.如權(quán)利要求1-7任一項(xiàng)所述的方法,其特征在于,還包括: 若所述方法被設(shè)置為非模擬方式,則服務(wù)代理系統(tǒng)轉(zhuǎn)發(fā)所述調(diào)用請求報(bào)文至服務(wù)提供系統(tǒng),并在接收到服務(wù)提供系統(tǒng)返回的響應(yīng)報(bào)文后,將接收到的響應(yīng)報(bào)文返回至服務(wù)調(diào)用終端。
9.一種服務(wù)代理系統(tǒng),其特征在于,包括: 報(bào)文攔截模塊,用于攔截服務(wù)調(diào)用終端發(fā)出的調(diào)用請求報(bào)文; 報(bào)文解析模塊,用于解析出所述調(diào)用請求報(bào)文包含的服務(wù)名、方法名和輸入?yún)?shù)類型,并根據(jù)預(yù)設(shè)的各服務(wù)的服務(wù)名、服務(wù)所包含的各方法的方法名、各方法的輸入?yún)?shù)類型及各方法模擬方式的對應(yīng)關(guān)系查找所述調(diào)用請求報(bào)文請求調(diào)用的方法對應(yīng)的模擬方式; 報(bào)文構(gòu)造模塊,用于在查找結(jié)果為全部模擬方式時(shí),根據(jù)預(yù)設(shè)的第一模擬模板生成響應(yīng)報(bào)文,并用于在查找結(jié)果為部分模擬方式時(shí)以及接收到所述服務(wù)提供系統(tǒng)返回的響應(yīng)報(bào)文后,按照預(yù)設(shè)的第二模擬模板對接收到的響應(yīng)報(bào)文進(jìn)行處理; 報(bào)文轉(zhuǎn)發(fā)模塊,用于轉(zhuǎn)發(fā)所述報(bào)文構(gòu)造模塊根據(jù)所述的第一模擬模板生成的響應(yīng)報(bào)文至所述服務(wù)調(diào)用終端;以及在所述方法被設(shè)置為部分模擬方式時(shí),轉(zhuǎn)發(fā)該調(diào)用請求報(bào)文至服務(wù)提供系統(tǒng),并轉(zhuǎn)發(fā)所述報(bào)文構(gòu)造模塊根據(jù)所述第二模擬模板處理后的響應(yīng)報(bào)文至所述服務(wù)調(diào)用終端。
10.如權(quán)利要求9所述的系統(tǒng),其特征在于,還包括: WSDL獲取模塊,用于訪問預(yù)先設(shè)置的各服務(wù)對應(yīng)的WSDL的地址,獲得各服務(wù)對應(yīng)的WSDL描述;或者用于接收服務(wù)的WSDL描述文件獲得此服務(wù)的WSDL描述; WSDL解析模塊,用于解析每個(gè)服務(wù)對應(yīng)的WSDL描述,獲得此服務(wù)的服務(wù)名、此服務(wù)中包含的所有方法的方法名、各方法的輸入?yún)?shù)類型和輸出參數(shù)的參數(shù)名及參數(shù)類型; 存儲(chǔ)模塊,用于存儲(chǔ)獲得的每個(gè)服務(wù)的服務(wù)名、所包含的各方法的方法名、各方法的輸入?yún)?shù)類型和輸出參數(shù)的參數(shù)名及參數(shù)類型,并用于存儲(chǔ)各服務(wù)的服務(wù)名、服務(wù)所包含的各方法的方法名、各方法的輸入?yún)?shù)類型與設(shè)置的各方法模擬方式的對應(yīng)關(guān)系。
11.如權(quán)利要求10所述的系統(tǒng),其特征在于,還包括: 第一模擬模板生成模塊,用于查找出各服務(wù)中被設(shè)置為全部模擬方式的方法,并針對被設(shè)置為全部模擬方式的每個(gè)方法,根據(jù)該方法的輸出參數(shù)的參數(shù)類型設(shè)置對應(yīng)的參數(shù)值,將設(shè)置的參數(shù)值及對應(yīng)的輸出參數(shù)的參數(shù)名、參數(shù)類型保存為第一模擬模板。
12.如權(quán)利要求11所述的系統(tǒng),其特征在于,所述報(bào)文構(gòu)造模塊,具體用于在所述調(diào)用請求報(bào)文請求調(diào)用的方法被設(shè)置為全部模擬方式時(shí),根據(jù)所述調(diào)用請求報(bào)文所使用的協(xié)議,生成相應(yīng)格式的響應(yīng)報(bào)文,并將存儲(chǔ)的與所述調(diào)用請求報(bào)文請求調(diào)用的方法對應(yīng)的第一模擬模板的內(nèi)容填入所述報(bào)文中。
13.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述報(bào)文轉(zhuǎn)發(fā)模塊,具體用于根據(jù)所述調(diào)用請求報(bào)文中包含的源IP、服務(wù)名、方法名和輸入?yún)?shù)類型,在預(yù)先存儲(chǔ)的服務(wù)名、方法名、輸入?yún)?shù)類型、調(diào)用請求報(bào)文的源IP與服務(wù)提供系統(tǒng)的地址的對應(yīng)關(guān)系中查找所述調(diào)用請求報(bào)文所需轉(zhuǎn)發(fā)的服務(wù)提供系統(tǒng)的地址;若查找不到,則向服務(wù)調(diào)用終端返回錯(cuò)誤告警信息或?qū)⑺稣{(diào)用請求報(bào)文轉(zhuǎn)發(fā)至預(yù)先設(shè)置的默認(rèn)轉(zhuǎn)發(fā)地址;若查找到,則按照查找到的服務(wù)提供系統(tǒng)的地址轉(zhuǎn)發(fā)所述調(diào)用請求報(bào)文。
14.如權(quán)利要求10所述的系統(tǒng),其特征在于,還包括: 第二模擬模板生成模塊,用于查找出各服務(wù)中被設(shè)置為部分模擬方式的方法;針對被設(shè)置為部分模擬方式的每個(gè)方法,根據(jù)該方法的全部輸出參數(shù)中的需要模擬的輸出參數(shù)的參數(shù)類型設(shè)置相應(yīng)的參數(shù)值,將需要模擬的輸出參數(shù)的參數(shù)名、參數(shù)類型及對應(yīng)的參數(shù)值保存為第二模擬模板。
15.如權(quán)利要求14所述的系統(tǒng),其特征在于,所述報(bào)文構(gòu)造模塊,具體用于在所述調(diào)用請求報(bào)文請求調(diào)用的方法被設(shè)置為部分模擬方式時(shí)以及接收到所述服務(wù)提供系統(tǒng)返回的響應(yīng)報(bào)文后,將該響應(yīng)報(bào)文所包含的與所述第二模擬模板所包含的輸出參數(shù)的參數(shù)名一致的輸出參數(shù)的參數(shù)值修改為與所述第二模擬模板中該輸出參數(shù)的參數(shù)名對應(yīng)的參數(shù)值。
16.如權(quán)利要求9-15任一項(xiàng)所述的系統(tǒng),其特征在于,所述報(bào)文轉(zhuǎn)發(fā)模塊,還用于在所述方法被設(shè)置為非模擬方式時(shí),轉(zhuǎn)發(fā)所述調(diào)用請求報(bào)文至服務(wù)提供系統(tǒng),并在接收到服務(wù)提供系統(tǒng)返回的響應(yīng)報(bào)文后,將接收到的響應(yīng)報(bào)文直接返回至服務(wù)調(diào)用終端。
17.—種Web服務(wù)模擬的系統(tǒng),其特征在于,包括: 如權(quán)利要求9-16任一項(xiàng)所述的服務(wù)代理系統(tǒng); 服務(wù)提供系統(tǒng),用于當(dāng)接收到所述服務(wù)代理系統(tǒng)轉(zhuǎn)發(fā)的調(diào)用請求報(bào)文時(shí),生成響應(yīng)報(bào)文返回至所述服務(wù)代理系統(tǒng)。
【文檔編號】H04L29/08GK103580937SQ201210258669
【公開日】2014年2月12日 申請日期:2012年7月24日 優(yōu)先權(quán)日:2012年7月24日
【發(fā)明者】吳坤 申請人:阿里巴巴集團(tuán)控股有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1