2011-12-29 46 views
1

在Wicket 1.4,我有一個自定義的AbstractResourceStreamWriter(在一個自定義的鏈接類型用於流是被實時生成的文件):如何處理Wicket 1.5中的IResourceStreamWriter API更改?

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的javadoc仍在談論的OutputStream:

特別IResourceStream實現,當 直接要寫入輸出流的資源可以返回,而不是返回 IResourceStream.getInputStream()

...

實施此方法直接寫入給定OutputStream的資源數據 。

無論如何,我沒有看到從Response獲取OutputStream的快速方法。

鑑於我有一個方法(上面的代碼中調用generateReport(output, report)),它需要一個OutputStream寫入,最簡單的方法是什麼使這個工作再次?

回答

1

什麼

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

或類似的東西?

+0

謝謝,我想這可以工作。 (現在無法驗證,因爲還有其他1.5遷移問題未解決。)順便說一下,該變量需要定義爲ByteArrayOutputStream;我冒昧地編輯你的答案。 – Jonik 2011-12-29 13:32:34

+0

謝謝......我在之前的編輯中刪除了它,但不涉及IDE。我現在也無法測試它,因爲我無法從工作中訪問我的Wicket項目... – Nicktar 2011-12-29 13:35:23

0

有一個org.apache.wicket.request.Response#getOutputStream()。但是我不確定這與1.4.x中的相同。在1.5中,這將緩衝你在輸出流中寫入的內容。 javadoc說它不應該被緩衝。