Я разрабатываю приложение Google App Engine (1.8.7) на Java. У меня есть следующий фильтр в моем файле web.xml ...Google App Engine: связанный с фильтром NoClassDefFoundError в развернутой версии
<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>
Для получения информации фильтра обертывания Для получения информации файла позволяет многократно читает 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
dev, но когда я развертываю в 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
и застрял на пути построения и lib/
... не повезло.
'java.lang.NoClassDefFoundError' является одним из самых вводящих в заблуждение значений в библиотеке классов Java. Если в нем говорится: «Не удалось инициализировать класс», реальная проблема заключается в том, что исключение было выбрано в статическом инициализаторе класса с именем! Большая боль. Вот почему некоторые люди рекомендуют не делать ничего нетривиального в статических инициализаторах. –
P.S. вы должны принять свой собственный ответ, чтобы этот вопрос не отображался в списке вопросов без ответа. –