- - PR -
Jakarta POI でwriteしたExcelファイルが開けません
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-04-03 11:26
poi-2.5.1
j2sdk1.4.2_06 サーバーOS:SunOS5.9 サーバ上のExcelテンプレートに値を入れて、ダウンロードさせたいのですが、 ダウンロード(HSSFWorkbook.wite)後のファイルが開けません。 メッセージ:「'ファイル名'にアクセスできません。ファイルは読み取り専用であるか、または読み取り専用の場所にアクセスしようとしています。または、サーバー上に保存されているドキュメントから応答がありません。」 どうもExcelファイルが破損している為のエラーのようですが、何故発生するのか分かりません。 ちなみに、ローカル(Windows2000、Tomcat)で実行した場合には、問題なくExcelファイルは開けます。 同様に、サーバー上にwriteし、それをバイナリでローカルに転送しても開けます。 サーバー(SunOS)→ローカル(Win)のwriteで何か問題が発生しているようです。 参考情報をお持ちの方、どうぞ宜しくお願いします。 | ||||||||
|
投稿日時: 2007-04-03 12:53
「サーバー(SunOS)→ローカル(Win)のwrite」だとするとダウンロードはいつ行っているのでしょうか?
Jakarta POI で書いたファイルだけが読めないのでしょうか? また、ファイルのクローズは適切に行っていますか? POI が原因となっているかどうか切り分けるために単純にテキストファイルを書き出しても同じ現象が発生するかどうか確認してみてはいかがでしょう。 | ||||||||
|
投稿日時: 2007-04-03 12:53
「サーバー(SunOS)→ローカル(Win)のwrite」だとするとダウンロードはいつ行っているのでしょうか?
Jakarta POI で書いたファイルだけが読めないのでしょうか? また、ファイルのクローズは適切に行っていますか? POI が原因となっているかどうか切り分けるために単純にテキストファイルを書き出しても同じ現象が発生するかどうか確認してみてはいかがでしょう。 | ||||||||
|
投稿日時: 2007-04-03 13:14
| ||||||||
|
投稿日時: 2007-04-03 13:53
ファイルのクローズとは、FileOutputStreamのクローズで良いでしょうか? HttpServletResponse.getOutputStream()をクローズしましたが、上手くいきませんでした。
テキストファイルではうまくいきました。 サーバー上に作成したファイルを、ServletOutputStreamでローカルにwriteしました。 別途、開けないExcelをエディタで開いたところ、ファイルの終わりに以下のようなエラー メッセージがありました。 「Error 500: clearBuffer(): illegal state--> stream is committed」 | ||||||||
|
投稿日時: 2007-04-03 14:36
>Error 500: clearBuffer(): illegal state--> stream is committed
なるほど。ではそこらへんのキーワードをつかって調べてみてはいかがでしょう? あと、サーバサイドに例外のスタックトレースが記録されていたりしませんか? | ||||||||
|
投稿日時: 2007-04-03 15:07
ありがとうございます。 キーワードを使って探していますが…なかなか有効な手立てが見つかっていない状態です(^^;
はい。確かにWAS(WebSphere)に、例外が出ていました。 [07/04/03 14:43:21:276 JST] a21ac2 WebGroup E SRVE0026E: [サーブレット・エラー]-[clearBuffer(): illegal state--> stream is committed ]: java.lang.IllegalStateException: clearBuffer(): illegal state--> stream is committed at com.ibm.ws.webcontainer.srt.BufferedServletOutputStream.clearBuffer(BufferedServletOutputStream.java:493) at com.ibm.ws.webcontainer.srt.SRTServletResponse.resetBuffer(SRTServletResponse.java:1320) at com.ibm.ws.cache.servlet.FragmentComposer.resetBuffer(FragmentComposer.java:321) at com.ibm.ws.cache.servlet.CacheProxyResponse.resetBuffer(CacheProxyResponse.java:313) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:161) at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1056) at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:261) at org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:237) at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:300) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at com.ibm.ws.cache.servlet.ServletWrapper.serviceProxied(ServletWrapper.java:257) at com.ibm.ws.cache.servlet.CacheHook.handleFragment(CacheHook.java:246) at com.ibm.ws.cache.servlet.CacheHook.handleServlet(CacheHook.java:141) at com.ibm.ws.cache.servlet.ServletWrapper.service(ServletWrapper.java:239) at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110) at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174) at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313) at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116) at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283) at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42) at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:76) at jp.co.xxxxxxxxxxxx.green.common.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:167) at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:132) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:71) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:1040) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:600) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:201) at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:125) at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:286) at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71) at com.ibm.ws.webcontainer.cache.invocation.CacheableInvocationContext.invoke(CacheableInvocationContext.java:116) at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:186) at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334) at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56) at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:624) at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:448) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:912) [ メッセージ編集済み 編集者: hiro 編集日時 2007-04-03 15:08 ] | ||||||||
|
投稿日時: 2007-04-03 15:19
forward する前にレスポンスに何か大量に書き出していたり、レスポンスをコミットしていたりしないでしょうか?
forward を正常に働かせるためにはレスポンスをコミットしていてはいけません。 この現象は OS やローカル/サーバに拘わらず発生するはずです。 |