warファイルを作成してTomcat7で公開したら、何かの条件でHTMLソースファイルが出力されてしまう不具合が発生。 IE8とかだと無理やりHTMLとして解釈して崩れたページを表示してくれるが、chromeだと真っ白な画面となる。 内容は本来表示する予定だったHTMLの途中までと、InternalErrorページがくっついたHTMLソース。 ログには下記のような内容が出力されるが、どこでエラーが発生しているのかわからない。warでのみ発生するのでこれ以上のログは期待できない。 25 2 2013 15:42:03,239 ERROR ~ @6de65b752 Internal Server Error (500) Oops: ArrayIndexOutOfBoundsException An unexpected error occured caused by exception ArrayIndexOutOfBoundsException: null play.exceptions.UnexpectedException: Unexpected Error at play.Invoker$Invocation.onException(Invoker.java:244) at play.Invoker$Invocation.run(Invoker.java:286) at play.server.ServletWrapper$ServletInvocation.run(ServletWrapper.java:552) at play.Invoker.invokeInThread(Invoker.java:68) at play.server.ServletWrapper.service(ServletWrapper.java:143) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) Caused by: java.lang.ArrayIndexOutOfBoundsException 調査の結果、flashスコープに大量のデータを詰め込んだことが原因でした。 flashスコープはcookieの仕組みを利用しているため、4KBのサイズ制限があります。 ローカル環境(playサービス)で動かしているときは、サイズオーバーしてもエラーにならないのですが、tomcat7ではこれをチェックしているためにエラーとなっていました。 playサービスではエラーにならないとは言っても、4KBを超えるcookieはブラウザ側では受けきれないのでデータが切り捨てられてしまうことになります。 |
備忘録 >