- 浏览: 623936 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
xianzi_2008:
xianzi_2008 写道楼主请教下,我缓存了一个List& ...
Ehcache -
xianzi_2008:
楼主请教下,我缓存了一个List<Bean>对象, ...
Ehcache -
jsdsh:
收藏好.五个字
hibernate之one-to-many详细 -
Tlife:
好!!!!
hibernate------HQL总结 -
yanqingluo:
例子很恰当。
观察者模式
Parser部分(解析)
com.sun.syndication.io.SyndFeedInput input = new com.sun.syndication.io.SyndFeedInput();
调用
public SyndFeedInput() {
this(false);
}
public SyndFeedInput(boolean validate) {
_feedInput = new WireFeedInput(validate);
}
直接就构造了对象WireFeedInput _feedInput.
com.sun.syndication.feed.synd.SyndFeed feed = input.build(new
com.sun.syndication.io.XmlReader(feedUrl));
实际上调用的是WireFeedInput对象的build方法
WireFeedInput里有个对象FeedParsers,构造WireFeedInput时,也会实例化FeedParsers,实例化
FeedParsers时,由于FeedParsers extends PluginManager,所以会通过PluginManager去加载
rome.properties文件,(因为FeedParsers 里FEED_PARSERS_KEY = "WireFeedParser.classes"所以会去
rome.properties里加载key为WireFeedParser.classes的值)。并实例化所有的parser对象。
所以当在WireFeedInput里调用FeedParsers的getParserFor(document)方法时,会自动匹配该document需
要用哪个解析器来进行解析
FeedParsers.getParserFor(document)方法返回的是个interface WireFeedParser.
在WireFeedInput里调用
public WireFeed build(Document document) throws IllegalArgumentException,FeedException {
WireFeedParser parser = FEED_PARSERS.getParserFor(document);//确定使用哪个解析器
if (parser==null) {
throw new IllegalArgumentException("Invalid document");
}
return parser.parse(document, _validate);//最终调用的parser方法,返回的是一个
WireFeed对象。
}
SyndFeedImpl构造函数接受到WireFeed参数以后,直接通过feedType获取需要哪种转换器(Converter)
因为CONVERTERS是Converters对象,Converters是extends PluginManager的。所以可以通过Converters
来加载rome.properties,并读取key为Converter.classes的value;
public SyndFeedImpl(WireFeed feed) {
this(SyndFeed.class,IGNORE_PROPERTIES);
if (feed!=null) {
_feedType = feed.getFeedType();
Converter converter = CONVERTERS.getConverter(_feedType);//获取需要哪种转换器
if (converter==null) {
throw new IllegalArgumentException("Invalid feed type ["+_feedType+"]");
}
converter.copyInto(feed,this);//将WireFeed对象里的各个属性值,转换为SyndFeed对应
的值
}
}
//将WireFeed对象里的各个属性值,转换为SyndFeed对应的值
public void copyInto(WireFeed feed,SyndFeed syndFeed) {
syndFeed.setModules(ModuleUtils.cloneModules(feed.getModules()));
if (((List)feed.getForeignMarkup()).size() > 0) {
syndFeed.setForeignMarkup(feed.getForeignMarkup());
}
syndFeed.setEncoding(feed.getEncoding());
Channel channel = (Channel) feed;
syndFeed.setTitle(channel.getTitle());
syndFeed.setLink(channel.getLink());
syndFeed.setDescription(channel.getDescription());
Image image = channel.getImage();
if (image!=null) {
syndFeed.setImage(createSyndImage(image));
}
List items = channel.getItems();
if (items!=null) {
syndFeed.setEntries(createSyndEntries(items));
}
}
Channel extends WireFeed(是个abstaract)
输出部分:
//写入到另一个文件里
SyndFeedOutput output = new SyndFeedOutput();
feed.setFeedType(feedType);//以哪种格式输出feed,如果这里不设置以哪种格式输出,会以它原来的格
式输出
output.output(feed, new File("c:/pic/2.xml"));
直接调用的是SyndFeedOutput对象里的方法:
public void output(SyndFeed feed,File file) throws IOException, FeedException {
_feedOutput.output(feed.createWireFeed(),file);//先获得真正的WireFeed后,再让
WireFeedOutput去处理
}
WireFeedOutput对象里的output方法:
public void output(WireFeed feed,File file) throws
IllegalArgumentException,IOException,FeedException {
Writer writer = new FileWriter(file);
output(feed,writer);
writer.close();
}
Convert里:又把SyndFeed的Entries格式转换为WireFeed的Item形式
可以把WireFeed看成是一种中间格式,是document和SyndFeed之间的一种中间格式(只是可以这样看作)
public WireFeed createRealFeed(SyndFeed syndFeed) {
return createRealFeed(getType(),syndFeed);
}
protected WireFeed createRealFeed(String type,SyndFeed syndFeed) {
Channel channel = new Channel(type);
channel.setModules(ModuleUtils.cloneModules(syndFeed.getModules()));
channel.setEncoding(syndFeed.getEncoding());
channel.setTitle(syndFeed.getTitle());
channel.setLink(syndFeed.getLink());
channel.setDescription(syndFeed.getDescription());
SyndImage sImage = syndFeed.getImage();
if (sImage!=null) {
channel.setImage(createRSSImage(sImage));
}
List sEntries = syndFeed.getEntries();
if (sEntries!=null) {
channel.setItems(createRSSItems(sEntries));
}
return channel;
}
总结:
1。WireFeedOutput和WireFeedInput只是对WireFeed的一种操作(也就是需要SyndOutput传递给它的参数
是个WireFeed对象,WireFeedInput返回的也是个WireFeed对象)。(Document<==>WireFeed之间转换)
例如:WireFeedInput是接收到一个Document对象,然后将其转换为WireFeed对象,同理 WireFeedOutput
也是接收到WireFeed对象后,将其转换为Document对象。
2。SyndFeedOutput和SyndFeedInput是操纵SyndFeedImpl对象的。例如:
SyndFeedInput build方法,创建SyndFeed对象
public SyndFeed build(Document document) throws IllegalArgumentException,FeedException {
return new SyndFeedImpl(_feedInput.build(document));
}
SyndFeedOut output方法
public void output(SyndFeed feed,File file) throws IOException, FeedException {
_feedOutput.output(feed.createWireFeed(),file);
}
3。SyndFeedImpl对象:(SyndFeed<==>WireFeed):
A.public SyndFeedImpl(WireFeed feed)构造函数中代码converter.copyInto(feed,this);,将WireFeed
转换为SyndFeed格式
B.public WireFeed createWireFeed(String feedType),将SyndFeed格式转换为WireFeed
4.Convert 体现的是WireFeed和SyndFeed之间的转换
- rome.rar (9 KB)
- 描述: rome io包下的类之间的关系
- 下载次数: 74
发表评论
-
struts备忘(转)
2008-03-31 15:14 1049=======<html:messages>=== ... -
Ehcache
2008-01-04 17:33 6980参考:http://macrochen.blogdriver. ... -
maven2介绍
2008-01-03 10:35 7596Maven2主要配置文件:pom.xml和settings.x ... -
struts2知识点备忘
2007-12-23 19:06 2253struts2标签写的form表单 1. 只有FieldErr ... -
dwr 错误:org.directwebremoting.util.CommonsLogging
2007-12-07 15:47 3456dwr遇到这种错误: org.directwebremotin ... -
XFire简单使用
2007-11-29 15:09 37341 . XFire可以认为是webservice的一个实现。 ... -
JDBM存储
2007-09-24 14:09 28471.JDBM可以把它理解成一 ... -
转:maven2
2007-09-11 10:00 16021.安装 下载Maven.目前的版本是2.0.4 ... -
eclipse plugin:EasyExplorer
2007-09-04 17:19 13975EasyExplorer 是一个类似于 Windows Ex ... -
openjms
2007-09-02 12:16 11702种模式 : 1. PTP (Point-to-Point) ... -
struts跳转问题
2007-08-07 15:46 3723web.xml <!-- Struts Action ... -
jndi,连接池,nameserver区别
2007-04-18 10:16 1457连接池就不用说了 jndi是种规范 nameserver是按照 ... -
XML-RPC 中文传递
2007-04-13 15:29 1936XML-RPC 中文传递 /** * 支持中文,Bas ... -
prototype
2007-03-14 16:52 1225new Ajax.Updater("infotop ... -
删除目录及子目录下隐藏的某个文件
2007-03-06 15:03 1430删除目录及子目录下隐藏的某个文件 del /S /A:H Th ... -
ehcache的一个bug
2007-01-23 16:55 3667java.lang.IllegalAccessError: t ... -
hibernate 缓存
2007-01-19 17:24 1787查询缓存: 1。key(根据hql生成的sql,再加上参数,分 ... -
Rome使用简单说明一(基本应用)
2007-01-17 16:10 2952Rome: http://wiki.java.net/bin/ ... -
dwr遇到的问题解决
2007-01-10 19:05 1707问题:.Max depth exceeded when der ... -
XMLC在eclipse中的使用
2007-01-06 17:49 2228XMLC 插件 关于外部插件 ...
相关推荐
1. **导入源码**:首先,将"ROME1.0"压缩包解压,获取到"rome-1.0.jar"的源码文件,可以使用IDE如Eclipse或IntelliJ IDEA导入源码项目。 2. **了解包结构**:查看源码中的包组织,如`com.rometools`下的各个子包,...
2. **源码分析** - ROME1.0SRC.rar包含的是Rome的源代码,通过阅读源码,开发者可以深入了解其内部工作原理,包括如何解析XML结构,如何构建和操作Feed对象等。 - 源码学习有助于理解数据模型,如`Feed`, `Entry`,...
接下来,我们将通过一个简单的实例来展示如何使用Rome解析RSS feed。首先,我们需要导入必要的库: ```java import com.rometools.rome.feed.synd.SyndFeed; import com.rometools.rome.io.SyndFeedInput; import ...
2. **源码与文档**:在下载集合中,"rome-1.0-javadoc"包含了完整的API文档,这对于理解并有效地使用ROME框架至关重要。通过这些Javadoc,开发者可以查找每个类、方法和接口的详细说明,了解如何实现特定功能。 3. ...
以下是关于Rome 1.0RC2的关键知识点: 1. **RSS和Atom Feed解析**:Rome库提供了`RSSModule`和`AtomModule`类,它们实现了JSR 172(JavaTM API for XML Processing, JAXP)的`Unmarshaller`接口,能够将XML数据转换...
标题中的“jdom和rome1.0包”指的是两个Java库,一个是JDOM,另一个是ROME。这两个库在处理XML数据和RSS feed时起到关键作用。 JDOM(Java Document Object Model)是一个用纯Java实现的DOM(Document Object Model...
为了处理和解析XML文件,开发者通常会使用专门的库,如Java中的JDOM和ROME。这两个库是Java开发者的强大工具,尤其在构建RSS(Really Simple Syndication) feeds时。 **JDOM** JDOM,全称为Java Document Object ...
- "Gemini"可能代表了Rome OS自举过程中的一个关键组件或者模块,这可能是自举加载器的一部分,或者是内核初始化阶段的代码。 - 在分析这个文件之前,我们需要理解它在整个自举流程中的作用。Gemini文件可能包含了...
解压后,开发者可以直接将"rome-0.9.jar"添加到Java项目的类路径中,以便在项目中使用Rome的功能。 "rome-license.txt"则包含了Rome库的许可协议,这是开源软件中常见的文件,通常会声明软件的使用、修改和分发的...
标题 "rome-1.0.jar.zip" 暗示我们正在处理一个压缩文件,其中包含一个名为 "rome-1.0.jar" 的Java归档(JAR)文件。描述同样简单明了,只重复了标题的信息。标签 "rome-1.0.jar" 强调了压缩包的核心内容。压缩包内...
项目中的其他部分,如数据库连接、文件读写等,都应使用相同的字符编码,以避免在数据传输和转换过程中出现乱码。 另外,有时问题可能出在环境差异上,比如在不同操作系统或服务器上的字符集设置不同。这时,可以在...
NULL 博文链接:https://chenhao-yssy.iteye.com/blog/1074264
Rome 是一个基于 Java 的开源项目,提供了一组 Atom/RSS 工具类,以使得用 Java 可以更方便和快捷地操作大部分 Syndication 格式数据。Rome 需要 JDK1.4 以上版本和 JDom.jar。 Rome 的主要功能包括解析器和生成器...
JDOM和ROME的结合使用,可以实现从XML文档中提取RSS Feed,然后通过ROME解析这些Feed,提取出文章标题、描述、链接等信息,甚至可以进一步处理这些信息,比如存入数据库或进行数据分析。这样的组合,为开发者提供了...
在IT行业中,RSS(Really Simple Syndication)是一种广泛使用的数据格式,它允许用户订阅和获取网站更新,如新闻、博客文章或播客等。而"jdom+rome JAR包"是两个Java库,用于帮助开发者更方便地处理XML文档,并...
【时间插件ROME】是一款优秀的前端开发工具,主要用于在网页应用中实现自定义日期和时间选择功能。它具有无依赖性的特点,意味着开发者无需额外引入其他库或框架,即可直接使用该插件,大大简化了项目的构建过程。...