Ludovic ROLAND

Blog technique sur mes expériences de développeur.

Google App Engine : Corriger l’erreur WARNING: failed _ah_ServeBlobFilter: java.lang.ClassCastException (…)

23 janvier 2013

Comment reproduire l’erreur ?

Comme le stipule la documentation de Google App Engine, si vous souhaitez créer des tests unitaires dans votre application Cloud (JUnit Test), 3 fichiers jar doivent être ajoutés au classpath du projet en plus du fichier jar JUnit 4 :

  • appengine-api-labs.jar
  • appengine-api-stubss.jar
  • appengine-testing.jar

Il est également très probable que vous les avez placés dans le dossier «war/WEB-INF/lib» de votre solution. Oui mais voilà, alors que tout marchait bien, vous devez très probablement avoir l’erreur suivante :

 WARNING: failed \_ah\_ServeBlobFilter: java.lang.ClassCastException: com.google.appengine.tools.development.ApiProxyLocalImpl cannot be cast to com.google.appengine.tools.development.ApiProxyLocal  
 janv. 24, 2013 10:11:35 PM com.google.apphosting.utils.jetty.JettyLogger warn  
 WARNING: Failed startup of context com.google.appengine.tools.development.DevAppEngineWebAppContext@a5bfd5{/,J:\ludovic\Etudes\3) EFREI\Semestre 9\Cloud Computing\Google App Engine\Projet\Cloud Library\war}  
 java.lang.ClassCastException: com.google.appengine.tools.development.ApiProxyLocalImpl cannot be cast to com.google.appengine.tools.development.ApiProxyLocal  
 at com.google.appengine.api.blobstore.dev.ServeBlobFilter.init(ServeBlobFilter.java:54)  
 at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)  
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)  
 at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662)  
 at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)  
 at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)  
 at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)  
 at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)  
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)  
 at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)  
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)  
 at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)  
 at org.mortbay.jetty.Server.doStart(Server.java:224)  
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)  
 at com.google.appengine.tools.development.JettyContainerService.startContainer (JettyContainerService.java:205)  
 at com.google.appengine.tools.development.AbstractContainerService.startup (AbstractContainerService.java:232)  
 at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:157)  
 at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply (DevAppServerMain.java:333)  
 at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)  
 at com.google.appengine.tools.development.DevAppServerMain.<init>(DevAppServerMain.java:269)  
 at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:245)

Comment corriger l’erreur ?

Pour corriger cette erreur, il suffit simplement de placer les trois fichiers jar en dehors de votre solution et ensuite de mettre à jour le classpath.

Typiquement le genre de problème sur lequel on peut passer des heures la première fois qu’on le rencontre…

Commentaires