面向服務的架構(SOA)和面向服務的內建(SOI)得到了廣泛的應用,并且有一種需求變得越來越明顯:業務需要內建系統,并允許消費者利用基于标準的方法通路服務。SOA是一種架構範例。在這種架構中,可重用的業務邏輯表現為包含基于标準的、定義良好的接口的服務集,并且可以以松散耦合方式通路它。因為Web Service标準的供應商的支援,以及利用基于這種标準的軟體內建不同的系統相對容易,是以在解決企業內建問題方面,SOA得到了普遍的認可。
基于Java的中間件和企業應用程式內建(EAI)産品已經被使用了一段時間,現在,許多公司在以不同的方式使用這項技術。雖然一些服務是在Java平台上開發和提供的,但來自基于Java的應用程式的服務消費還有其他靈活的需求。SOAP with Attachments API for Java (SAAJ)通過提供通路服務的标準API來幫助這些服務的消費。
有幾個基于Java的API可以用來通路服務。這些服務包括SAAJ、基于Java API for XML 的RPC(JAX-RPC)和Web服務調用架構(WSIF)。SAAJ提供了建構服務消費者以及提供者的API。讓我們看一看如何利用SAAJ在SOA中開發Web Service的消費者。我們将舉例說明WebLogic Integration的組合過程,該過程有機地結合了擷取城市郵政編碼的服務、擷取郵政分區的溫度的服務,以及消費該服務的一個示例SAAJ客戶機。
什麼是SAAJ?
SAAJ是在松散耦合軟體系統中利用SOAP協定實作的基于XML消息傳遞的API規範。顧名思義,SAAJ支援帶附件的SOAP消息。
對于Java API for XML Messaging (JAXM),您已經了解很多,并且可能感到奇怪,究竟JAXM發生了什麼事?JAXM 1.0的理念是通過提供消息傳遞和SOAP API,允許開發人員根據SOAP編寫支援消息傳遞标準的業務應用程式。随着JAXM 1.1版的推出,SOAP API (javax.xml.soap)被分割成了SAAJ1.1規範和JAXM1.1,JAXM1.1隻包含基于消息傳遞的API(javax.xml.messaging)。目前,正在使用的SAAJ版本是1.2。WebLogic Server 8.1 SP2 支援SAAJ 1.1規範。
SAAJ 1.2 API主要由javax.xml.soap包組成,它為帶有多用途互連網郵件擴充協定(MIME)附件的SOAP消息提供抽象。該API提供了建立到端點的點到點連接配接的方法、建立并處理SOAP消息和附件的方法,以及接收和處理SOAP錯誤的方法。
雖然在開發企業應用程式的時候,有幾種技術供您選擇,但對于不同的問題,某些技術可能更合适。選擇正确的工具非常重要。
選擇SAAJ的理由是什麼呢?SAAJ無疑很适合基于文檔的同步或者異步Web Service。SAAJ使用簡單,有助于您在Java環境中內建各種Web Service,它擴充了對文檔風格的Web Service通信的自然支援(natural support)。SAAJ還支援基于标準接口上的XML消息傳遞,并且這一點得到了供應商的廣泛支援。
編寫客戶機
清單 2展示了如何利用清單 1中給出的方法調用該服務。這個過程的端點URL是随輸入的XML文檔字元串一起傳遞給invokeService()方法的。
清單 2. 以下是利用SAAJ調用WebLogic Integration過程的一個例子。
String inputXml = "
/"http://schemas.xmlsoap.org/soap/envelope//" " +
"xmlns:soapenc=/"http://schemas.xmlsoap.org/soapencoding//"
xmlns:xsd=/"http://www.w3.org/001/XMLSchema/" " +
"xmlns:xsi=/"http://www.w3.org/2001/XMLSchema-instance/">
" + "" + "
Barrington
IL
" + "
";
invokeService("http://localhost:7001/saajService/processes/TempService.jpd",inputXml);
SAAJ可能是SOA和內建領域中一種非常有用的API。SAAJ的一些應用程式包含測試架構的服務和服務調用的庫。我們已經展示了如何利用SAAJ編寫消費者,并建立了一個通路WebLogic Integration Get Temperature組合過程的示例客戶機。将該示例應用到您自己的項目中,讓SAAJ為您工作。