Search code examples
javatomcatapache-fopxalan

TomCat Servlet execution java.lang.StackOverflowError exception


I am randomly getting the following error on first call to Apache TomCat 8.5.51 after the service restart. The error automatically goes away after sometime which makes it very hard to debug.

What could be the reason for it?

Error Log:

    27-Jul-2021 13:40:44.965 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log ContextListener: attributeAdded('StockTicker', 'async.Stockticker@75f16954')
    27-Jul-2021 13:41:03.686 SEVERE [http-nio-8080-exec-1] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Cocoon] in context with path [/cocoon-2.1.11] threw exception [Servlet execution threw an exception] with root cause
        java.lang.StackOverflowError
            at org.apache.xml.utils.SuballocatedIntVector.<init>(SuballocatedIntVector.java:115)
            at org.apache.xml.dtm.ref.DTMDefaultBase.<init>(DTMDefaultBase.java:207)
            at org.apache.xml.dtm.ref.DTMDefaultBaseTraversers.<init>(DTMDefaultBaseTraversers.java:90)
            at org.apache.xml.dtm.ref.DTMDefaultBaseIterators.<init>(DTMDefaultBaseIterators.java:85)
            at org.apache.xml.dtm.ref.sax2dtm.SAX2DTM.<init>(SAX2DTM.java:253)
            at org.apache.xml.dtm.ref.sax2dtm.SAX2DTM.<init>(SAX2DTM.java:224)
            at org.apache.xml.dtm.ref.sax2dtm.SAX2RTFDTM.<init>(SAX2RTFDTM.java:126)
            at org.apache.xml.dtm.ref.DTMManagerDefault.getDTM(DTMManagerDefault.java:307)
            at org.apache.xpath.XPathContext.getRTFDTM(XPathContext.java:1258)
            at org.apache.xpath.XPathContext.pushRTFContext(XPathContext.java:1275)
            at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:386)
            at org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
            at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
            at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
            at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
    org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
    org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
    org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
    org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
    org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
    org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
    org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
    org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
    org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
    org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
    org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
    org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
    org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
    org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
    org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
    org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)

Solution

  • java.lang.StackOverflowError according to the docs

    Thrown when a stack overflow occurs because an application recurses too deeply.

    From the stack trace, the recursion can be seen in lines below. ElemTemplate.execute calls TransformerImpl.executeChildTemplates which in turns calls the former thus establishing the recursion:

    org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
    org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394). 
    

    Something in the xml estructure or the code parsing it might be causing the java.lang.StackOverflowError.
    Could be worth to check also -Xss jvm setting.