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.security.lang.DoPrivilegedBean;
022 import com.liferay.portal.util.HttpImpl;
023 import com.liferay.portal.util.PropsValues;
024
025 import com.sun.syndication.feed.synd.SyndFeed;
026 import com.sun.syndication.io.SyndFeedInput;
027 import com.sun.syndication.io.XmlReader;
028
029 import org.apache.commons.httpclient.HostConfiguration;
030 import org.apache.commons.httpclient.HttpClient;
031 import org.apache.commons.httpclient.methods.GetMethod;
032 import org.apache.commons.httpclient.params.HttpClientParams;
033
034
037 public class RSSWebCacheItem implements WebCacheItem {
038
039 public RSSWebCacheItem(String url) {
040 _url = url;
041 }
042
043 @Override
044 public Object convert(String key) throws WebCacheException {
045 SyndFeed feed = null;
046
047 try {
048
049
050
051
052
053
054
055
056
057
058
059
063
064 HttpImpl httpImpl = null;
065
066 Object httpObject = HttpUtil.getHttp();
067
068 if (httpObject instanceof DoPrivilegedBean) {
069 DoPrivilegedBean doPrivilegedBean =
070 (DoPrivilegedBean)httpObject;
071
072 httpImpl = (HttpImpl)doPrivilegedBean.getActualBean();
073 }
074 else {
075 httpImpl = (HttpImpl)httpObject;
076 }
077
078 HostConfiguration hostConfiguration = httpImpl.getHostConfiguration(
079 _url);
080
081 HttpClient httpClient = httpImpl.getClient(hostConfiguration);
082
083 httpImpl.proxifyState(httpClient.getState(), hostConfiguration);
084
085 HttpClientParams httpClientParams = httpClient.getParams();
086
087 httpClientParams.setConnectionManagerTimeout(
088 PropsValues.RSS_CONNECTION_TIMEOUT);
089 httpClientParams.setSoTimeout(PropsValues.RSS_CONNECTION_TIMEOUT);
090
091 GetMethod getMethod = new GetMethod(
092 httpImpl.encodeParameters(_url));
093
094 httpClient.executeMethod(hostConfiguration, getMethod);
095
096 SyndFeedInput input = new SyndFeedInput();
097
098 feed = input.build(
099 new XmlReader(getMethod.getResponseBodyAsStream()));
100 }
101 catch (Exception e) {
102 throw new WebCacheException(_url + " " + e.toString());
103 }
104
105 return feed;
106 }
107
108 @Override
109 public long getRefreshTime() {
110 return _REFRESH_TIME;
111 }
112
113 private static final long _REFRESH_TIME = Time.MINUTE * 20;
114
115 private String _url;
116
117 }