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!)
これを引き起こすために何が起こっているのか知っている人はいますか?他にもいくつかのフィルターがあり、展開すると正常に動作します。おそらくこれらがjarを使用していたのではないかと思ったので、MultiReadHttpServletRequest
クラスのjarを作成し、ビルドパスとlib/
ディレクトリに貼り付けました...運が悪いです。