- 浏览: 616018 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 1005=======<html:messages>=== ... -
Ehcache
2008-01-04 17:33 6936参考:http://macrochen.blogdriver. ... -
maven2介绍
2008-01-03 10:35 7523Maven2主要配置文件:pom.xml和settings.x ... -
struts2知识点备忘
2007-12-23 19:06 2222struts2标签写的form表单 1. 只有FieldErr ... -
dwr 错误:org.directwebremoting.util.CommonsLogging
2007-12-07 15:47 3385dwr遇到这种错误: org.directwebremotin ... -
XFire简单使用
2007-11-29 15:09 36801 . XFire可以认为是webservice的一个实现。 ... -
JDBM存储
2007-09-24 14:09 28001.JDBM可以把它理解成一 ... -
转:maven2
2007-09-11 10:00 15521.安装 下载Maven.目前的版本是2.0.4 ... -
eclipse plugin:EasyExplorer
2007-09-04 17:19 13931EasyExplorer 是一个类似于 Windows Ex ... -
openjms
2007-09-02 12:16 11312种模式 : 1. PTP (Point-to-Point) ... -
struts跳转问题
2007-08-07 15:46 3674web.xml <!-- Struts Action ... -
jndi,连接池,nameserver区别
2007-04-18 10:16 1420连接池就不用说了 jndi是种规范 nameserver是按照 ... -
XML-RPC 中文传递
2007-04-13 15:29 1899XML-RPC 中文传递 /** * 支持中文,Bas ... -
prototype
2007-03-14 16:52 1169new Ajax.Updater("infotop ... -
删除目录及子目录下隐藏的某个文件
2007-03-06 15:03 1391删除目录及子目录下隐藏的某个文件 del /S /A:H Th ... -
ehcache的一个bug
2007-01-23 16:55 3628java.lang.IllegalAccessError: t ... -
hibernate 缓存
2007-01-19 17:24 1748查询缓存: 1。key(根据hql生成的sql,再加上参数,分 ... -
Rome使用简单说明一(基本应用)
2007-01-17 16:10 2919Rome: http://wiki.java.net/bin/ ... -
dwr遇到的问题解决
2007-01-10 19:05 1656问题:.Max depth exceeded when der ... -
XMLC在eclipse中的使用
2007-01-06 17:49 2170XMLC 插件 关于外部插件 ...
相关推荐
rome-1.0.jar rome.jar 源码
rome源码及jar包 解析百度rss新闻不同栏目的新闻,很方便很实用
java使用Rome解析Rss的实例
NULL 博文链接:https://chenhao-yssy.iteye.com/blog/1074264
Rome解析RSS必备jar
rome-1.0RC2 source,jar and doc
解析所用的jdom 获取所用的rome合集。快来建立自己的rss吧
rome包rss使用 支持各种rss版本 XXXXX XXXXX XXXXX XXXX
ROME1.0的API文档, 该文档为自制CHM版本,没有检索.
这是我整理出来的Rome OS自举部分的框架。
rome-1.0.jar
rome开发rss jdom rom1.0
RSS开源框架ROME1.0下载集合 1.rome-1.0-javadoc 2.rome-1.0-sources
rome开发获取rss 配合jdom简单方便。十分的好用,欢迎下载。
rome-0.9.jar.zip
Rome是为RSS聚合而开发的一个框架,让你可以快速的开发基于java的RSS阅读