All:
Here's my analysis of the problem. I'd appreciate all those much more
Cocoon-knowledgeable than I to give me some feedback.
The short version of the problem analysis:
1. XSP page logic throws a SAXException from a logic section, probably
within an element.
2. ServerPagesGenerator.generate() catches the exception, logs it, and
re-throws it.
3. The generator instance gets pooled.
4. The XSP page is processed by the pooled instance without any exceptions
and returns.
5. ServerPagesGenerator.generate() tries to clean up any leftover events
from its event stack. However, it's got events cached from when the
exception occurred, but its contentHandler doesn't.
So, the content handler (xalan) is attempting to pop something off of it's
internal state stack in attempting to close an element that wasn't ever
opened in its current instance. Unfortunately, xalan doesn't handle this
very cleanly, and we get the ArrayIndexOutOfBoundsException.
Here are a couple of ideas to handle this better:
1. Make sure the event stack in ServerPagesGenerator is cleared at the
beginning of the generate() call.
2. Always attempt to clean up the stack at the end of the generate() call,
after any exception.
Again, I've only been using Cocoon for a couple of weeks (very cool stuff,
btw), so please let me know if I'm too far off in my analysis or
suggestions.
Thanks.
-------------------------
Jeff Skaistis
[EMAIL PROTECTED]
> -----Original Message-----
> From: Jeff Skaistis [mailto:[EMAIL PROTECTED]]
> Sent: Wednesday, May 30, 2001 9:34 AM
> To: [EMAIL PROTECTED]
> Subject: RE: [C2]ArrayIndexOutOfBoundsException processing page
>
>
> Carsten,
>
> The exception is caused from a page I'm developing. However, the error
> message appending shows up on any page, including the samples, after the
> exception occurs. After some period of time (somewhere around
> 30-45 secs.),
> it seems to clean itself up and everything's fine.
>
> After some more investigation, this seems to be caused by my XSP page
> throwing a SAXException from the logic. I'm using some components that
> throw certain exceptions (SQLException, IOException, etc.), so I've got to
> enclose those in a try/catch to get the XSP to compile.
> Currently my catch
> block re-throws the exceptions as SAXException since that's the
> only one the
> generate() method throws.
>
> My wild guess is that something's not being cleaned up properly in these
> cases. Is there some other exception handling mechanism for XSP that I've
> missed? Or is throwing SAXExceptions from XSP logic considered a
> bad thing?
> I could certainly try to handle the exceptions more gracefully, but for
> development it's just as easy to throw them up the chain.
>
> I'll keep investigating.
>
> -------------------------
> Jeff Skaistis
> [EMAIL PROTECTED]
>
> > -----Original Message-----
> > From: Carsten Ziegeler [mailto:[EMAIL PROTECTED]]
> > Sent: Wednesday, May 30, 2001 2:44 AM
> > To: [EMAIL PROTECTED]
> > Subject: AW: [C2]ArrayIndexOutOfBoundsException processing page
> >
> >
> > Hi Jeff,
> >
> > does this happen with all example pages, or only with a particular one?
> > And on what page does the first exception occur?
> >
> >
> > Carsten
> >
> > Open Source Group sunShine - b:Integrated
> > ================================================================
> > Carsten Ziegeler, S&N AG, Klingenderstrasse 5, D-33100 Paderborn
> > www.sundn.de mailto: [EMAIL PROTECTED]
> > ================================================================
> >
> >
> > > -----Ursprüngliche Nachricht-----
> > > Von: Jeff Skaistis [mailto:[EMAIL PROTECTED]]
> > > Gesendet: Dienstag, 29. Mai 2001 23:37
> > > An: [EMAIL PROTECTED]
> > > Betreff: [C2]ArrayIndexOutOfBoundsException processing page
> > >
> > >
> > > I'm getting an intermittent ArrayIndexOutOfBoundsException
> processing a
> > > page. It usually occurs after getting another exeception (such
> > > as NPE from
> > > bad data) on the page. When it happens, the page is processed (and
> > > displayed) successfully, but the Cocoon error document is
> > > appended to bottom
> > > the returned page. I found one message in the archives from last
> > > month that
> > > was very close to this problem, but I couldn't find any other
> > references.
> > >
> > > Based on some discussions of similar exceptions with caching
> problems, I
> > > tried both non-caching pipelines as well as disabling
> <use-store> on the
> > > TraxTransformer, but got the same results.
> > >
> > > My environment is Win2000 SP1, IIS 5, JRun 3.0 SP2, using the
> latest CVS
> > > version.
> > >
> > > Here's the stack trace:
> > >
> > > DEBUG 24581 [cocoon ] (jcp-0): Error processing pipeline
> > > org.apache.cocoon.ProcessingException: Failed to execute
> > > pipeline.:org.apache.cocoon.ProcessingException: Failed to execute
> > > pipeline.:java.lang.ArrayIndexOutOfBoundsException
> > > at
> > > org.apache.cocoon.components.pipeline.AbstractStreamPipeline.proce
> > > ss(Abstrac
> > > tStreamPipeline.java:133)
> > > at
> > > org.apache.cocoon.www.sitemap_xmap.process(sitemap_xmap.java:3782)
> > > at
> > > org.apache.cocoon.www.sitemap_xmap.process(sitemap_xmap.java:1353)
> > > at org.apache.cocoon.sitemap.Handler.process(Handler.java:172)
> > > at org.apache.cocoon.sitemap.Manager.invoke(Manager.java:97)
> > > at org.apache.cocoon.Cocoon.process(Cocoon.java:288)
> > > at
> > >
> org.apache.cocoon.servlet.CocoonServlet.service(CocoonServlet.java:463)
> > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:865)
> > > at allaire.jrun.servlet.JRunSE.service(../servlet/JRunSE.java:1013)
> > > at
> > > allaire.jrun.servlet.JRunSE.runServlet(../servlet/JRunSE.java:925)
> > > at
> > > allaire.jrun.servlet.JRunRequestDispatcher.forward(../servlet/JRun
> > > RequestDis
> > > patcher.java:88)
> > > at allaire.jrun.servlet.JRunSE.service(../servlet/JRunSE.java:1131)
> > > at
> > >
> allaire.jrun.servlet.JvmContext.dispatch(../servlet/JvmContext.java:330)
> > > at
> > > allaire.jrun.jrpp.ProxyEndpoint.run(../jrpp/ProxyEndpoint.java:382)
> > > at allaire.jrun.ThreadPool.run(../ThreadPool.java:272)
> > > at allaire.jrun.WorkerThread.run(../WorkerThread.java:75)
> > > org.apache.cocoon.ProcessingException: Failed to execute
> > > pipeline.:java.lang.ArrayIndexOutOfBoundsException
> > > at
> > > org.apache.cocoon.components.pipeline.AbstractEventPipeline.proces
> > > s(Abstract
> > > EventPipeline.java:127)
> > > at
> > > org.apache.cocoon.components.pipeline.AbstractStreamPipeline.proce
> > > ss(Abstrac
> > > tStreamPipeline.java:131)
> > > at
> > > org.apache.cocoon.www.sitemap_xmap.process(sitemap_xmap.java:3782)
> > > at
> > > org.apache.cocoon.www.sitemap_xmap.process(sitemap_xmap.java:1353)
> > > at org.apache.cocoon.sitemap.Handler.process(Handler.java:172)
> > > at org.apache.cocoon.sitemap.Manager.invoke(Manager.java:97)
> > > at org.apache.cocoon.Cocoon.process(Cocoon.java:288)
> > > at
> > >
> org.apache.cocoon.servlet.CocoonServlet.service(CocoonServlet.java:463)
> > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:865)
> > > at allaire.jrun.servlet.JRunSE.service(../servlet/JRunSE.java:1013)
> > > at
> > > allaire.jrun.servlet.JRunSE.runServlet(../servlet/JRunSE.java:925)
> > > at
> > > allaire.jrun.servlet.JRunRequestDispatcher.forward(../servlet/JRun
> > > RequestDis
> > > patcher.java:88)
> > > at allaire.jrun.servlet.JRunSE.service(../servlet/JRunSE.java:1131)
> > > at
> > >
> allaire.jrun.servlet.JvmContext.dispatch(../servlet/JvmContext.java:330)
> > > at
> > > allaire.jrun.jrpp.ProxyEndpoint.run(../jrpp/ProxyEndpoint.java:382)
> > > at allaire.jrun.ThreadPool.run(../ThreadPool.java:272)
> > > at allaire.jrun.WorkerThread.run(../WorkerThread.java:75)
> > > java.lang.ArrayIndexOutOfBoundsException
> > > at org.apache.xml.utils.NodeVector.popAndTop(NodeVector.java:234)
> > > at org.apache.xml.utils.DOMBuilder.endElement(DOMBuilder.java:378)
> > > at
> > > org.apache.xalan.stree.StreeDOMBuilder.endElement(StreeDOMBuilder.
> > > java:240)
> > > at
> > > org.apache.xalan.stree.SourceTreeHandler.endElement(SourceTreeHand
> > > ler.java:5
> > > 52)
> > > at
> > > org.apache.cocoon.xml.ContentHandlerWrapper.endElement(ContentHand
> > > lerWrapper
> > > .java:132)
> > > at
> > > org.apache.cocoon.generation.ServerPagesGenerator.generate(ServerP
> > > agesGenera
> > > tor.java:205)
> > > at
> > > org.apache.cocoon.components.pipeline.AbstractEventPipeline.proces
> > > s(Abstract
> > > EventPipeline.java:125)
> > > at
> > > org.apache.cocoon.components.pipeline.AbstractStreamPipeline.proce
> > > ss(Abstrac
> > > tStreamPipeline.java:131)
> > > at
> > > org.apache.cocoon.www.sitemap_xmap.process(sitemap_xmap.java:3782)
> > > at
> > > org.apache.cocoon.www.sitemap_xmap.process(sitemap_xmap.java:1353)
> > > at org.apache.cocoon.sitemap.Handler.process(Handler.java:172)
> > > at org.apache.cocoon.sitemap.Manager.invoke(Manager.java:97)
> > > at org.apache.cocoon.Cocoon.process(Cocoon.java:288)
> > > at
> > >
> org.apache.cocoon.servlet.CocoonServlet.service(CocoonServlet.java:463)
> > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:865)
> > > at allaire.jrun.servlet.JRunSE.service(../servlet/JRunSE.java:1013)
> > > at
> > > allaire.jrun.servlet.JRunSE.runServlet(../servlet/JRunSE.java:925)
> > > at
> > > allaire.jrun.servlet.JRunRequestDispatcher.forward(../servlet/JRun
> > > RequestDis
> > > patcher.java:88)
> > > at allaire.jrun.servlet.JRunSE.service(../servlet/JRunSE.java:1131)
> > > at
> > >
> allaire.jrun.servlet.JvmContext.dispatch(../servlet/JvmContext.java:330)
> > > at
> > > allaire.jrun.jrpp.ProxyEndpoint.run(../jrpp/ProxyEndpoint.java:382)
> > > at allaire.jrun.ThreadPool.run(../ThreadPool.java:272)
> > > at allaire.jrun.WorkerThread.run(../WorkerThread.java:75)
> > > org.apache.cocoon.ProcessingException: Failed to execute
> > > pipeline.:java.lang.ArrayIndexOutOfBoundsException
> > > at
> > > org.apache.cocoon.components.pipeline.AbstractEventPipeline.proces
> > > s(Abstract
> > > EventPipeline.java:127)
> > > at
> > > org.apache.cocoon.components.pipeline.AbstractStreamPipeline.proce
> > > ss(Abstrac
> > > tStreamPipeline.java:131)
> > > at
> > > org.apache.cocoon.www.sitemap_xmap.process(sitemap_xmap.java:3782)
> > > at
> > > org.apache.cocoon.www.sitemap_xmap.process(sitemap_xmap.java:1353)
> > > at org.apache.cocoon.sitemap.Handler.process(Handler.java:172)
> > > at org.apache.cocoon.sitemap.Manager.invoke(Manager.java:97)
> > > at org.apache.cocoon.Cocoon.process(Cocoon.java:288)
> > > at
> > >
> org.apache.cocoon.servlet.CocoonServlet.service(CocoonServlet.java:463)
> > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:865)
> > > at allaire.jrun.servlet.JRunSE.service(../servlet/JRunSE.java:1013)
> > > at
> > > allaire.jrun.servlet.JRunSE.runServlet(../servlet/JRunSE.java:925)
> > > at
> > > allaire.jrun.servlet.JRunRequestDispatcher.forward(../servlet/JRun
> > > RequestDis
> > > patcher.java:88)
> > > at allaire.jrun.servlet.JRunSE.service(../servlet/JRunSE.java:1131)
> > > at
> > >
> allaire.jrun.servlet.JvmContext.dispatch(../servlet/JvmContext.java:330)
> > > at
> > > allaire.jrun.jrpp.ProxyEndpoint.run(../jrpp/ProxyEndpoint.java:382)
> > > at allaire.jrun.ThreadPool.run(../ThreadPool.java:272)
> > > at allaire.jrun.WorkerThread.run(../WorkerThread.java:75)
> > > java.lang.ArrayIndexOutOfBoundsException
> > > at org.apache.xml.utils.NodeVector.popAndTop(NodeVector.java:234)
> > > at org.apache.xml.utils.DOMBuilder.endElement(DOMBuilder.java:378)
> > > at
> > > org.apache.xalan.stree.StreeDOMBuilder.endElement(StreeDOMBuilder.
> > > java:240)
> > > at
> > > org.apache.xalan.stree.SourceTreeHandler.endElement(SourceTreeHand
> > > ler.java:5
> > > 52)
> > > at
> > > org.apache.cocoon.xml.ContentHandlerWrapper.endElement(ContentHand
> > > lerWrapper
> > > .java:132)
> > > at
> > > org.apache.cocoon.generation.ServerPagesGenerator.generate(ServerP
> > > agesGenera
> > > tor.java:205)
> > > at
> > > org.apache.cocoon.components.pipeline.AbstractEventPipeline.proces
> > > s(Abstract
> > > EventPipeline.java:125)
> > > at
> > > org.apache.cocoon.components.pipeline.AbstractStreamPipeline.proce
> > > ss(Abstrac
> > > tStreamPipeline.java:131)
> > > at
> > > org.apache.cocoon.www.sitemap_xmap.process(sitemap_xmap.java:3782)
> > > at
> > > org.apache.cocoon.www.sitemap_xmap.process(sitemap_xmap.java:1353)
> > > at org.apache.cocoon.sitemap.Handler.process(Handler.java:172)
> > > at org.apache.cocoon.sitemap.Manager.invoke(Manager.java:97)
> > > at org.apache.cocoon.Cocoon.process(Cocoon.java:288)
> > > at
> > >
> org.apache.cocoon.servlet.CocoonServlet.service(CocoonServlet.java:463)
> > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:865)
> > > at allaire.jrun.servlet.JRunSE.service(../servlet/JRunSE.java:1013)
> > > at
> > > allaire.jrun.servlet.JRunSE.runServlet(../servlet/JRunSE.java:925)
> > > at
> > > allaire.jrun.servlet.JRunRequestDispatcher.forward(../servlet/JRun
> > > RequestDis
> > > patcher.java:88)
> > > at allaire.jrun.servlet.JRunSE.service(../servlet/JRunSE.java:1131)
> > > at
> > >
> allaire.jrun.servlet.JvmContext.dispatch(../servlet/JvmContext.java:330)
> > > at
> > > allaire.jrun.jrpp.ProxyEndpoint.run(../jrpp/ProxyEndpoint.java:382)
> > > at allaire.jrun.ThreadPool.run(../ThreadPool.java:272)
> > > at allaire.jrun.WorkerThread.run(../WorkerThread.java:75)
> > > java.lang.ArrayIndexOutOfBoundsException
> > > at org.apache.xml.utils.NodeVector.popAndTop(NodeVector.java:234)
> > > at org.apache.xml.utils.DOMBuilder.endElement(DOMBuilder.java:378)
> > > at
> > > org.apache.xalan.stree.StreeDOMBuilder.endElement(StreeDOMBuilder.
> > > java:240)
> > > at
> > > org.apache.xalan.stree.SourceTreeHandler.endElement(SourceTreeHand
> > > ler.java:5
> > > 52)
> > > at
> > > org.apache.cocoon.xml.ContentHandlerWrapper.endElement(ContentHand
> > > lerWrapper
> > > .java:132)
> > > at
> > > org.apache.cocoon.generation.ServerPagesGenerator.generate(ServerP
> > > agesGenera
> > > tor.java:205)
> > > at
> > > org.apache.cocoon.components.pipeline.AbstractEventPipeline.proces
> > > s(Abstract
> > > EventPipeline.java:125)
> > > at
> > > org.apache.cocoon.components.pipeline.AbstractStreamPipeline.proce
> > > ss(Abstrac
> > > tStreamPipeline.java:131)
> > > at
> > > org.apache.cocoon.www.sitemap_xmap.process(sitemap_xmap.java:3782)
> > > at
> > > org.apache.cocoon.www.sitemap_xmap.process(sitemap_xmap.java:1353)
> > > at org.apache.cocoon.sitemap.Handler.process(Handler.java:172)
> > > at org.apache.cocoon.sitemap.Manager.invoke(Manager.java:97)
> > > at org.apache.cocoon.Cocoon.process(Cocoon.java:288)
> > > at
> > >
> org.apache.cocoon.servlet.CocoonServlet.service(CocoonServlet.java:463)
> > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:865)
> > > at allaire.jrun.servlet.JRunSE.service(../servlet/JRunSE.java:1013)
> > > at
> > > allaire.jrun.servlet.JRunSE.runServlet(../servlet/JRunSE.java:925)
> > > at
> > > allaire.jrun.servlet.JRunRequestDispatcher.forward(../servlet/JRun
> > > RequestDis
> > > patcher.java:88)
> > > at allaire.jrun.servlet.JRunSE.service(../servlet/JRunSE.java:1131)
> > > at
> > >
> allaire.jrun.servlet.JvmContext.dispatch(../servlet/JvmContext.java:330)
> > > at
> > > allaire.jrun.jrpp.ProxyEndpoint.run(../jrpp/ProxyEndpoint.java:382)
> > > at allaire.jrun.ThreadPool.run(../ThreadPool.java:272)
> > > at allaire.jrun.WorkerThread.run(../WorkerThread.java:75)
> > >
> > > TIA.
> > >
> > > -------------------------
> > > Jeff Skaistis
> > > [EMAIL PROTECTED]
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, email: [EMAIL PROTECTED]
> > >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, email: [EMAIL PROTECTED]
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, email: [EMAIL PROTECTED]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]