第三章 實例講解:Java中的SOAP技術(1 / 3)

第三章 實例講解:Java中的SOAP技術

從技術的角度來說,有必要提一下我們的調試環境。我們使用的是Windows XP操作係統,安裝有JAVA 2 SDK 1.4.1,Apache SOAP 2.3.1,JAF 1.0.2,JAVAMAIL 1.3.1和Xerces 2.6.0。上麵所提及的都能在Tcomcat 4.1.29 JSP/Servlet容器中正常運行。所有的軟件都是免費自由軟件,因此你能夠很容易的下載它們並自己在任何你喜歡的平台如Windows或UNIX上安裝它們。Java SDK,JAF和JAVAMAIL位於SUN的官方網站(http://java.sun.com),其他的軟件在Jakarta項目組的官方網站(http://jakarta.apache.org)上有down的。可能你在看到我們需要這麼多不同的包(package)時已經有點擔心和不安了,但是實際上你不應該擔心這些的。一旦你懂了基礎,那麼對你將相當容易。安裝不是一件很難的事情,你隻需要在設置環境變量的時候仔細些,比如CATALINA_HOME, CLASSPATH, JAVA_HOME 等等,所有這些步驟都是手工的。由於我僅僅是想將你的注意力再次集中到它們身上,所以你能很快的就完成以上配置過程。我隻是添加下麵的一些字符串到Tomcat的bin/setclasspath.bat文件中:

...

set CATALINA_HOME=C:\Tomcat4.1.29

set CLASSPATH=%JAVA_HOME%\lib\tools.jar

set CLASSPATH=%JAVA_HOME%\soap-2.3.1\lib\soap.jar

set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\javamail-1.3.1\mail.jar

set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\jaf-1.0.2\activation.jar

set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\xerces-2_6_0\xercesImpl.jar

set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\xerces-2_6_0\xercesSamples.jar

set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\xerces-2_6_0\xml-apis.jar

set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\xerces-2_6_0\xmlParserAPIs.jar

set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\common\lib\servlet.jar

set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\common\lib\tools.jar

...

如果你的安裝路徑(installation paths)和上麵使用的不同,你需要更正它們,然後關閉和重啟Tomcat以使它們生效。這樣,你就有為運行SOAP作好了準備。但是現在,我要忘記有關的技術部分,來學一點理論知識。

SOAP意思是簡單對象訪問協議(Simple Object Access Protocol)。的確如它的名字一樣,SOAP是很簡單的。它是一個基於XML的協議,允許程序組件和應用程序彼此使用一種標準的Internet協議--HTTP來通訊。SOAP是一種獨立的平台,它不依賴程序語言,它是簡單的,彈性的,很容易擴展的。目前,應用程序能夠彼此使用一種基於DCOM和CORBA技術的遠程過程調用(RPC)來進行相互通訊,但HTTP不被設計為這個目的。RPC在Internet上應用是非常困難的,它們會出現許多兼容性和安全性的問題,因為防火牆和代理服務器通常都會阻斷(block)這些類型的流量。應用程序之間最好的通訊方式是通過HTTP協議,因為HTTP是支持所有Internet瀏覽器和服務器的。基於這個目的,SOAP協議被創建出來。

那麼,它們是如何運作的呢?比如,一個應用程序(A)需要和另一個應用程序(B)在SOAP的幫助下進行彼此通訊。它們將使用下麵的框架圖來完成這個過程:

這個SOAP信封(SOAP envelope)是一個包含以下內容的XML文檔:

正如你看到的,它是非常簡單的。它看起來確實就象一個普通的信封或者你的email。你想看看它們是如何動作的嗎?下麵跟我們一起來吧。其實我們有很多方法是不用SOAP來在創建和運行我們自己的"Hello World"應用程序的,但是因為我們要保持它的簡單性,我會給你一個它運作方式的框架圖(scheme)。

我們的"Hello World"範例會包含一個SOAP Service。我們的SOAP Client將發送它們的名字到該SOAP Service,並試圖得到一些答複或響應。這個SOAP Service需要部署到一個SOAP Admin的工具,以至重定位所有請求的SOAP(Proxy) RPC Router能夠知道它們應該使用哪種服務來運作。總而言之,這個是以下麵的方式來運作的:

現在,我們來一步步的看看到底發生了什麼。在Step 1裏,HelloWorldClient將連接一個SOAP RPC Router,請求我們的SOAP Service並將包含我們名字的一個字符串傳遞給它。該SOAP RPC Router會檢查是否它已經部署了這個SOAP Service。如果它被發現是被部署的,那麼它將傳遞數據到這個SOAP Service並調用特定的方法,這個是Step 2。然後SOAP Service方法會被執行,將返回某個字符串值(該值就是SOAP Client的答複或者響應)(Step 3)。在Step4中,SOAP RPC Router將僅僅隻是重定向這個數據到SOAP Client。所有在Step1和Step4裏傳輸的數據是通過SOAP Envelope來完成的。正如你所看到的,算法是相當簡單的,因此我們隻準備關心實際的代碼。