專利名稱:用于xmpp協議的servlet api和方法
技術領域:
本發明涉及遠程通信和網絡計算機電話系統,包括互聯網和公共交換電話系統(Public Switched Telephone System),并且更具體地涉及一種用于根據Java服務器端應用程序(servlet)模型在XMPP API的基礎上部署兼容XMPP的應用程序的系統和方法。
背景技術:
世界范圍內已經發展出兩種主要的遠程通信網絡。第一種是形式為公共交換電話系統(PSTN)的電話系統網絡。該網絡最初被設計用于傳送語音通信,不過隨后也適用于傳輸數據。第二種是形式為互聯網的計算機系統網絡。互聯網一直被設計用于傳輸數據,而且正越來越多地被用于傳輸語音和多媒體信息。計算機實施的電話應用程序已經被集成到這兩種遠程通信網絡中以提供更好的通信服務。例如在PSTN中,計算機電話集成已經為POTS(普通老式電話服務)提供了更多的功能和控制。在互聯網上,計算機自身就是用于語音通信的終端設備并且還用作供終端設備的主機使用的智能路由器和控制器。互聯網是根據TCP/IP (傳輸控制協議/互聯網協議)套件通信的IP網絡全球通信網。具體地,語音和其他多媒體信息在互聯網上根據VoIP (互聯網語音傳輸)協議傳輸。PSTN和IP網絡的集成通過發揮IP網絡固有的路由靈活性和計算可達性而允許在語音應用程序的自動控制方面有更多功能。美國專利US6922411中介紹了一種用于簡單部署電話應用程序的示例性平臺,通過引用將其全部公開內容并入本文。基本上,網絡電話系統允許用戶部署與指定電話號碼相關聯的互聯網計算機電話應用程序。電話應用程序很容易由用戶以XML(擴展標記語言)用預定義的電話XML標簽(例如VoiceXML)創建并且易于在網站上部署。電話XML標簽包括用于通話控制和媒體控制的內容。與這些指定電話號碼中任何一個的通話都可以源于任何一種網絡電話系統例如PSTN(公共交換電話系統)、無線網絡或互聯網。通話由互聯網上安裝的應用網關中心(AGC)接收。類似于網頁瀏覽器,AGC提供用于從其網站中檢索相關的XML應用程序并相應地處理通話的功能。這種類型的電話平臺允許在互聯網上構建和部署非常強大而又簡單的電話應用程序。以下是在這種平臺上部署的電話應用程序的一些示例。“跟蹤/發現(Follow me,find me)”應用程序按順序呼叫由用戶指明的一系列電話號碼,直到其中一個號碼應答并隨后連接該通話為止。否則,應用程序就做一些別的事例如收取消息或發送電子郵件或者向呼叫中心發送通話等。在另一個示例中,電話調查應用程序查詢被調查人口的電話號碼數據庫。應用程序隨后僅受支持的并行會話最大數量限制地并行呼叫多個號碼,然后響應于被呼叫方的應答播放一系列交互式語音提示/消息并在數據庫中記錄結果等。在另一個示例中,幫助臺(Help Desk)應用程序響應于被呼叫方的應答播放一系列交互式語音提示/消息并且可以將連接在線客服通話作為一種選項等。在又一個示例中,股市或銀行交易應用程序響應于被呼叫方的應答播放一系列交互式語音提示/消息并且利用后端數據庫或web應用程序來進行正當交易等。
后面的示例通常被稱為自助式應用程序。在語音領域,自助式應用程序被稱為IVR0 IVR涉及交互式語音應答并且是一種與電話呼叫方自動交互的技術。企業正越來越多地轉向IVR以降低常規的銷售、服務、催收催繳、查詢和支持公司往來通話的成本。如前所述,IVR是一種自助式應用程序的具體示例,其中用戶可以通過與應用程序交互而自助地執行某些任務。傳統的IVR僅允許用戶通過語音信道與其交互。類似地,網頁機器人(web bot)是一種允許用戶利用文本信道執行任務的自助式應用程序。這種平臺的一個示例是在多信道環境中主持用語音、文本消息進行交互的IVR應用程序和其他客戶端。文本消息已經隨著便攜式電話和計算設備的普及而變得非常流行。文本消息是通過點對點或一點對多點地交換文本消息來進行通信的一種形式。文本消息最常見的形式是電子郵件、網絡博客和短信。短信(“IM”)幾乎是實時地交換消息。現有多種專用的短信網絡,每一種都利用本地協議為每一個自身的客戶端提供頂服務。也存在開源并使用XMPP協議的頂網絡。XMPP是指可擴展消息處理與出席協議并且它是由Jabber開源組織在1999年開發的用于出席和實時通信的開放性XML技術集合。用于Java應用程序的XMPP服務已經在Google Talk中實施作為XMPP擴展應用以使其兼容XMPP,這是一種由美國加州Google公司提供的聊天應用程序。這通過將XMPP消息封裝為MME消息并且將MME消息置于HTTP內而實現。因此從應用程序的角度看,實際上接收的是HTTP消息而且必須使用Google專用API以從HTTP消息內的MME消息中提取出XMPP消息。這種方法并不完全兼容基于標準的Java servlet模型。希望獲得一種允許與文本消息的客戶端交互的自助式應用程序。因此希望獲得一種融合通信應用程序平臺,其類似于供web客戶端使用的HTTPServlet和供語音客戶端使用的SIP Servlet,允許在應用程序的服務器端輕松地開發和執行應用程序。
發明內容
一種通信系統和方法,包括在Java虛擬機內主持交互式語音應答或自助式應用程序的服務器。為了發揮Java servlet模型的優勢和功能,一種Java XMPP(可擴展消息處理與出席協議)servlet容器被提供給服務器使用以使得通信應用程序可以用由XMPPservlet API定義的對象以及用由基于標準的Java EE平臺例如HTTP和SIP servlet定義的對象來編寫,目的是為了服務于XMPP客戶端。除了 Java servlet模型中通用的類對象以外,API還提供了 XMPP專用的類對象
口 OJava XMPP servlet容器包括在傳輸層用于處理網絡連接的網絡點,用于管理XMPP會話和流的XMPP服務層以及用于管理XMPP節的應用層。應用程序允許用Java XMPP servlet API編寫,目的是為了發揮Java servlet模型的優勢和功能,以使得編程不必關注底層的傳輸和連接功能而是能夠集中在業務邏輯上。Java XMPP servlet容器的架構使流的協商終止于XMPP服務層而不是應用層。這就允許應用程序具有在云計算資源中從一個服務器移植到另一個服務器的可移植性。
本發明的更多目標、特征和優點將根據以下對其優選實施例的說明而得到理解,這些說明內容應該與附圖相結合。
圖1示意性地示出了適合用于實踐本發明的通信應用程序環境。圖2示出了用于XMPP Servlet模型的系統架構。圖3示出了用于XMPP Servlet模型的應用程序整體架構。圖4示出了 XMPP Servlet接口的繼承。圖5更加詳細地示出了圖4中所示的XMPP Servlet接口。圖6示出了 XMPP Servlet的結構,給出了 XMPP Servlet請求和應答對象的整體繼承架構。
具體實施例方式圖1示意性地示出了適合用于實踐本發明的通信應用程序環境。通信應用程序環境10包括與應用程序平臺100內的通信應用程序服務器200交互的一個或多個客戶端20,22,30。應用程序平臺100主持由用面向對象軟件編寫的應用程序腳本210明確的應用程序。通信應用程序服務器200包括用于解讀并執行應用程序腳本210的瀏覽器220。應用程序腳本210的執行調用應用程序服務器200內的一個或多個服務器端組件310。正如隨后要更加詳細介紹的那樣,服務器端組件優選地實施為符合基于標準的Java Servlet模型的Servlet 310。在客戶端和通信服務器中,這些組件310為HTTP請求、對一個或多個媒體服務器230的通話控制和媒體控制以及跟后端系統240例如數據庫和業務邏輯與遺留系統例如CRM(客戶關系管理)和ERP(企業資源規劃)的交互提供服務。這種平臺的一個示例是在多信道環境中主持用語音、文本消息進行交互的IVR應用程序和其他客戶端。文本消息已經隨著便攜式電話和計算設備的普及而變得非常流行。文本消息是通過點對點或一點對多點地交換文本消息來進行通信的一種形式。文本消息最常見的形式是電子郵件、網絡博客和短信。短信(“IM”)幾乎是實時地交換消息。現有多種專用的短信網絡,每一種都利用本地協議為每一個自身的客戶端提供頂服務。也存在開源并使用XMPP協議的頂網絡。XMPP是指可擴展消息處理與出席協議并且它是由Jabber開源組織在1999年開發的用于出席和實時通信的開放性XML技術集合。圖1實際上示出了一種多信道、自助式的應用程序平臺。基本上,多信道自助式的應用程序平臺100主持一種或多種用于通過多信道與各種客戶端交互的自助式應用程序300。不同的客戶端包括通信模式是借助于語音信道的語音客戶端20,22。還包括通信模式是借助于文本消息信道的文本消息客戶端30。通信應用程序服務器200通過Servlet容器330使頂客戶端30借助頂網絡直接或間接地與頂(XMPP)服務器互動。另外,實施為供servlet容器330使用的插件程序的應用程序路由器338用于客戶端到適當應用程序的路徑選擇。可以發現語音應用程序中的某些動作與文本消息應用程序之間的對應性。例如,播放音頻文件類似于用IM發送文件,記錄通話類似于記錄文本消息的對話,傳輸通話類似于建立(涉及多個頂用戶的)聊天等。文本消息客戶端30與應用程序平臺100內主持的自助式應用程序進行交互應該就像自助式應用程序是網頁機器人一樣。文本消息的常用類型是短信(“IM”),其中文本消息幾乎實時地在各方之間交換。開源的頂客戶端(OS)或(XMPP客戶端)與具有XMPP服務器的開源網絡通信。各種本地IM網絡的不例有AOL Instant Messenger、MSN Messenger>Yahoo Messenger、Lotus Sametime、Google Talk 等。通常,每一種IM網絡都根據其自身的本地協議工作并且它們不能協同工作。另一種類型的IM網絡如前所述以XMPP的開放性標準為基礎。Jabber服務器為其客戶端提供頂服務。Google Talk是基于XMPP標準的另一個例子。優選地,XMPP服務器50被用作供多信道自助式應用程序平臺使用以與各種不同的IP網絡協同工作的橋梁。傳輸模塊(未示出)隨XMPP服務器50—起使用以用作連往各種頂網絡的XMPP網關。對于XMPP服務器50來說,多信道自助式應用程序平臺100僅僅是另一個XMPP客戶端40。用這種方式,各種IM客戶端30就能夠通過傳輸模塊和XMPP服務器50與多信道自助式應用程序平臺100通信。當頂客戶端30已經是XMPP網絡的一部分時,它就不再需要通過傳輸模塊“傳輸”,而是簡單地直接與XMPP服務器對話即可。在傳統的網絡傳播模式中,運行網絡瀏覽器的客戶機形式的用戶代理向網絡服務器發出請求。網絡服務器返回對請求的應答。通信根據HTTP (超文本傳輸協議)進行。具體地,網絡瀏覽器請求網絡資源例如由來自網絡服務器的網址明確的網頁。通常網絡服務器通過返回請求的網頁來應答。網頁可以包含文本內容以及用于讓瀏覽器在網頁中顯示文本的嵌入指令。在更為復雜的應用程序中,網頁經常通過使用服務器端程序動態生成并且可以加入例如來自后端數據庫的查詢結果等內容。因此,部分內容并非硬編碼在網頁上而是由網絡服務器動態地生成和顯示。服務器端程序也可以用于將數據從客戶端提交至后端數據庫。通常,這些服務器端程序被實施為符合CGI (通用網關接口)協議的腳本。CGI是在網頁服務器上執行任務以生成并顯示動態內容或者執行其他后端功能的代碼模塊。但是,CGI具有若干缺點。首先,CGI不太容易移植,原因在于不同的網絡服務機器具有不同的處理器且操作系統可能需要它們自用版本的腳本。其次,CGI不能高效地使用服務器的資源。不同的CGI與啟動它們的服務器相比在不同的進程上下文中運行。對于每一個請求都有創建一個新進程的開銷,并且不同的進程無法訪問服務器資源中的公共集。JAVA servlet模型解決了 CGI的這些缺點。Servlet是用高度可移植性的JAVA 編程語言編寫的模塊,原因在于它們是在相同的與處理器硬件或操作系統無關的JAVA虛擬機中運行。在面向對象的Java編程語言中,分析HTTP請求并使之與軟件對象交互,軟件對象根據由應用程序操作的實際對象建模。類似地,應答被加工為符合HTTP協議并隨后發送給請求者。Servlet運行在Java服務器的多線程環境中并且允許通過單獨的線程來處理每一個請求。與并發請求需要載入多份CGI腳本副本的CGI相比,還有一種Java腳本的情況則需要載入到處理器內存中。原始Servlet符合HTTP協議并且可以被視為“HTTPservlet”。Servlet模型提供了通過在應用程序服務器內載入對應的servlet容器而實現的API (應用程序設計接口)集合。Servlet模型使開發人員能夠快速開發應用程序并將其移植到不同的服務器并且能夠高效運行。Servlet模型在web應用程序中廣泛使用并且以開放性的標準為基礎。API是一種描述用于跟組件310所用函數集合交互的接口的縮寫。它是一種包含在庫內包括的并且解決特定問題的函數集合說明的列表。在Java面向對象語言的當前上下文中,API包括Java類定義和擴展類定義的集合以及與類相關聯行為的集合的說明。API可以被認為是通過類(類接口)公開的所有方法的全集。這就意味著API規定了用于處理由類定義得出的對象的方法。對于通話控制,已經提出了用于協同工作能力的多種協議標準。例如,H.323標準是一種由ITU (國際電信聯盟)推薦的用于IP技術的信令和通話控制的協議標準。一種越來越普及的替代H.323用于通話控制的標準是SIP( “會話發起協議”)。SIP是一種IETF(互聯網工程任務組)協議,用于IP技術的信令和通話控制以及兩臺或多臺終端之間的多媒體通信。這種協議基于文本并且更加以網絡為中心,因此是一種相對簡單和更加輕量級的替代H.323的協議。對于通話控制,SIP servlet已經被開發并確立為用于根據SIP協議處理請求的標準,正如HTTP servlet根據HTTP協議處理請求一樣。SIP Servlet Specification (JSR 289)是一種基于容器的方法(根據 HTTPservlet傳播模式建模)以利用會話發起協議(SIP)開發通信應用程序。SIP servlet是一種執行SIP信令的Java編程語言服務器端組件。SIPservlet由SIP servlet容器管理,其通常是實現SIP的應用程序服務器的一部分。SIP servlet通過響應輸入的SIP請求并返回對應的SIP應答而與客戶端交互。SIP servlet由Java Servlet Specif ication提供的通用 servlet API 構建,Java Servlet Specif ication 是一種通過 Java 規范請求(JSR)過程由Java Communi ty Proces s (SM) Program建立的開放性標準。將SIP ServletQSR 289)用于通話控制是為了發揮Servlet模型的優勢。由此,應用程序開發人員就能夠根據開放性標準JSR 289開發出底層通話控制對象方面的通信應用程序組件以及HTTP Servlet和SIP Servlet形式的API。因此希望能夠在以XMPP協議工作的Servlet模型基礎上提供API集合。現有的Java Servlet模型例如HTTP Servlet和SIP Servlet均以請求-應答模型為基礎。在HTTP的情況下,交互是同步的。在SIP的情況下,交互是異步的。盡管HTTPServlet基本上是無狀態的,但是SIP Servlet在會話中必須保持狀態。在XMPP的情況下,交換的是頂消息并且不存在固有的請求-應答概念。交互基本上是異步的,不過握手交互可以是同步的。類似地,IM基本上是無狀態的。但是,在使用頂客戶端與自助式應用程序交互時需要保持狀態。因此XMPP servlet規格必須要克服這些差異。XMPP SERVLET 和 API可擴展消息處理與出席協議(XMPP)是一種用于近實時消息處理、出席和請求-應答服務的開放性可擴展標記語言XML協議。XMPP的核心特性在由XMPP StandardsFoundation(原 Jabber Software Foundation)維護的 Extensible Messaging andPresence Protocol =Core [RFC3920]中定義。核心特性包括XMPP的專用特性例如XML流、TLS和SASL的使用以及根流的<message/>、〈presence/>和<IQ/>子流。這些特性提供了用于多種類型的近實時應用程序例如Core[RFC3921]中定義的短信(頂)和出席應用程序的構建模塊。所有通信架構中很重要的一方面就是可編程性,并且XMPP Servlet API的用途就是將用于提供基于XMPP服務的平臺標準化。術語平臺在此被用于包括Java API自身以及涵蓋封裝和部署應用程序的標準。平臺主要提供[RFC 3920]中定義的核心XMPP特性和架構功能,以使XMPP應用程序例如XMPP IM應用程序能夠簡單地在平臺上構建。XMPP Servlet API能夠提供以下優點:XMPP的功能:允許應用程序實現相當完整的XMPP功能集合,包括流特性協商、SASL功能、節的接收和輸送。簡單性:容器處理“非關鍵性的”復雜事務例如管理網絡偵聽點、節的路由、流特性協商等。因此應用程序能夠在其具體的應用規則上。融合應用程序:可以讓容器支持融合應用程序,也就是跨越多種協議和接口例如Web、頂、SIP和其他Java EE接口的應用程序。第三方應用程序開發=Servlet模型支持第三方應用程序開發。XML部署描述符被用于從應用程序開發人員向部署人員傳遞應用程序信息。電信運營商級=Servlet在容器管理的會話對象內存儲應用程序。實現可以堅持和/或復制該數據以實現高度的可用性。XMPP Servlet是一種由XMPP Servlet容器管理的基于Java的應用程序組件,就像HTTP Servlet是由HTTP容器管理一樣。XMPP Servlet執行XMPP應用程序功能例如表現為XMPP頂應用程序的XMPP Servlet。XMPP Servlet負責用于根據應用程序規則進行XMPP節處理,例如通過發送探測出席節和廣播出席節來處理初始出席節。XMPP Servlet還能通過經XMPP Servlet API與容器交互來控制流協商過程。就像其他基于Java的組件一樣,Servlet是平臺獨立的Java類,可被編譯成平臺中立的能夠Java實現的XMPP應用程序服務器動態載入和運行的字節碼。容器,有時被稱為Servlet引擎,是提供Servlet功能的服務器擴展。XMPP Servlet通過經Servlet容器交換節而與XMPP客戶端或其他的XMPP服務器交互。Servlet容器是提供網絡服務的在其上接收和發送請求及應答的應用程序服務器的一部分。它決定調用哪一個應用程序。Servlet container還在其生命周期內包含并管理Servlet。XMPP Servlet容器在與其他的XMPP實體連接之后負責用于管理連接和XMPP流,而且容器接收輸入的節,將節分配給合適的Servlet以及從應用程序接收輸出的節并將其路由至合適的XMPP實體。Servlet容器能夠構建在或者可以安裝在實現Servlet的應用程序服務器內。XMPP Servlet容器管理網絡偵聽點,在其上偵聽輸入的XMPP流量(偵聽點是傳輸協議、IP地址和端口編號的組合)。Servlet容器可以在執行Servlet的環境中設置安全限制。在 Java 5 Platform Standard Edition(J2SE 5.0)或 Java' Platform,Enterprise Edition 5 (Java EE 5)的環境中,這些限制應該利用由Java平臺(JavaPlatform)定義的許可架構設置。例如,高端應用程序服務器可以限制創建Thread對象以確保容器中的其他組件不會受到不利影響。圖2示出了用于XMPP Servlet模型的系統架構。整體系統包括如圖1所示與應用程序服務器200 (容器330+應用程序300)交互的XMPP客戶端24,40和其他的XMPP服務器50。實現XMPP Servlet模型就是實現作為servlet容器330之一的XMPP Servlet容器332。XMPP Servlet容器332可以根據XMPP協議與其他XMPP實體通信,包括XMPP客戶端40和其他的XMPP服務器50 (同樣參見圖1)。從XMPP Servlet容器的角度看共有三層通信。第一層是傳輸層340。在優選實施例中,TCP被用作傳輸協議。傳輸層內的網絡點接收來自XMPP客戶端24,40或其他XMPP服務器50的輸入TCP連接并且建立到XMPP客戶端24,40或其他XMPP服務器50的輸出TCP連接。網絡點組件保持這些連接并向更高層發送輸入數據和必要信息,而且還從更高層接收輸出數據并將其送出。第二層是流層,在此XMPP流在XMPP服務層342內進行處理。[RFC3920]中的流概念被映射至XMPP Servlet API中的XmppSession接口,以使該層實際上負責用于保留XmppSession信息并向更高層提供會話信息。如圖1所示,應用程序路由器338是用于XMPP Servlet容器332的插件程序。在初始連接協商期間,容器332從客戶端或其他實體接收〈stream〉打開標簽請求并在XMPP服務層342處理該請求,隨后向應用程序服務器338發送關于選擇哪一個應用程序的查詢。應用程序服務器338根據路由表或預定規則返回應用程序選擇的答復。XMPP服務層342隨后調用選中的應用程序并建立連接。第三層是節層,在此處理XMPP節。在節層,節從應用程序312,322進出。節實際上被封裝在Servlet請求和應答中,以使應用程序也能從請求或應答中獲得除了節信息以外的XmppSession或連接信息。Java XMPP servlet容器的架構使流的協商終止于XMPP服務層而不是應用層。這就允許應用程序具有在云計算資源中從一個服務器移植到另一個服務器的可移植性。圖3示出了用于XMPP Servlet模型的應用程序整體架構。XMPP Servlet容器332管理應用程序和Servlet。可以將多于一個應用程序312,322部署至容器322,并且一個應用程序312可以包含多于一個Servlet314,316。但是,在一個應用程序中只能有一個主Servlet (MAIN Servlet)。容器管理一個應用程序中所有Servlet的生命周期,但是它僅將輸入請求分配給MAIN Servlet,并且隨后MAIN Servlet即可通過應用程序自身的業務規則將請求分配給其他的Servlet。每一個應用程序在部署時都必須有部署描述符,描述符描述應用程序的性質和載入的Servlet。通過讀取描述符容器即可獲知如何初始化應用程序以及載入哪些Servlet和如何配置它們。正如同樣結合圖2介紹的那樣,XMPP Servlet容器302在網絡點340保持所有的網絡連接,并且在XMPP服務層342保留XMPP流信息。以下給出頂出席的一個示例。在RFC3921內定義的XMPP頂應用程序中,在建立會話后,客戶端為了表示其通信可用性而向服務器發送初始出席信號。由應用程序和容器執行的步驟如下:I)在流協商后,在客戶端和服務器之間建立會話。2)客戶端向服務器發送出席節。3)容器從偵聽的網絡終端接收出席節。4)容器通過使用XML分析程序分析節來驗證節,在驗證其為有效XML元素后,容器根據XMPP核心協議(RFC3920)驗證出席節,例如驗證來自屬性是流協商過程中已經過確認的內容。
5)在驗證節之后,容器查找應該調用的合適Servlet并隨后用封裝在Servlet請求中的出席節來調用它。6) Servlet從容器接收經過驗證的出席節,然后根據頂應用程序進行處理,例如在“subscription”屬性設定為“to”或“both”值時向用戶名單中存在JID的聯系人發送探測出席節,在“subscription”屬性設定為“from”或“both”值時向用戶名單中存在JID的聯系人廣播出席節。7)容器接收由Servlet發送的節并根據XMPP核心協議中定義的用于路由節的服務器規則將其路由至合適的實體。Servlet 接 口圖4示出了 XMPP Servlet接口的繼承。Servlet接口是Servlet API并且因此是XMPP Servlet API的核心抽象。所有的Servlet都直接實現該接口或者更通常地是通過擴展實現該接口的類而實現該接口。通用的Servlet API定義了實現Servlet接口的類GenericServlet0 XMPP Servlet API 定義了擴展 GenericServlet 并且根據接收到的消息類型執行分配的類XmppServlet。對于絕大多數情況,開發人員都應擴展XmppServlet以實現他們的Servlet。圖5更加詳細地示出了圖4中所示的XMPP Servlet接口。用于XMPP消息的對象模型XMPP消息由Servlet容器處理。基本的Servlet接口定義了用于處理客戶端請求的服務方法。對Servlet容器路由至Servlet實例的每一條消息都調用該方法。在Servlet應用程序中處理并發消息通常都需要開發人員設計出能夠在特定時刻應對在服務中運行多線程的Servlet。通常,Servlet容器通過在不同線程上并發執行服務方法來處理對同一Servlet的并發請求。調用XMPP Servlet以處理所有的輸入節。在任何情況下,節都被封裝在ServletRequest消息或ServletResponse消息內并通過Servlet接口中的服務方法輸送。void service(ServletRequest req, ServletResponse res)throws ServletException, java.10.1OException ;如果消息是請求,那么應答自變量必須是空值,而如果消息是應答,那么請求自變量必須是空值。自變量在被調用以處理XMPP事件時必須根據可能的情況實現對應的接口。例如,如果是IQ設定節,那么必須實現IQRequest接口,而如果是IQ結果節,那么必須實現IQResponse接口。XmppServlet實現的服務方法分別將輸入消息分配給用于請求的doRequest方法和用于應答的doResponse方法:Protected void doRequest(XmppServletRequest req);Protected void doResponse(XmppServletResponse resp);這些方法隨后如以下的表I和表2中所述進行進一步分配。XMPP Servlet抽象子類定義超出基本Servlet接口可用范圍的多種方法。這些方法由類中的doRequest方法自動調用(并且由服務間接調用)以幫助處理基于XMPP的請求。表I列出了用于XMPP Servlet的請求處理方法:
權利要求
1.一種服務器,包括: 應用程序,以用于可擴展消息處理與出席協議(XMPP)的Java servlet API編寫并且在用于為XMPP實體服務的Java虛擬機上執行; Java XMPP servlet容器,支持用于XMPP的Java servlet API以處理XMPP專用的網絡傳輸、流和節; 所述Java XMPP servlet容器進一步包括: 位于傳輸層的網絡點,用于偵聽、路由和管理與XMPP實體之間的網絡連接; XMPP服務層,用于通過所述網絡點管理與XMPP實體之間的XMPP會話和流;以及 應用層,用于通過所述XMPP服務層管理與XMPP實體之間的XMPP節。
2.按權利要求1所述的服務器,其中: 所述Java XMPP servlet容器執行的基本功能包括: 管理網絡偵聽點; XMPP TLS協商以及在應用程序被設置為使用容器管理安全性時的SASL協商; 資源整合;以及 XML分析。
3.按權利要求1所述的服務器,進一步包括: 應用程序路由器,由所述Java XMPP servlet容器調用以選擇XMPP servlet應用程序為初始請求服務。
4.按權利要求3所述的服務器,其中: 初始請求包含有屬性;并且 應用程序路由器根據屬性值選擇合適的應用程序。
5.按權利要求1所述的服務器,其中: Java XMPP servlet API 定義了擴展通用 Java servlet API 的類;并且通用Java servlet API定義了為基于標準的Java servlet模型中的通用特性提供API的通用類。
6.按權利要求5所述的服務器,其中: 通用Java servlet API接口定義了用于處理客戶端請求的服務方法; 對servlet容器路由至servlet實例的每一條消息都調用所述服務方法;并且 由XMPP servlet處理的XMPP節被封裝在通過所述服務方法輸送的消息內。
7.按權利要求1所述的服務器,其中: Java XMPP servlet API定義了不同的接口,專門用于處理不同類型的XMPP流,包括處理流打開標簽、流關閉標簽、流錯誤xml元素和流特性xml元素。
8.按權利要求1所述的服務器,其中: Java XMPP servlet API定義了不同的接口,專門用于處理不同類型的XMPP節,包括出席節、IQ設定節和消息節。
9.按權利要求1所述的服務器,其中: Java XMPP servlet API定義了不同的接口,專門用于處理不同類型的XMPP SASL協商,包括SASL授權請求、SASL質詢、SASL應答、SASL終止、SASL失敗和SASL成功。
10.按權利要求1所述的服務器,其中:Java XMPP servlet API定義了用于處理XMPP IQ結果或錯誤節的接口。
11.一種操作服務器的方法,包括: 部署以用于可擴展消息處理與出席協議(XMPP)的Java servlet API編寫的應用程序; 提供Java XMPP servlet容器,支持用于XMPP的Java servlet API以處理XMPP專用的網絡傳輸、流和節; 所述Java XMPP servlet容器進一步包括: 位于傳輸層的網絡點,用于偵聽、路由和管理與XMPP實體之間的網絡連接; XMPP服務層,用于通過所述網絡點管理與XMPP實體之間的XMPP會話和流;以及 應用層,用于通過所述XMPP服務層管理與XMPP實體之間的XMPP節;并且 在所述服務器的Java虛擬機上執行應用程序以為XMPP實體服務。
12.按權利要求11所述的方法,其中: 所述Java XMPP servlet容器執行的基本功能包括: 管理網絡偵聽點; XMPP TLS協商以及在應用程序被設置為使用容器管理安全性時的SASL協商; 資源整合;以及 XML分析。
13.按權利要求11所述的方法,進一步包括: 提供應用程序路由器,由所述Java XMPP servlet容器調用以選擇XMPP servlet應用程序為初始請求服務。
14.按權利要求13所述的方法,其中: 初始請求包含有屬性;并且 應用程序路由器根據屬性值選擇合適的應用程序。
15.按權利要求11所述的方法,其中: Java XMPP servlet API 定義了擴展通用 Java servlet API 的類;并且通用Java servlet API定義了為基于標準的Java servlet模型中的通用特性提供API的通用類。
16.按權利要求15所述的方法,其中: 通用Java servlet API接口定義了用于處理客戶端請求的服務方法; 對servlet容器路由至servlet實例的每一條消息都調用所述服務方法;并且 將由XMPP servlet處理的XMPP節封裝在通過所述服務方法輸送的消息內。
17.按權利要求11所述的方法,其中: Java XMPP servlet API定義了不同的接口,專門用于處理不同類型的XMPP流,包括處理流打開標簽、流關閉標簽、流錯誤xml元素和流特性xml元素。
18.按權利要求11所述的方法,其中: Java XMPP servlet API定義了不同的接口,專門用于處理不同類型的XMPP節,包括出席節、IQ設定節和消息節。
19.按權利要求11所述的方法,其中: Java XMPP servlet API定義了不同的接口,專門用于處理不同類型的XMPP SASL協商,包括SASL授權請求、SASL質詢、SASL應答、SASL終止、SASL失敗和SASL成功。
20.按權利要求11所述的方法,其中: Java XMPP servle t API定義了用于處理XMPP IQ結果或錯誤節的接口。
全文摘要
一種通信系統和方法,包括在Java虛擬機內主持交互式語音應答或自助式應用程序的服務器。為了發揮Java servlet模型的優勢和功能,一種Java XMPP(可擴展消息處理與出席協議)servlet容器被提供給服務器使用以使得通信應用程序可以用由XMPP servlet API定義的對象以及用由基于標準的Java EE平臺例如HTTP和SIP servlet定義的對象來編寫,目的是為了服務于XMPP客戶端。除了Java servlet模型中通用的類對象以外,API還提供了XMPP專用的類對象集合。Java XMPP servlet容器包括在傳輸層用于處理網絡連接的網絡點,用于管理XMPP會話和流的XMPP服務層以及用于管理XMPP節的應用層。
文檔編號H04L12/58GK103098433SQ201180029966
公開日2013年5月8日 申請日期2011年4月18日 優先權日2010年4月18日
發明者陳為, 祝效普, 劉志雨, 張普兵 申請人:Voxeo研究有限公司