001
014
015 package com.liferay.portlet.rss.util;
016
017 import com.liferay.portal.kernel.util.HttpUtil;
018 import com.liferay.portal.kernel.util.Time;
019 import com.liferay.portal.kernel.webcache.WebCacheException;
020 import com.liferay.portal.kernel.webcache.WebCacheItem;
021 import com.liferay.portal.util.HttpImpl;
022 import com.liferay.portal.util.PropsValues;
023
024 import com.sun.syndication.feed.synd.SyndFeed;
025 import com.sun.syndication.io.SyndFeedInput;
026 import com.sun.syndication.io.XmlReader;
027
028 import org.apache.commons.httpclient.HostConfiguration;
029 import org.apache.commons.httpclient.HttpClient;
030 import org.apache.commons.httpclient.methods.GetMethod;
031 import org.apache.commons.httpclient.params.HttpClientParams;
032
033
036 public class RSSWebCacheItem implements WebCacheItem {
037
038 public RSSWebCacheItem(String url) {
039 _url = url;
040 }
041
042 public Object convert(String key) throws WebCacheException {
043 SyndFeed feed = null;
044
045 try {
046
047
048
049
050
051
052
053
054
055
056
057
061
062 HttpImpl httpImpl = (HttpImpl)HttpUtil.getHttp();
063
064 HostConfiguration hostConfiguration = httpImpl.getHostConfiguration(
065 _url);
066
067 HttpClient httpClient = httpImpl.getClient(hostConfiguration);
068
069 httpImpl.proxifyState(httpClient.getState(), hostConfiguration);
070
071 HttpClientParams httpClientParams = httpClient.getParams();
072
073 httpClientParams.setConnectionManagerTimeout(
074 PropsValues.RSS_CONNECTION_TIMEOUT);
075 httpClientParams.setSoTimeout(PropsValues.RSS_CONNECTION_TIMEOUT);
076
077 GetMethod getMethod = new GetMethod(_url);
078
079 httpClient.executeMethod(hostConfiguration, getMethod);
080
081 SyndFeedInput input = new SyndFeedInput();
082
083 feed = input.build(
084 new XmlReader(getMethod.getResponseBodyAsStream()));
085 }
086 catch (Exception e) {
087 throw new WebCacheException(_url + " " + e.toString());
088 }
089
090 return feed;
091 }
092
093 public long getRefreshTime() {
094 return _REFRESH_TIME;
095 }
096
097 private static final long _REFRESH_TIME = Time.MINUTE * 20;
098
099 private String _url;
100
101 }