2015-06-14 73 views
3

我使用ROME来生成RSS feed并将Jersey作为REST服务。如何使用REST服务返回RSS?

这是我的RSS提要生成。

public SyndFeed generate() 
{ 
    SyndFeed feed = new SyndFeedImpl(); 
    feed.setFeedType("rss_2.0"); 
    feed.setTitle("My Site"); 
    feed.setLink("http://example.com"); 
    feed.setDescription("Test Site."); 

    List<SyndEntry> entries = new ArrayList<SyndEntry>(); 
    SyndEntry entry = null; 
    SyndContent description = null; 

    entry = new SyndEntryImpl(); 
    entry.setTitle("Entry1"); 
    entry.setLink("http://example.com/entry1"); 
    entry.setPublishedDate(new Date()); 

    description = new SyndContentImpl(); 
    description.setType("text/html"); 
    description.setValue("This is the content of entry 1."); 
    entry.setDescription(description); 

    entries.add(entry); 
    feed.setEntries(entries); 

    return feed; 
} 

并获得

@GET 
@Path("/getFeed") 
@Produces(MediaType.APPLICATION_XML) 
public SyndFeed getFeed() 
{ 
    RSSFeed rssFeed = new RSSFeed(); 
    return rssFeed.generate(); 
} 

我得到一个错误的不兼容的类型身体作家饲料的方法。如何使服务返回XML与饲料?

回答

2

泽西岛不知道如何将SyndFeed的实例映射到XML。这工作。

@Path("stackoverflow") 
public class RomeRessource { 

    @GET 
    @Path("/feed") 
    @Produces("application/rss+xml") 
    public Response getFeed() throws IOException, FeedException { 
     final SyndFeed feed = generate(); 

     // Write the SyndFeed to a Writer. 
     final SyndFeedOutput output = new SyndFeedOutput(); 
     final Writer writer = new StringWriter(); 
     output.output(feed, writer); 

     // Return a JAX-RS Response with the Writer as the body. 
     return Response.ok(writer.toString()).build(); 
    } 

    private SyndFeed generate() { 
     final SyndFeed feed = new SyndFeedImpl(); 
     feed.setFeedType("rss_2.0"); 
     feed.setTitle("My Site"); 
     feed.setLink("http://example.com"); 
     feed.setDescription("Test Site."); 

     final List<SyndEntry> entries = new ArrayList<>(); 

     final SyndEntry entry = new SyndEntryImpl(); 
     entry.setTitle("Entry1"); 
     entry.setLink("http://example.com/entry1"); 
     entry.setPublishedDate(new Date()); 

     final SyndContent description = new SyndContentImpl(); 
     description.setType("text/html"); 
     description.setValue("This is the content of entry 1."); 

     entry.setDescription(description); 

     entries.add(entry); 

     feed.setEntries(entries); 

     return feed; 
    } 
} 

GET资源:

$ curl -v http://localhost:8080/StackOverflowWeb/webresources/stackoverflow/feed 
* Trying ::1... 
* Connected to localhost (::1) port 8080 (#0) 
> GET /StackOverflowWeb/webresources/stackoverflow/feed HTTP/1.1 
> Host: localhost:8080 
> User-Agent: curl/7.42.1 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
< Server: GlassFish Server Open Source Edition 4.1 
< X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition 4.1 Java/Oracle Corporation/1.8) 
< Content-Type: application/rss+xml 
< Date: Sun, 14 Jun 2015 13:15:54 GMT 
< Content-Length: 565 
< 
<?xml version="1.0" encoding="UTF-8"?> 
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"> 
    <channel> 
    <title>My Site</title> 
    <link>http://example.com</link> 
    <description>Test Site.</description> 
    <item> 
     <title>Entry1</title> 
     <link>http://example.com/entry1</link> 
     <description>This is the content of entry 1.</description> 
     <pubDate>Sun, 14 Jun 2015 13:15:54 GMT</pubDate> 
     <guid>http://example.com/entry1</guid> 
     <dc:date>2015-06-14T13:15:54Z</dc:date> 
    </item> 
    </channel> 
</rss> 

* Connection #0 to host localhost left intact