The JavaBeans Activation Framework 1.1 contains a few small enhancements and bugs fixes. The enhancements are described here and have been approved by the JCP as JSR-925. The primary enhancements are:
- Provide a list of all MIME types known to a MailcapCommandMap.
- Provide access to the native commands known to a MailcapCommandMap.
- Support for fallback entries in mailcap file.
The JavaBeans Activation Framework 1.1 requires J2SE 1.4 or greater.
The JavaBeans Activation Framework 1.1 final release is included with the Java SE 6 release and the Java EE 5 release, and is also available separately.
For a detailed description see the
jaf-changes.txt document.
... ...
JavaBeans Activation Framework(JAF)主頁 http://java.sun.com/beans/glasgow/jaf.html
JavaBeans激活框架(JavaBeans Activation Framework)
JAF的目的在于統(tǒng)一處理不同數(shù)據(jù)格式的方法(不管數(shù)據(jù)格式為簡單文本還是由圖片、聲音、視頻甚至其它"活動"內(nèi)容共同組成的復(fù)合文檔)。在這個意義上,JAF對Java的作用正如插件對Web瀏覽器的作用。JAF使得Java對象與編碼數(shù)據(jù)流之間的映射變得非常容易。
JAF完成于1998年,當(dāng)時JavaBean非常流行,Swing非常熱門,Servlet剛剛出現(xiàn),J2EE平臺還沒有。那時Sun需要一個用于文件瀏覽器和JavaMail的標(biāo)準(zhǔn)發(fā)現(xiàn)API,此需要推動了JAF的創(chuàng)建。“發(fā)現(xiàn)”指可以動態(tài)找到正確的組件以處理任意但類型化了的數(shù)據(jù)的機(jī)制。特別是,作為發(fā)現(xiàn)API來開發(fā)JAF,以便使GUI開發(fā)人員能夠?yàn)槲臋n和圖像數(shù)據(jù)動態(tài)地發(fā)現(xiàn)瀏覽器和編輯器。
發(fā)現(xiàn)取決于注冊的類型,注冊可以將每一文件類型與對應(yīng)的應(yīng)用程序建立關(guān)聯(lián)。
簡單的說,JAF提供了用于動態(tài)發(fā)現(xiàn)可視窗口部件以處理由MIME文件頭描述的各種數(shù)據(jù)的架構(gòu)。當(dāng)用于SAAJ這樣的非可視系統(tǒng)時,JAF可以將Java類型映射到將它們無縫轉(zhuǎn)換到數(shù)據(jù)流的特殊處理程序,從而允許SAAJ將Java對象自動轉(zhuǎn)換成由SwA MIME部分包含的原始數(shù)據(jù)。
1. DataHandler 類
JAF架構(gòu)的核心是javax.activation.DataHandler類。DataHandler類定義了三個構(gòu)造函數(shù):
Public DataHandler(DataSource ds)
Public DataHandler(java.net.URL url)
Public DataHandler(Object obj, String mimeType)
當(dāng)使用前兩個構(gòu)造函數(shù)時,數(shù)據(jù)處理會委托到DataSource接口的一個子類型,使用第三個構(gòu)造函數(shù)時,數(shù)據(jù)處理委托到一個動態(tài)發(fā)現(xiàn)的內(nèi)容處理程序并使用此處理程序。
如果DataHandler是用DataSource對象構(gòu)造的,那么它將首先試圖試圖將getContent()方法委托到一個DCH,如果它沒有找到DCH,會返回一個從DataSource中得到的InputStream。有趣的是,DataHandler總是試圖首先委托到一個DCH,即便是用DataSource創(chuàng)建DataHandler也是如此。
上述說明的問題看似簡單,但實(shí)際上非常重要,它說明了getContent()方法的作用。getContent()方法要返回一個表示附件的Java對象,DataSource的InputStream只作為最后一種手段來返回。從DCH中返回的對象類型取決于DCH的編碼方式。
2. DataContentHandler類
此接口用于實(shí)現(xiàn)將Java對象流轉(zhuǎn)換成數(shù)據(jù)流,或?qū)?shù)據(jù)流轉(zhuǎn)換成Java對象。
DataContentHandler類型的每一個子類(即每一個DCH)均用于自動將Java對象的專用類型轉(zhuǎn)換為流,以及將流轉(zhuǎn)換成Java對象。如某個DCH能夠?qū)?/span>java.awt.Image對象轉(zhuǎn)換為JPEG或GIF編碼流,或者進(jìn)行反向轉(zhuǎn)換。DCH的缺點(diǎn)是它們的使用范圍通常受到很大的限制,每一個DCH只能講一個對象類型轉(zhuǎn)換成一種類型的數(shù)據(jù)流。
與DCH不同,DataSource對象只處理數(shù)據(jù)流。用戶要用DataSource從某種類型的資源中讀數(shù)據(jù)流,并將數(shù)據(jù)流寫入DataSource。,此時重點(diǎn)放在了流上而不是Java對象類型上。從而DataSource具有很大的通用性,其缺點(diǎn)為不宜于使用,因?yàn)橛脩糁苯犹幚淼氖橇鞫皇?/span>Java對象。
3. DataSource 類
DataSource類擁有完成委托操作所需要的全部功能。當(dāng)使用DataSource或URL參數(shù)構(gòu)造DataHandler時,DataHandler要使用DataSource而不是DCH。
JAF定義了兩個標(biāo)準(zhǔn)的DataSource對象,即FileDataSource對象和URLDataSource對象。 某些DataSource實(shí)現(xiàn)用于動態(tài)發(fā)現(xiàn)它們的MIME類型。例如,FileDataSource用MIME類型注冊表發(fā)現(xiàn)它的MIME類型。JAF中的默認(rèn)MIME類型注冊表是mimetypes.default文件,該文件包含在JAF二進(jìn)制JAR文件中。
Author: orangelizq
email: orangelizq@163.com
posted on 2007-07-27 22:34
桔子汁 閱讀(2227)
評論(4) 編輯 收藏 所屬分類:
J2EE