1

在 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 有点令人困惑:

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

...

实现该方法直接将资源数据写入给定的OutputStream。

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

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

4

2 回答 2

1

关于什么

ByteArrayOutputStream baos = new ByteArrayOutputStream();
reportService.generateReport(baos, report);
response.write(baos.toByteArray());

或类似的东西?

于 2011-12-29T13:22:28.043 回答
0

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

于 2012-03-25T17:19:51.540 回答