ExcellaReportのIndexOutOfBoundsExceptionエラーについて

65 views
Skip to first unread message

薄井將

unread,
Apr 27, 2023, 10:50:42 PM4/27/23
to excella
はじめまして、薄井と申します。
いつもお世話になっております。

Excella Reportでエラーが発生し、
原因と対応策・回避策をご教示頂きたくご連絡致しました。

エラー内容としてPOIの不具合ではないかと見ておりますが、
原因をご教示頂きたいです。
POIを最新バージョンの5.2.3に変更しても同様なエラーが発生する状態です。
何か回避策がありましたら、そちらも ご教示頂きたいです。

<環境>
excella-reports-2.1
OpenOffice 4.1.13
JDK1.8

<事象>
ReportProcessorのprocessメソッドを呼び出し、PDF出力した際に、
出力シートが50ページ以上のデータの場合、下記エラーが出力されます。
excella-reports-1.4(apache POI 3.10)を利用していた際はエラーが発生していないかったのですが、
excella-reports-2.1にバージョンアップをしたことに伴いエラーが発生するようになりました。

<エラー内容>
org.bbreak.excella.core.exception.ParseException: java.lang.IndexOutOfBoundsException: bitIndex < 0: -2048
at org.bbreak.excella.reports.tag.BlockRowRepeatParamParser.parse(BlockRowRepeatParamParser.java:519) ~[excella-reports-2.1.jar:?]
at org.bbreak.excella.reports.tag.BlockRowRepeatParamParser.parse(BlockRowRepeatParamParser.java:51) ~[excella-reports-2.1.jar:?]
at org.bbreak.excella.core.SheetParser.parseCell(SheetParser.java:127) ~[excella-core-2.0.jar:?]
at org.bbreak.excella.core.SheetParser.parseSheet(SheetParser.java:97) ~[excella-core-2.0.jar:?]
at org.bbreak.excella.core.BookController.parseSheet(BookController.java:244) ~[excella-core-2.0.jar:?]
at org.bbreak.excella.reports.processor.ReportProcessor.processBook(ReportProcessor.java:178) ~[excella-reports-2.1.jar:?]
at org.bbreak.excella.reports.processor.ReportProcessor.process(ReportProcessor.java:105) ~[excella-reports-2.1.jar:?]
at report.ExcelReportCommon.outputReport(ExcelReportCommon.java:293) ~[classes/:?]
at XXXXX.XXXXX.execute(XXXXX.java:486) ~[classes/:?]
at XXXXX.XXXXX.execute(XXXXX.java:102) ~[classes/:?]
at XXXXX.XXXXX.hako(XXXXX.java:877) ~[classes/:?]
at XXXXX.XXXXX.execute(XXXXX.java:192) ~[classes/:?]
at core.MainLogic.execute(MainLogic.java:131) ~[classes/:?]
at core.CoreServlet.doPost(CoreServlet.java:143) ~[classes/:?]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:694) ~[servlet-api.jar:5.0.0]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:777) ~[servlet-api.jar:5.0.0]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:223) ~[catalina.jar:10.0.23]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[catalina.jar:10.0.23]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:10.0.23]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[catalina.jar:10.0.23]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[catalina.jar:10.0.23]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[catalina.jar:10.0.23]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[catalina.jar:10.0.23]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[catalina.jar:10.0.23]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:119) ~[catalina.jar:10.0.23]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[catalina.jar:10.0.23]
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) ~[catalina.jar:10.0.23]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[catalina.jar:10.0.23]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:356) ~[catalina.jar:10.0.23]
at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:439) ~[tomcat-coyote.jar:10.0.23]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-coyote.jar:10.0.23]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:867) ~[tomcat-coyote.jar:10.0.23]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1762) ~[tomcat-coyote.jar:10.0.23]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-coyote.jar:10.0.23]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-util.jar:10.0.23]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-util.jar:10.0.23]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-util.jar:10.0.23]
at java.lang.Thread.run(Unknown Source) ~[?:1.8.0_341]
Caused by: java.lang.IndexOutOfBoundsException: bitIndex < 0: -2048
at java.util.BitSet.set(Unknown Source) ~[?:1.8.0_341]
at org.apache.poi.ddf.EscherDggRecord.findNewDrawingGroupId(EscherDggRecord.java:292) ~[poi-4.1.1.jar:4.1.1]
at org.apache.poi.hssf.model.DrawingManager2.findNewDrawingGroupId(DrawingManager2.java:118) ~[poi-4.1.1.jar:4.1.1]
at org.apache.poi.hssf.usermodel.HSSFPatriarch.afterCreate(HSSFPatriarch.java:151) ~[poi-4.1.1.jar:4.1.1]
at org.apache.poi.hssf.usermodel.HSSFSheet.getPatriarch(HSSFSheet.java:2112) ~[poi-4.1.1.jar:4.1.1]
at org.apache.poi.hssf.usermodel.HSSFSheet.createDrawingPatriarch(HSSFSheet.java:2087) ~[poi-4.1.1.jar:4.1.1]
at org.apache.poi.hssf.usermodel.HSSFSheet.findCellComment(HSSFSheet.java:2448) ~[poi-4.1.1.jar:4.1.1]
at org.apache.poi.hssf.usermodel.HSSFCell.getCellComment(HSSFCell.java:1074) ~[poi-4.1.1.jar:4.1.1]
at org.apache.poi.hssf.usermodel.HSSFCell.getCellComment(HSSFCell.java:73) ~[poi-4.1.1.jar:4.1.1]
at org.bbreak.excella.core.util.PoiUtil.copyCell(PoiUtil.java:416) ~[excella-core-2.0.jar:?]
at org.bbreak.excella.core.util.PoiUtil.copyCell(PoiUtil.java:372) ~[excella-core-2.0.jar:?]
at org.bbreak.excella.core.util.PoiUtil.copyRange(PoiUtil.java:550) ~[excella-core-2.0.jar:?]
at org.bbreak.excella.core.util.PoiUtil.insertRangeDown(PoiUtil.java:586) ~[excella-core-2.0.jar:?]
at org.bbreak.excella.reports.tag.BlockRowRepeatParamParser.parse(BlockRowRepeatParamParser.java:491) ~[excella-reports-2.1.jar:?]
... 37 more

お手数をおかけしますが、ご確認の程よろしくお願い致します。
以上、宜しくお願い致します。

Takayuki Maruyama

unread,
Apr 30, 2023, 7:30:47 PM4/30/23
to exc...@googlegroups.com
薄井さん、初めまして。
丸山です。

手元では試していないのですが、スタックトレースから、POIのBug 66319 (r1905943) で修正されているのではないか、と考えています。
(不要なHSSFSheet#findCellComponent→#createDrawingPatriarchの呼び出しがなくなる)

この修正を含むバージョンのPOIはまだリリースされていませんね。
回避策としては、次のどちらかになるかと思います。
(1) 修正を含むPOIを自前でビルドして利用する
(2) テンプレートをxlsx形式に変更する


以上、よろしくお願いいたします。

--
丸山 貴之@bbreak


2023年4月28日(金) 11:50 薄井將 <ma.us...@gmail.com>:
--
このメールは Google グループのグループ「excella」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには excella+u...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/excella/20c9b6cb-ca5c-4d69-ab0c-0bffbed5fd18n%40googlegroups.com にアクセスしてください。

薄井將

unread,
May 2, 2023, 2:25:50 AM5/2/23
to excella
丸山様

ご返信ありがとうございます。

> (2) テンプレートをxlsx形式に変更する
こちらを試してみたところ事象解決いたしました。

原因についてもPOIのバグ情報の共有ありがとうございます。
>(1) 修正を含むPOIを自前でビルドして利用する
こちらについては試していませんが、原因内容と含め参考にさせて頂きます。

ご回答ありがとうございました。


ちなみにですが、後学としてご教示頂きたいです。
xlsx形式に変更することで対策になる理由としては、ファイルの読み取り方法として
xls形式の読み取りで使用するHSSFSheetのメソッドではなく、 
xlsx形式の読み取り用のメソッドが使用されるので、原因となるソースを避けて実行できるから、という理解でよろしいでしょうか?

以上、宜しくお願い致します。
2023年5月1日月曜日 8:30:47 UTC+9 Takayuki Maruyama:

Takayuki Maruyama

unread,
May 2, 2023, 6:00:37 AM5/2/23
to exc...@googlegroups.com
薄井さ

> xlsx形式に変更することで対策になる理由としては、ファイルの読み取り方法として
> xls形式の読み取りで使用するHSSFSheetのメソッドではなく、 
> xlsx形式の読み取り用のメソッドが使用されるので、原因となるソースを避けて実行できるから、という理解でよろしいでしょうか?

その通りです。
xlsx形式の場合、XSSFCell#getCellCommentを使用するため、原因となったHSSFSheet#findCellCommentは呼び出されず、問題を回避できます。

HSSF/XSSFの概要については、以下のページが参考になるかと思います。
Reply all
Reply to author
Forward
0 new messages