A seguir há um exemplo de um Servlet que processa uma lista de Notícias gravada em um banco de dados e gera o RSS utilizando PrintWriter.
//imports...
public class FeedWriter extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/xml");
OutputStream os = response.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os , "UTF-8");
PrintWriter pw = new PrintWriter(osw);
create("rss_2.0", pw);
writer.close();
}
protected void create(String feedType, Writer writer) {
try {
SyndFeed feed = new SyndFeedImpl();
feed.setFeedType(feedType);
feed.setTitle("Noticias)");
feed.setLink("http://rome.dev.java.net");
feed.setDescription("BLA BLA BLA");
List entries = new ArrayList();
SyndEntry entry;
SyndContent description;
Dao dao = new Dao();
for (Noticia noticia : dao.findAllNoticias()) {
entry = new SyndEntryImpl();
entry.setTitle(noticia.getTitulo());
entry.setLink(noticia.getLink());
entry.setPublishedDate(noticia.getDataPost());
description = new SyndContentImpl();
description.setType("text/plain");
description.setValue(noticia.getDescricao());
entry.setDescription(description);
entries.add(entry);
}
feed.setEntries(entries);
SyndFeedOutput output = new SyndFeedOutput();
output.output(feed,writer);
} catch (Exception ex) {
ex.printStackTrace();
System.out.println("ERROR: "+ex.getMessage());
}
}
}
O retorno será algo semelhante a:
Para saber mais sobre o ROME, acesse http://wiki.java.net/bin/view/Javawsxml/Rome
5 comentários:
Parece ser muito interessante. Estava procurando justamente uma forma rápida de criar RSS.
Olá Bruno,
A dica foi boa e em ótima hora para mim.
A implementação foi fácil, contudo estou tendo problemas com os encodings.
O título das entradas estão ficando, por exemplo: "Charlie Kaufman estr�ia na dire��o e concorre � Palma de Ouro"
Claro que nos locais das ? são caracteres do nosso português. Estes dados estão OK no banco e ao definir no objeto ficam ok, apenas quando salvo o XML fico com problemas.
Já setei o entry.setEncoding("") para UTF-8, ISO-8859-1, UNICODE... mas sem sucesso.
Tens alguma experiência com este problema?
É incrível como, após procurar desde de manhã, após postar a dúvida consigo a solução.
Fica para registro, como resolvi. Na hora de salvar (já que estou salvando em arquivo), mudei para:
FileOutputStream fileOutputStream = new FileOutputStream(new File(_caminhoXml));
OutputStreamWriter osw = new OutputStreamWriter(fileOutputStream, rbRSS.getString("Rss.Noticia.Geral.Encoding"));
output.output(feed, osw);
osw.close();
Abs
Boa Fernando, valeu pelos Posts. :)
Que bom que pude ajudar de alguma forma.
forte abraço
Desculpa a ignorancia, eu criai uma Servlet, coloquei o código postado, adicionei as libs necessárias porém nao sei como faco pra colocar esta Servelt para rodar e gerar o arquivo xml, e nem sei como mape-la no web.xml, se alguém poder me ajudar agradeceria henrique@newt.com.br
Postar um comentário