2017-02-25 53 views
0

我已经准备好了根据https://rometools.github.io/rome/ROMEReleases/ROME0.4Beta/RomeV0.4Tutorials/RomeV0.4TutorialUsingRomeWithinAServletToCreateAndReturnAFeed.html示例的servlet。但是,在从头创建的https://validator.w3.org/feed/check.cgi上未验证rss(因此未验证Feed(例如,在Yandex窗口小部件策略中),它会忽略通道标记中的元素。如何在GAE上将RSS馈入Java Web应用程序?

有几个提示,如Atom:link in RSS using Rome如何启用atom:link,但它们基于rome.properties,在GAE上不可能使用它们 - 属性文件未加载到webapp的类路径中。 所以这是使原子最简单的方法:链接工作?

回答

0

人们认识,即未接元件可被添加到XML右在servlet,不需要用于该特定目的为罗马所以附加模块类:

公共无效的doGet(HttpServletRequest的REQ,HttpServletResponse的水库)抛出IOException {尝试{SyndFeed feed = getFeed(req,dataEntries,streamGauge);}

 String feedType = req.getParameter(FEED_TYPE); 
     feedType = (feedType != null) ? feedType : _defaultFeedType; 
     feed.setFeedType(feedType); 
     res.setContentType(MIME_TYPE); 
     SyndFeedOutput output = new SyndFeedOutput(); 

     Writer writer = new StringWriter(); 
     output.output(feed, writer); 

     SAXBuilder db = null; 
     Document doc = null; 
     db = new SAXBuilder(); 
     InputSource is = new InputSource(); 
     is.setCharacterStream(new StringReader(writer.toString())); 
     try { 
      doc = db.build(is); 
     } catch (JDOMException e) { 
      e.printStackTrace(); 
     } 

     Element root = 
       doc.getRootElement(); 

     Element channel = root.getChild("channel"); 

     FeedServlet.AtomNSModule atomNSModule = (FeedServlet.AtomNSModule) module; 
     root.addNamespaceDeclaration(ATOM_NS); 

     Element atomLink = new Element("link", ATOM_NS); 
     atomNSModule.setLink("http://volgalevel.appspot.com/feed"); 
     atomLink.setAttribute("href", atomNSModule.getLink()); 
     atomLink.setAttribute("rel", "self"); 
     atomLink.setAttribute("type", "application/rss+xml"); 

     channel.addContent(0, atomLink); 
     XMLOutputter outputter = new XMLOutputter(); 
     outputter.output(doc, res.getWriter()); 
    } catch (FeedException ex) { 
     String msg = COULD_NOT_GENERATE_FEED_ERROR; 
     log(msg, ex); 
     res.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, msg); 
    } 
} 

注意进口:

import org.jdom2.Element; 
import org.jdom2.Namespace; 
import org.jdom2.Document; 
import org.jdom2.*; 
import org.jdom2.input.SAXBuilder; 
import org.jdom2.output.XMLOutputter; 
import org.xml.sax.InputSource; 
import org.xml.sax.SAXException; 

实际工作GAE的Servlet的RSS可以在那里达到:https://github.com/Eljah/volgalevel/blob/master/src/main/java/com/appspot/FeedServlet.java

它还修正重复pubdate的问题

相关问题