Ludovic ROLAND - Le blog

Blog technique sur mes expériences de développeur

Google app engine : corriger l’erreur warning: failed _ah_serveblobfilter: java.lang.classcastexception (…)

| Comments

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.(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…

A lire aussi…

Comments