Blog technique sur mes expériences de développeur.
23 janvier 2013
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 :
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)
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…