【问题标题】:Google App Engine: Filter-related NoClassDefFoundError in Deployed VersionGoogle App Engine:已部署版本中与过滤器相关的 NoClassDefFoundError
【发布时间】:2013-11-22 01:40:36
【问题描述】:

我正在使用 Java 中的 Google App Engine (1.8.7) 进行开发。我的 web.xml 文件中有以下过滤器...

<filter>
     <filter-name>MultiReadRequestFilter</filter-name>
    <filter-class>com.fitc.general.MultiReadRequestFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>MultiReadRequestFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

For info 过滤器包装 For info 文件允许通过缓存请求多次读取 HttpRequest:

 @Override
 public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
      /* wrap the request in order to read the inputstream multiple times
      MultiReadHttpServletRequest multiReadRequest = new MultiReadHttpServletRequest((HttpServletRequest) request);
     chain.doFilter(multiReadRequest, response);
 }

无论如何。在我的localhost 开发服务器上一切正常,但是当我部署到 GAE 时出现问题。我的 GAE 日志中出现以下错误:

Error for /_ah/spi/BackendService.getApiConfigs java.lang.NoClassDefFoundError: 
Could not initialize class com.fitc.general.MultiReadHttpServletRequest at
    com.fitc.general.MultiReadRequestFilter.doFilter(MultiReadRequestFilter.java:23)
        at
    org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at
    com.googlecode.objectify.cache.AsyncCacheFilter.doFilter(AsyncCacheFilter.java:59)
    (...as so on!)

有谁知道是什么原因造成的?我还有其他几个过滤器,它们在部署时运行良好。我想知道是否可能是这些使用过的罐子,所以我制作了一个 MultiReadHttpServletRequest 类的罐子,并将其粘贴在 buildpath 和 lib/ 目录中……不走运。

【问题讨论】:

    标签: java google-app-engine


    【解决方案1】:

    因此,如果其他人在 GAE 上遇到 java.lang.NoClassDefFoundError 问题,则值得检查 GAE 是否支持您在代码中导入的“任何内容”。我将java.util.ResourceBundle 用于某些东西,GAE 不支持它......但当然可以在运行 Java JDK 的本地机器上工作。

    与过滤器或 HttpRequest 完全无关。谁知道诶?很高兴我没有浪费一天时间摆弄它,呵呵!嗯?

    【讨论】:

    • java.lang.NoClassDefFoundError 是 Java 类库中最具误导性的 throwable 之一。如果它说“无法初始化类”,那么真正的问题是在名为的类的静态初始化程序中引发了异常!大痛。这就是为什么有些人建议不要在静态初始化器中做任何重要的事情。
    • P.S.您应该接受自己的答案,这样该问题就不会在问题列表中显示为未回答。
    猜你喜欢
    • 2017-01-14
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多