如何处理Wicket 1.5中的IResourceStreamWriter API更改?

时间:2011-12-29 09:15:26

标签: wicket wicket-1.5

在Wicket 1.4中,我有一个自定义的AbstractResourceStreamWriter(用于自定义类型的链接,用于流式传输即时生成的文件):

private AbstractResourceStreamWriter resourceStreamWriter() {
    return new AbstractResourceStreamWriter() {
        @Override
        public void write(OutputStream output) {
            try {
                reportService.generateReport(output, report);
            } catch (ReportGenerationException e) {
               // ... 
            }
        }

        @Override
        public String getContentType() {
            return CONTENT_TYPES.get(report.getOutputType());
        }
    };
}

在Wicket 1.5中, IResourceStreamWriter界面已更改,因此该方法获得Response而不是OutputStream 。 IResourceStreamWriter javadocs仍然谈论OutputStream有点令人困惑:

  

Resource可以返回的特殊IResourceStream实现   它直接想要写入输出流而不是返回   IResourceStream.getInputStream()

     

...

     

实现此方法直接写入资源数据   给出OutputStream。

无论如何,我没有看到从响应中获取OutputStream的快捷方法。

鉴于我有一个方法(上面代码中的调用generateReport(output, report))需要一个OutputStream写入,有什么最简单的方法让它再次工作?

2 个答案:

答案 0 :(得分:1)

怎么样?
ByteArrayOutputStream baos = new ByteArrayOutputStream();
reportService.generateReport(baos, report);
response.write(baos.toByteArray());

或类似的东西?

答案 1 :(得分:0)

有一个org.apache.wicket.request.Response#getOutputStream()。但我再次确定这与1.4.x中的相同。在1.5中,这将缓冲您在输出流中写入的内容。 javadoc说它不应该被缓冲。