ROME을 활용해서 Feed 생성하기

|
ROME과 Spring을 활용해서 Feed를 생성하는 소스입니다. 블로그 시스템을 개발하거나 기존 게시판 서비스에서 Feed를 만들어서 외부에 공유해 주기위해서 아래 소스들을 활용하면 원하시는 Feed를 생성할 수 있을 것입니다.
ROME이 여러모로 좋은 오픈소스로 활용되는 것 같네요. 좀더 분석해서 필요한 기능들을 공유할께요.
필요한 라이브러리는 ROME 1.0, JDOM 1.0이 필요합니다.

1. Feed 생성 소스

package client;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.mimul.DataFacade;
import com.mimul.domain.Category;
import com.mimul.domain.Entry;
import com.mimul.domain.SiteConfig;
import com.sun.syndication.feed.synd.SyndCategory;
import com.sun.syndication.feed.synd.SyndCategoryImpl;
import com.sun.syndication.feed.synd.SyndContent;
import com.sun.syndication.feed.synd.SyndContentImpl;
import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndEntryImpl;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.feed.synd.SyndFeedImpl;

public class CreateFeed
{
private final Log log = LogFactory.getLog(this.getClass());
private DataFacade dataFacade;

public void setDataFacade(DataFacade dataFacade) {
this.dataFacade = dataFacade;
}

public SyndFeed getFeed(String type)
{
SyndFeed feed = null;
Entry post = null;
List<Entry> recentEntries = null;
List<SyndEntry> entries = null;
List<SyndCategory> categories = null;
StringBuilder sb = null;

try {
feed = new SyndFeedImpl();
feed.setFeedType(type); //rss_2.0
feed.setTitle("Mimul's Developer World");
feed.setLink("http://www.mimul.com/");
feed.setDescription("Java Ecxamples Code");
entries = new ArrayList<SyndEntry>();

post = new Entry();
post.setType("post");
post.setEntryStatus("publish");
// 데이터 베이스에 저장된 엔트리를 가져온다
recentEntries = dataFacade.getEntryPage(post,
10, 0, null, null).getItems();

for (Entry entry:recentEntries) {
SyndEntry syndEntry = new SyndEntryImpl();
syndEntry.setTitle(entry.getTitle());
String link = null;
if(StringUtils.isNotBlank(entry.getName())) {
link = "http://www.mimul.com" + "/post/" +
entry.getName() + ".html";
}else{
link = "http://www.mimul.com" + "/post/id/" +
entry.getId() + ".html";
}
syndEntry.setLink(link);
syndEntry.setAuthor(entry.getAuthor().getNickname());
syndEntry.setPublishedDate(entry.getPostTime());
categories = new ArrayList<SyndCategory>();
// 카테고리 정보를 가져온다
for(Category category:entry.getCategories()) {
SyndCategory syndCategory = new SyndCategoryImpl();
syndCategory.setName(category.getName());
syndCategory.setTaxonomyUri("http://www.mimul.com" +
"/category/" + category.getName() + "/");
}
syndEntry.setCategories(categories);
SyndContent content = new SyndContentImpl();
content.setType("text/html");
sb = new StringBuilder();
sb.append(entry.getSummary())
.append("<p>").append("<a href=\"").append(link)
.append("\">[more..]</a></p>");
content.setValue(sb.toString());
syndEntry.setDescription(content);
entries.add(syndEntry);
}
feed.setEntries(entries);
} catch (Exception e) {
log.error(e);
}
return feed;
}
}
2. Servlet 소스

public void doPost(HttpServletRequest request, 
HttpServletResponse response)
throws ServletException, IOException {
SyndFeedOutput output = null;
try {
SyndFeed feed = getCreateFeed().getFeed("rss_2.0");
feed.setFeedType("rss_2.0");

response.setContentType("application/xml; charset=UTF-8");
response.setHeader("Pragma","No-Cache");
response.setHeader("Cache-Control","No-Cache");
response.setDateHeader("Expires",0);

output = new SyndFeedOutput();
output.output(feed, response.getWriter());
} catch (FeedException e) {
log.error(e);
response.sendError(
HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
"FEED 생성 오류");
}
}
private CreateFeed getCreateFeed() {
return (CreateFeed) WebApplicationContextUtils.
getWebApplicationContext(getServletConfig()
.getServletContext()).getBean("createFeed");
}

And