В Wicket 1.4 у меня был собственный AbstractResourceStreamWriter (используемый в пользовательском типе Link для потоковой передачи файла, который генерируется на лету):
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 был изменен, так что метод получает ответ вместо OutputStream. Несколько сбивает с толку то, что javadocs IResourceStreamWriter все еще говорят о OutputStream:
Специальная реализация IResourceStream, которую ресурс может возвращать, когда он напрямую хочет записать в выходной поток вместо возврата IResourceStream.getInputStream().
...
Реализуйте этот метод для записи данных ресурса непосредственно в данный OutputStream.
Во всяком случае, я не вижу быстрого способа получить OutputStream из ответа.
Учитывая, что у меня есть метод (вызов generateReport(output, report)
в приведенном выше коде), который ожидает записи в OutputStream, каков самый простой способ заставить это работать снова?