【问题标题】:Jawr CSSServlet throwing StackOverflowErrorJawr CSSServlet 抛出 StackOverflowError
【发布时间】:2013-01-12 21:22:33
【问题描述】:

我正在将一个使用 Jawr 的 Hybris 应用程序部署到 Tomcat 服务器。在启动时,JawrServlet 会引发 StackOverflow 错误。

这个错误很难重现,但是在处理 CSSServlet 的过程中总是会发生。记录后不久:

[JawrRequestHandler] Initializing jawr config for request handler named CSSServlet

这就是在我的 web.xml 中配置 Servlet 的方式:

     <servlet>
        <servlet-name>CSSServlet</servlet-name>
        <servlet-class>net.jawr.web.servlet.JawrServlet</servlet-class>

        <!-- Location in classpath of the config file -->
        <init-param>
            <param-name>configLocation</param-name>
            <param-value>/jawrsetup.properties</param-value>
            <!--<param-value>/jawrTEST.properties</param-value>-->
        </init-param>
        <init-param>
            <param-name>type</param-name>
            <param-value>css</param-value>
        </init-param>
        <init-param>
            <param-name>mapping</param-name>
            <param-value>/jawr-css</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

这是发生错误的控制台日志的一部分:

INFO   | jvm 1    | main    | 2013/01/29 11:20:16.081 | 11:20:16,036 [WrapperSimpleAppMain] DEBUG [Base64PostProcessorCssImageUrlRewriter] Skip encoding image resource : url('/images/bk-ruby/pause.png')
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.082 | 11:20:16,036 [WrapperSimpleAppMain] DEBUG [Base64PostProcessorCssImageUrlRewriter] Skip encoding image resource : url('/images/bk-ruby/pause-ie.png')
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.082 | 11:20:16,036 [WrapperSimpleAppMain] DEBUG [Base64PostProcessorCssImageUrlRewriter] Skip encoding image resource : url('/images/bk-ruby/left-hover.png')
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.087 | 11:20:16,036 [WrapperSimpleAppMain] DEBUG [Base64PostProcessorCssImageUrlRewriter] Skip encoding image resource : url('/images/bk-ruby/left-hover-ie.png')
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.087 | 11:20:16,036 [WrapperSimpleAppMain] DEBUG [Base64PostProcessorCssImageUrlRewriter] Skip encoding image resource : url('/images/bk-ruby/right-hover.png')
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.087 | 11:20:16,045 [WrapperSimpleAppMain] DEBUG [Base64PostProcessorCssImageUrlRewriter] Skip encoding image resource : url('/images/bk-ruby/right-hover-ie.png')
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.092 | 11:20:16,045 [WrapperSimpleAppMain] DEBUG [Base64PostProcessorCssImageUrlRewriter] Skip encoding image resource : url('/images/bk-ruby/play-hover.png')
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.092 | 11:20:16,045 [WrapperSimpleAppMain] DEBUG [Base64PostProcessorCssImageUrlRewriter] Skip encoding image resource : url('/images/bk-ruby/play-hover-ie.png')
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.092 | 11:20:16,045 [WrapperSimpleAppMain] DEBUG [Base64PostProcessorCssImageUrlRewriter] Skip encoding image resource : url('/images/bk-ruby/pause-hover.png')
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.093 | 11:20:16,045 [WrapperSimpleAppMain] DEBUG [Base64PostProcessorCssImageUrlRewriter] Skip encoding image resource : url('/images/bk-ruby/pause-hover-ie.png')
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.097 | 11:20:16,045 [WrapperSimpleAppMain] DEBUG [Base64PostProcessorCssImageUrlRewriter] Skip encoding image resource : url('/images/bg.png')
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.098 | 11:20:16,046 [WrapperSimpleAppMain] DEBUG [Base64PostProcessorCssImageUrlRewriter] Skip encoding image resource : url("/images/content-bg.png")
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.098 | 11:20:16,057 [WrapperSimpleAppMain] INFO  [Base64ImageEncoderPostProcessor] Base64 Postprocessing done
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.098 | 11:20:16,058 [WrapperSimpleAppMain] DEBUG [AbstractChainedResourceBundlePostProcessor] postprocessing bundle:/bundles/dmlights.css
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.198 | Jan 29, 2013 11:20:16 AM org.apache.catalina.core.ApplicationContext log
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.198 | SEVERE: StandardWrapper.Throwable
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.198 | java.lang.StackOverflowError
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.198 |     at java.util.regex.Pattern$LazyLoop.match(Unknown Source)
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.198 |     at java.util.regex.Pattern$GroupTail.match(Unknown Source)
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.198 |     at java.util.regex.Pattern$CharProperty.match(Unknown Source)
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.198 |     at java.util.regex.Pattern$Ques.match(Unknown Source)
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.198 |     at java.util.regex.Pattern$GroupHead.match(Unknown Source)
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.198 |     at java.util.regex.Pattern$LazyLoop.match(Unknown Source)
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.198 |     at java.util.regex.Pattern$GroupTail.match(Unknown Source)
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.198 |     at java.util.regex.Pattern$CharProperty.match(Unknown Source)
INFO   | jvm 1    | main    | 2013/01/29 11:20:16.198 |     at java.util.regex.Pattern$Ques.match(Unknown Source)

【问题讨论】:

    标签: java css stack-overflow jawr hybris


    【解决方案1】:

    在我的 CSS 中,我有一个可能导致问题的类定义:

    .our-price-indicated-pdp-acessories,
    .our-price-indicated-cart-dropdown
    {
        color: #6E6E6E;
        font-size: 11px;
        line-height: 15px;
        font-weight: bold;
        text-align: center;
    }
    

    所以我把它改成了:

    .our-priceind-pdpa,
    .our-priceind-cartdrop{
        color: #6E6E6E;
        font-size: 11px;
        line-height: 15px;
        font-weight: bold;
        text-align: center;
    }
    

    它又起作用了。

    但很难绝对确定。当类的名称很长时,错误并不总是发生。如果你问我,整个问题就是一个奇妙的思维扭曲。

    我的建议是,查看您的 CSS,看看您的类名是否较长,并尝试在没有这些 CSS 类的情况下重新部署应用程序。

    【讨论】:

    • 谢谢你 - 我刚刚在我的项目中添加 bootstrap.css 后遇到了这个问题......长 CSS 类名似乎也是原因。仅供参考,我正在使用最新版本的 JAWR (3.3.3)。由于编辑 BS 类是不切实际的,我只好暂时从我的调度程序 servlet 中删除 jawrCSSController
    • 欢迎您,感谢您的反馈。当我使用 JAWR 时,有一种方法可以将特定文件排除在压缩之外,因此您不必一起删除整个 jawrCSSController,而只需将其配置为不压缩某个 CSS 文件。你可能想调查一下。
    • 哦,是的,在 jawrsetup.properties 文件中的某处。
    【解决方案2】:

    我正在使用 Jawr 3.3.3 和 Bootstrap 3.1.0 并且遇到了同样的问题。解决方案是在 bootstrap.css 中做一个小的“更正”,即。改变:

    a[href]:after {
        content: " (" attr(href) ")";
    }
    abbr[title]:after {
        content: " (" attr(title) ")";
    }
    

    到:

    a[href]:after {
        content: " \0028" attr(href) "\0029";
    }
    abbr[title]:after {
        content: " \0028" attr(title) "\0029";
    }
    

    请注意,唯一改变的是左括号和右括号(以及对应的 css 代码)。

    这种方式语义保持不变,但 jawr 不会失败。 :) (我很确定这是导致这种情况的正则表达式的事情..)

    【讨论】:

      猜你喜欢
      • 2015-10-28
      • 2012-04-29
      • 1970-01-01
      • 2018-07-10
      • 2023-03-10
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多