- PR -

Jakarta POI でwriteしたExcelファイルが開けません

投稿者投稿内容
hiro
会議室デビュー日: 2007/03/16
投稿数: 15
投稿日時: 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で何か問題が発生しているようです。
参考情報をお持ちの方、どうぞ宜しくお願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-04-03 12:53
「サーバー(SunOS)→ローカル(Win)のwrite」だとするとダウンロードはいつ行っているのでしょうか?
Jakarta POI で書いたファイルだけが読めないのでしょうか?
また、ファイルのクローズは適切に行っていますか?

POI が原因となっているかどうか切り分けるために単純にテキストファイルを書き出しても同じ現象が発生するかどうか確認してみてはいかがでしょう。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-04-03 12:53
「サーバー(SunOS)→ローカル(Win)のwrite」だとするとダウンロードはいつ行っているのでしょうか?
Jakarta POI で書いたファイルだけが読めないのでしょうか?
また、ファイルのクローズは適切に行っていますか?

POI が原因となっているかどうか切り分けるために単純にテキストファイルを書き出しても同じ現象が発生するかどうか確認してみてはいかがでしょう。
hiro
会議室デビュー日: 2007/03/16
投稿数: 15
投稿日時: 2007-04-03 13:14
引用:

インギさんの書き込み (2007-04-03 12:53) より:
「サーバー(SunOS)→ローカル(Win)のwrite」だとするとダウンロードはいつ行っているのでしょうか?

「ダウンロード」という表現に誤りがありました。
HttpServletResponse.getOutputStream()に対してwriteしています。


Jakarta POI で書いたファイルだけが読めないのでしょうか?
また、ファイルのクローズは適切に行っていますか?
POI が原因となっているかどうか切り分けるために単純にテキストファイルを書き出しても同じ現象が発生するかどうか確認してみてはいかがでしょう。


アドバイスありがとうございます。
早速やってみます。

hiro
会議室デビュー日: 2007/03/16
投稿数: 15
投稿日時: 2007-04-03 13:53
引用:

インギさんの書き込み (2007-04-03 12:53) より:
Jakarta POI で書いたファイルだけが読めないのでしょうか?
また、ファイルのクローズは適切に行っていますか?



ファイルのクローズとは、FileOutputStreamのクローズで良いでしょうか?
HttpServletResponse.getOutputStream()をクローズしましたが、上手くいきませんでした。

引用:

POI が原因となっているかどうか切り分けるために単純にテキストファイルを書き出しても同じ現象が発生するかどうか確認してみてはいかがでしょう。



テキストファイルではうまくいきました。
サーバー上に作成したファイルを、ServletOutputStreamでローカルにwriteしました。



別途、開けないExcelをエディタで開いたところ、ファイルの終わりに以下のようなエラー
メッセージがありました。

「Error 500: clearBuffer(): illegal state--> stream is committed」
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-04-03 14:36
>Error 500: clearBuffer(): illegal state--> stream is committed
なるほど。ではそこらへんのキーワードをつかって調べてみてはいかがでしょう?
あと、サーバサイドに例外のスタックトレースが記録されていたりしませんか?
hiro
会議室デビュー日: 2007/03/16
投稿数: 15
投稿日時: 2007-04-03 15:07
引用:

インギさんの書き込み (2007-04-03 14:36) より:
>Error 500: clearBuffer(): illegal state--> stream is committed
なるほど。ではそこらへんのキーワードをつかって調べてみてはいかがでしょう?



ありがとうございます。
キーワードを使って探していますが…なかなか有効な手立てが見つかっていない状態です(^^;

引用:

あと、サーバサイドに例外のスタックトレースが記録されていたりしませんか?



はい。確かに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 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-04-03 15:19
forward する前にレスポンスに何か大量に書き出していたり、レスポンスをコミットしていたりしないでしょうか?

forward を正常に働かせるためにはレスポンスをコミットしていてはいけません。

この現象は OS やローカル/サーバに拘わらず発生するはずです。

スキルアップ/キャリアアップ(JOB@IT)