web-dev-qa-db-fra.com

java.lang.VerifyError: Attendre un cadre stackmap

Existe-t-il un moyen de charger un HttpServlet personnalisé sur GAE? J'ai téléchargé un projet qui comprenait un HttpServlet dans le package .server et l'ai ajouté au web.xml ...

<servlet>
   <servlet-name>testServlet</servlet-name>
   <servlet-class>gwtone.server.TestServlet</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>testServlet</servlet-name>
   <url-pattern>/tester/greet</url-pattern>
</servlet-mapping>

Y a-t-il autre chose qui me manque ou n'est-ce pas possible?

--------ÉDITER--------

certaines choses qui apparaissent lorsque j'initie mon serveur, que je n'ai pas l'habitude de voir ...

Jan 22, 2012 4:23:44 AM com.google.apphosting.utils.jetty.JettyLogger info
INFO: Logging to JettyLogger(null) via com.google.apphosting.utils.jetty.JettyLogger
Jan 22, 2012 4:23:44 AM com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml
INFO: Successfully processed E:\Program Files\Eclipse-SDK-3.7.1-win32-x86_64\Workspace\gwtone\war\WEB-INF/appengine-web.xml
Jan 22, 2012 4:23:44 AM com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
INFO: Successfully processed E:\Program Files\Eclipse-SDK-3.7.1-win32-x86_64\Workspace\gwtone\war\WEB-INF/web.xml
Jan 21, 2012 10:23:44 PM com.google.appengine.tools.development.DevAppServerImpl start
INFO: The server is running at http://localhost:8888/
Jan 21, 2012 10:23:44 PM com.google.appengine.tools.development.DevAppServerImpl start
INFO: The admin console is running at http://localhost:8888/_ah/admin

et voici ce qui apparaît quand il plante ..

WARNING: Error for /tester/greet
Java.lang.VerifyError: Expecting a stackmap frame at branch target 14 in method gwtone.server.TestServlet.doGet(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V at offset 0
    at Java.lang.Class.getDeclaredConstructors0(Native Method)
    at Java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at Java.lang.Class.getConstructor0(Unknown Source)
    at Java.lang.Class.newInstance0(Unknown Source)
    at Java.lang.Class.newInstance(Unknown Source)
    at org.mortbay.jetty.servlet.Holder.newInstance(Holder.Java:153)
    at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.Java:428)
    at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.Java:339)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.Java:487)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1166)
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.Java:35)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1157)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.Java:60)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.Java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1157)
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.Java:122)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1157)
    at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.Java:97)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.Java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.Java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.Java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.Java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.Java:418)
    at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.Java:78)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.Java:152)
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.Java:362)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.Java:152)
    at org.mortbay.jetty.Server.handle(Server.Java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.Java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.Java:923)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.Java:547)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.Java:212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.Java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.Java:409)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.Java:582)

EDIT # 2

package gwtone.server;
import Java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {

public TestServlet(){}

@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) 
        throws ServletException, IOException {
    System.out.println("0");
    try {
        System.out.println("1");
        resp.getWriter().println("IT WORKED");
        resp.getWriter().flush();
        System.out.println("2");
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println("3");
}
}
26
user1163009

GAE utilise Java 1.6, mais vous avez compilé le code avec Java 1.7. Vous devez recompiler avec Java 1.6 Selon les commentaires, vous utilisez Eclipse; vous pouvez définir la section Java compilateur dans la section Java> Compilateur des propriétés du projet.

enter image description here

25
BalusC

Comme l'a souligné BalusC, une solution au problème consiste simplement à utiliser JDK6.

Une autre solution, si vous voulez rester avec JDK7, serait d'utiliser " - XX: -UseSplitVerifier " comme argument pour la VM. Aller à

Fenêtre → Préférences → Java → JRE installés → Éditer ... → Par défaut VM arguments

et ajoutez-le là.

Installed JREsJRE Definition

35
Dominik

L'utilisation de -XX: -UseSplitVerifier est une solution temporaire. Maintenant Java utilise la version précédente du vérificateur de bytecode qui tolère ces cadres de stackmap incorrects ou manquants. Java8 ne prend pas en charge cette option.

1
Tamil

Je pourrais résoudre ce problème en définissant Eclipse Mars/Propriétés du projet/Java:

  • Niveau de conformité du compilateur à 1,7 (car je n'ai plus 1,6)
  • Compatibilité des fichiers .class générés: 1.6
  • Compatibilité source: 1.6

car je n'avais pas de code spécifique 1.7 :-)

Serveur Ubuntu + Tomcat 7.0.52 sur JVM 1.7.0_85-b01 Dev Eclipse Mars sur JDK 7u55

0
Thy Morel