第五讲:JAF架构及其在JavaMail中的应用
2014-04-26 17:14
316 查看
第五讲:JAF架构及其在JavaMail中的应用
一、JavaBeans Activation Framework,JavaBeans激活框架
其功能有:
访问数据源中的数据;
获知数据的数据类型;
获知可对数据源进行的各种操作
用户对数据源执行某种操作时,自动创建执行该操作的软件的实例对象
JAF中主要的API及其间的关系如下图所示:
图1:JAF中核心API的关系
(1).DataHandler类是JAF的核心API应用程序通过它访问数据源中封装的数据以及数据的MIME类型并通过它获得JAF中为数据的MIME类型定义的操作列 表(CommandMap)。应用程序访问操作列表中的操作时,DataHandler还负责构建相应的命令对象(CommandObject)共程序使用。
(2).DataSource接口用于将数据封装成可被JAF框架使用的对象,它定义了对数据源的通过操作包括得到输入输出流的getInputStream和getOutputStrea
m方法以及得到数据MIME类型的getContentType方法。
它的两个实现类:FileDataSource(从文件系统中获取数据)、URLDataSource(从URL地址中获取数据)
(3). DataContentHandler接口用于把DataSource中封装的数据转换成相应的Java对象,或把Java对象转化为MIME形式的字节流并将其写入到输出流中。
(4).CommandObject接口定义了一个特定MIME类型数据执行特定操作的命令对象。
(5).CommandMap代表操作特定MIME类型数据的所有命令对象集合。
二、接口类介绍
2.1 DataSource接口
常用的方法有:
DataSource的两个实现子类是:URLDataSource、FileDataSource
其中FileDataSource通过文件获取输入输出流,并通过一个名为FileTypeMap类获得数据的MIME类型。
FileTypeMap类是一个抽象类,它用于判断文件数据的MIME类型,JAF提供的它的实现类 MimetypesFileTypeMap,如果应用程序没有显示的调用FileDataSource.setFileTypeMap设置任何的FileTypeMap的话,JAF默认使用此类来判断文件的MIME类型,FileTypeMap常用的方法有:
JAF获取文件的MIME类型有: "text/plain"、"text/html"、"text/jpeg"、"text/gif"等可以在activation.jar架包中的mimetypes.default文件中的查看。用户也可以自定义MIME类型文件自定义文件名为".mime.types"的文件用于定义文件后缀名和其MIME类型之间的映射关系。
2.2 DataHandler类
是应用程序和JAF框架之间定义了一个通用的数据访问 接口,其常用的方法有:
2.3 使用JAF操作数据的类
CommandMap类: DataHandler.getAllCommands获取数据额所有操作实际上是调用关联到DataHandler对象中的CommandMap.getAllCommands方法。CommandMap类中的主要方法有:
CommandInfo类: CommandMap的实现类使用CommandInfo类描述命令请求的结果。CommandInfo类为调用者提供所请求的命令动词,以及命令对象的一个实例。其常用方法有:
CommandObject类: JavaBean组件实现此接口,以获取该组件将要操作的数据,以及请求这些组件执行的命令动词。该接口中只有一个方法:
void setCommandContext(String verb, DataHandler dh) throws IOException
verb: 指定关联到组件上的命令动词
dh: 指定将要操作的数据,数据使用DataHandler对象进行封装。
三、使用JAF创建MIME消息
PS: 编写和安装自定义命令处理器、JAF构建CommandObject对象的过程可以参见《JavaMail开发详解》,以后在加以补充。
一、JavaBeans Activation Framework,JavaBeans激活框架
其功能有:
访问数据源中的数据;
获知数据的数据类型;
获知可对数据源进行的各种操作
用户对数据源执行某种操作时,自动创建执行该操作的软件的实例对象
JAF中主要的API及其间的关系如下图所示:
图1:JAF中核心API的关系
(1).DataHandler类是JAF的核心API应用程序通过它访问数据源中封装的数据以及数据的MIME类型并通过它获得JAF中为数据的MIME类型定义的操作列 表(CommandMap)。应用程序访问操作列表中的操作时,DataHandler还负责构建相应的命令对象(CommandObject)共程序使用。
(2).DataSource接口用于将数据封装成可被JAF框架使用的对象,它定义了对数据源的通过操作包括得到输入输出流的getInputStream和getOutputStrea
m方法以及得到数据MIME类型的getContentType方法。
它的两个实现类:FileDataSource(从文件系统中获取数据)、URLDataSource(从URL地址中获取数据)
(3). DataContentHandler接口用于把DataSource中封装的数据转换成相应的Java对象,或把Java对象转化为MIME形式的字节流并将其写入到输出流中。
(4).CommandObject接口定义了一个特定MIME类型数据执行特定操作的命令对象。
(5).CommandMap代表操作特定MIME类型数据的所有命令对象集合。
二、接口类介绍
2.1 DataSource接口
常用的方法有:
java.io.InputStream getInputStream() | 返回对数据进行读取的InputStream对象 |
java.io.OutputStream getOutputStream() | 返回可以向数据源写入数据的OutputStream对象 |
String getContentType() | 返回数据源中封装的数据的MIME类型 格式: “application/octet-stream” |
String getName() | 返回DataSource封装的数据的名称 |
URLDataSource(java.net.URL url) | 构造函数和一个URL关联通过这个URL获得输入输出流以及通过URL的Content-Type属性获取数据的MIME类型 |
其中FileDataSource通过文件获取输入输出流,并通过一个名为FileTypeMap类获得数据的MIME类型。
FileDataSource(java.io.File file) FileDataSource(java.lang.String) | 使用File对象或文件名实例化一个FileDataSource对象 |
setFileTypeMap(FileTypeMap map) | 设置判断数据MIME类型的FileTypeMap对象 |
getContentTyep() | 返回数据的MIME类型。若设置了FileTypeMap则返回,否则返回 getDefaultFileTypeMap对象,调用FileTypeMap中的getContentType方法返回MIME类型。 |
abstract String getContentType(File ) abstract String getContentType(String filename) | 返回文件的MIME类型 |
static void setDefaultFileTypeMap(FileTypeMap) | 设置默认的FileTypeMap类型 |
static FileTypeMap getDefaultFileTypeMap() | 获取默认的FileTypeMap类型 |
2.2 DataHandler类
是应用程序和JAF框架之间定义了一个通用的数据访问 接口,其常用的方法有:
DataHandler(DataSource ds) DataHandler(Object o, String mimeType) DataHandler(java.net.URL url) | 实例化DataHandler对象可以指定MIME类型或者使用一个URL实例一个对象 |
DataSource getDataSource() | 返回与此DataHandler相关联的DataSource对象。要么返回创建该DataHandler对象的DataSource对象,要么返回实例化DataHandler对象是指定的DataSource对象 |
String getName() | 返回数据对象的名称,此方法调用DataSource.getName()方法 |
String getContentType() | 获取封装在数据源中的MIME类型 |
InputStream getInputStream() throws IOException | 返回DataHandler对象的InputStream对象 |
writeTo(OutputStream os) throws IOException | 将数据写到一个指定的OutputStream流中 |
OutputStream getOutputStream() throws IOException | 获取DataHandler对象的OutputStream流以允许重写底层数据 |
setCommandMap(CommandMap) | |
CommandInfo[] getPreferredCommands() | 获取操作此数据类型的首选命令 |
CommandInfo[] getAllCommands() | 获取操作此数据类型的所有命令 |
CommandInfo getCommand (String cmdName) | 获取指定名称的命令 |
Object getContent() | 返回代表数据的Java对象 |
Object getBean() | 返回一个JavaBean组件,这个JavaBean组件中关联呢DataHandler中封装的数据,以及对数据的操作命令 |
CommandMap类: DataHandler.getAllCommands获取数据额所有操作实际上是调用关联到DataHandler对象中的CommandMap.getAllCommands方法。CommandMap类中的主要方法有:
static setDefaultCommandMap(CommandMap) | 设置CommandMap对象的默认CommandMap |
static CommandMap getDefaultCommandMap() | 获取默认的CommandMap类型 |
abstract CommandInfo[] getPreferredCommands(String mimetype) | 根据指定的MIME类型获取首选的可用命令列表 |
abstract CommandInfo[] getAllCommands() | |
abstract CommandIfo getCommand(String mimeType, String cmdName) | |
String[] getMimeType() | 获取CommandMap映射的所有MIME类型 |
CommandInfo(String verb, String className) | verb表示此CommandInfo描述的命令动词,className表示命令对象的完整类名 |
String getCommandName() | |
String getCommandClass() | 返回命令对象的完整类名 |
Object getCommandObject(DataHandler dh, ClassLoader loader) throws IOException, ClassNotFoundException | 返回已经实例化的JavaBean组件 |
void setCommandContext(String verb, DataHandler dh) throws IOException
verb: 指定关联到组件上的命令动词
dh: 指定将要操作的数据,数据使用DataHandler对象进行封装。
三、使用JAF创建MIME消息
FileDataSource fds = new FileDataSource(filename); imgBodyPart.setDataHandler(new DataHandler(fds));
PS: 编写和安装自定义命令处理器、JAF构建CommandObject对象的过程可以参见《JavaMail开发详解》,以后在加以补充。
相关文章推荐
- ZooKeeper架构设计及其应用要点
- 基于Hadoop架构的分布式计算和存储技术及其应用
- 单块架构应用及其面临的挑战(读书笔记)
- ZooKeeper架构设计及其应用要点
- 浅谈android系统架构及其应用开发特色
- ZooKeeper架构设计及其应用要点
- ZooKeeper架构设计及其应用要点
- DICOM标准及应用——第五讲 医学图像的信息组织及其表现
- 部署LNMP架构及其应用
- MINA及其在高性能通讯应用中的突出问题(NIO架构及应用之二)
- DICOM标准及应用——第五讲 医学图像的信息组织及其表现
- [原创]HandlerSocket系列(二):架构、特点及其应用场景
- ZooKeeper架构设计及其应用要点
- ZooKeeper架构设计及其应用要点
- ZooKeeper架构设计及其应用要点
- ZooKeeper架构设计及其应用
- ZooKeeper架构设计及其应用要点
- ZooKeeper架构设计及其应用要点
- ZooKeeper架构设计及其应用要点
- 部署LAMP架构及其应用