- - PR -
ファイルのダウンロードでキャンセルボタンを押下時に発生するエラーについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-04-07 19:58
はじめまして。makiと申します。
Excelファイルのダウンロードを行うページを作成しています。 「このファイルを開くか、または保存しますか?」のダイアログで 保存ボタンを押せばそのまま正常にダウンロードできますが、 キャンセルボタンを押下するとArrayIndexOutOfBoundsExceptionが発生します。 ダウンロードファイルをwriteしたあとのfinallyを出たところでエラーが発生します。 何が原因なのか分かりません。 ご助言をよろしくお願いいたします。 -------------------------------------------------------------------------------------- HttpServletResponse response = xlsCondition.getHttpServletResponse(); HSSFWorkbook targetWorkBook = xlsCondition.getTargetWorkBook(); String attachmentFileName = "attachment;filename=" + "\"" + "excelfile.xls" + "\""; response.setContentType("application/vnd.ms-excel; charset=Shift_JIS"); response.setHeader("Content-Disposition", attachmentFileName); ServletOutputStream servletOutput = null; try { servletOutput = response.getOutputStream(); targetWorkBook.write(servletOutput); } catch (IOException ioe) { throw new Exception(); } finally { if (servletOutput != null) { try { servletOutput.flush(); servletOutput.close(); } catch (IOException ioe) { throw new Exception(); } servletOutput = null; } } //←finallyを出たあとエラー発生 --------------------------------------------------------------------------------------- java.lang.ArrayIndexOutOfBoundsException: 0 at java.lang.System.arraycopy(Native Method) at com.evermind.server.http.EvermindServletOutputStream.write(EvermindServletOutputStream.java:216) at com.evermind.server.http.EvermindServletOutputStream.write(EvermindServletOutputStream.java:151) at com.evermind.server.http.EvermindServletOutputStream.write(EvermindServletOutputStream.java:146) at org.apache.poi.poifs.storage.BigBlock.doWriteData(BigBlock.java:54) at org.apache.poi.poifs.storage.DocumentBlock.writeData(DocumentBlock.java:219) at org.apache.poi.poifs.storage.BigBlock.writeBlocks(BigBlock.java:85) at org.apache.poi.poifs.filesystem.POIFSDocument$BigBlockStore.writeBlocks(POIFSDocument.java:602) at org.apache.poi.poifs.filesystem.POIFSDocument.writeBlocks(POIFSDocument.java:274) at org.apache.poi.poifs.filesystem.POIFSFileSystem.writeFilesystem(POIFSFileSystem.java:262) at org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:742) |
|
投稿日時: 2006-04-07 21:50
EvermindServletOutputStream.java の 216 行目を見てみましょう。
System.arraycopy() を呼びだしているはずです。 ここで配列の範囲外にアクセスしているので、どういう条件でそのような現象が発生するか調べてみましょう。 |
|
投稿日時: 2006-04-10 09:40
ご助言ありがとうございます。
基本的な質問でしたらすみません。。 EvermindServletOutputStream.java をどうすれば見ることができるのか 分からないので、教えていただけませんか? よろしくお願いいたします。 |
|
投稿日時: 2006-04-10 10:58
すくなくとも JDK に付属していたりする性質のファイルではないと思います。
お手元にそのソースがないということは何らかの製品やフレームワークのソースコードということではないでしょうか? アプリケーションのライブラリの構成を考えた人に相談すると良いかもしれません。 |
|
投稿日時: 2006-04-10 11:06
Evermind って、 Oracle 9iAS の一部みたいですね(?)
http://tinyurl.com/q64ss だとするとソースコードを確認するのは難しそうです。 9iAS に問題がないとすれば POI の側から調査すると良いかもしれません。 http://issues.apache.org/bugzilla/buglist.cgi?product=POI POI のバグデータベースに似たような現象がなければ何か使い方の問題かもしれません。 |
|
投稿日時: 2006-04-10 14:03
インギさんありがとうございます。
別でZIPファイルダウンロード機能も作成しているのですが、 そちらでもほぼ同じようなエラーが発生していました。 POI側でもないのでしょうか? ------------------------------------------------------------------------ java.lang.ArrayIndexOutOfBoundsException: 0 at java.lang.System.arraycopy(Native Method) at com.evermind.server.http.EvermindServletOutputStream.write(EvermindServletOutputStream.java:216) at com.evermind.server.http.EvermindServletOutputStream.write(EvermindServletOutputStream.java:151) at java.util.zip.DeflaterOutputStream.deflate(DeflaterOutputStream.java:156) at java.util.zip.ZipOutputStream.closeEntry(ZipOutputStream.java:184) |
|
投稿日時: 2006-04-10 15:03
POI を使わなくても発生するのではればなんだか EvermindServletOutputStream が怪しく見えますね。
既に調べていらっしゃることと存じますが、いくつか evermindservletouputstream と ArrayIndexOutOfBoundsException でひっかかりますね。 決定的なページはぱっと見ありませんが。 http://tinyurl.com/nooz3 9iAS のサポート窓口に問い合わせてみてはいかがでしょうか? |
|
投稿日時: 2006-04-10 15:14
そうですね。一度9iASサポート窓口に問い合わせてみようと思います。
また後ほど報告しますね。 色々と勉強になります。ほんとうにありがとうございます。 [ メッセージ編集済み 編集者: maki 編集日時 2006-04-10 15:15 ] |
1