2013-11-10 4 views
0

Я разрабатываю приложение 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/ ... не повезло.

ответ

0

Итак, если у кого-либо еще есть проблема с GAE, то стоит проверить, что GAE поддерживает этот «whatevers», который вы импортируете в свой код. Я использовал java.util.ResourceBundle для чего-то, что не поддерживается GAE ... но, конечно же, будет работать на локальной машине, работающей с Java JDK.

Так что ничего общего с фильтрами или HttpRequests. Кто знал, а? Рад, что я не тратил впустую день, играя с ним! Hummm?

+0

'java.lang.NoClassDefFoundError' является одним из самых вводящих в заблуждение значений в библиотеке классов Java. Если в нем говорится: «Не удалось инициализировать класс», реальная проблема заключается в том, что исключение было выбрано в статическом инициализаторе класса с именем! Большая боль. Вот почему некоторые люди рекомендуют не делать ничего нетривиального в статических инициализаторах. –

+0

P.S. вы должны принять свой собственный ответ, чтобы этот вопрос не отображался в списке вопросов без ответа. –

Смежные вопросы