2011-12-29 5 views
1

が、私は(その場で生成されますファイルをストリーミングするためのリンクのカスタム種類で使用)のカスタムAbstractResourceStreamWriterを持っていた:Wicket 1.5でIResourceStreamWriter APIの変更を処理する方法は? Wicketの1.4では

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の代わりにResponseを取得します。 IResourceStreamWriterのjavadocを、まだのOutputStreamについて話すことにやや紛らわしいです:それは直接出力ストリームに書き込む代わりに IResourceStream.getInputStreamを(返却したい場合 リソースを返すことができることを

特別IResourceStream実装)

...

このメソッドを実装して、リソースデータを のOutputStreamに直接書き込むことができます。

とにかく、ResponseからOutputStreamを取得する方法はありません。

OutputStreamが書き込むことを期待するメソッド(上記のコードgenerateReport(output, report))があるとすれば、この作業をやり直す最も簡単な方法は何ですか?

答えて

1

何について

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

か何か似て?

+0

ありがとう、私はそれが動作すると思います。 (他の1.5の移行の問題が未解決であるため、今は検証できません).Btwでは、変数をByteArrayOutputStreamとして定義する必要があります。私はあなたの答えを編集する自由を取った。 – Jonik

+0

ありがとう... IDEを使わずに前回の編集で削除しました。私は仕事から私の改札プロジェクトにアクセスすることができないので、私はあまりにも今それをテストすることはできません... – Nicktar

0

org.apache.wicket.request.Response#getOutputStream()があります。しかし、再びこれは1.4.xと同じであるかどうかはわかりません。 1.5では、出力ストリームに書き込む内容をバッファリングします。 javadocがバッファリングされるべきではないと言ったところ。

関連する問題