About two years ago, I occasionally got this ArrayIndexOutOfBoundsException in a newly deployed production appengine application. I noticed when I made RoutingDispatcher.dispatch method on DebugModeRoutingDispatcher and WidgetRoutingDispatcher schronized, the problem seemed not to come back. And so it felt like a multi-threading issue. Since the app rendered same content for all users, I created a filter that serialized page rendering and cached results, and the problem seemed to have gone away ever since.
I have just seen this for the first time in a new appengine application that has been used in production for nearly two months now without such incident. The page that has generated this exception has been accessed many times daily for the past two months with no modification, and without this exception.
Unfortunately I cannot use the workaround I used previously because pages have different content for different users.
java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at java.lang.AbstractStringBuilder.deleteCharAt(AbstractStringBuilder.java:780)
at java.lang.StringBuilder.deleteCharAt(StringBuilder.java:258)
at com.google.sitebricks.StringBuilderRespond.chew(StringBuilderRespond.java:86)
at com.google.sitebricks.rendering.control.EmbeddedRespond.chew(EmbeddedRespond.java:103)
at com.google.sitebricks.rendering.control.XmlWidget.writeOpenTag(XmlWidget.java:115)
at com.google.sitebricks.rendering.control.XmlWidget.render(XmlWidget.java:72)
at com.google.sitebricks.rendering.control.ProceedingWidgetChain.render(ProceedingWidgetChain.java:21)
at com.google.sitebricks.rendering.control.XmlWidget.render(XmlWidget.java:79)
at com.google.sitebricks.rendering.control.ProceedingWidgetChain.render(ProceedingWidgetChain.java:21)
at com.google.sitebricks.rendering.control.XmlWidget.render(XmlWidget.java:79)
at com.google.sitebricks.rendering.control.ProceedingWidgetChain.render(ProceedingWidgetChain.java:21)
at com.google.sitebricks.rendering.control.XmlWidget.render(XmlWidget.java:79)
at com.google.sitebricks.rendering.control.ProceedingWidgetChain.render(ProceedingWidgetChain.java:21)
at com.google.sitebricks.rendering.control.EmbedWidget.render(EmbedWidget.java:66)
at com.google.sitebricks.rendering.control.ProceedingWidgetChain.render(ProceedingWidgetChain.java:21)
at com.google.sitebricks.rendering.control.XmlWidget.render(XmlWidget.java:79)
at com.google.sitebricks.rendering.control.ProceedingWidgetChain.render(ProceedingWidgetChain.java:21)
at com.google.sitebricks.rendering.control.XmlWidget.render(XmlWidget.java:79)
at com.google.sitebricks.rendering.control.ProceedingWidgetChain.render(ProceedingWidgetChain.java:21)
at com.google.sitebricks.routing.WidgetRoutingDispatcher.bindAndRespond(WidgetRoutingDispatcher.java:158)
at com.google.sitebricks.routing.WidgetRoutingDispatcher.dispatch(WidgetRoutingDispatcher.java:91)
at com.google.sitebricks.DebugModeRoutingDispatcher.dispatch(DebugModeRoutingDispatcher.java:56)
at com.google.sitebricks.SitebricksFilter.doFilter(SitebricksFilter.java:62)
at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:163)
I'll really appreciate any pointers as to why this might be happening.
Thank you.