简体   繁体   English

java.lang.VerifyError:期望一个stackmap框架

[英]java.lang.VerifyError: Expecting a stackmap frame

Is there a way to load a custom HttpServlet to GAE? 有没有办法将自定义HttpServlet加载到GAE? I uploaded a project that included an HttpServlet in the .server package and added it to the web.xml... 我上传了一个包含.server包中的HttpServlet的项目,并将其添加到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>

Is there something else I am missing, or is it not possible? 还有其他我想念的东西,还是不可能?

--------EDIT-------- - - - - 编辑 - - - -

some things that appear when i init my server, which im not used to seeing... 当我启动我的服务器时出现的一些东西,我不习惯看到......

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

and here is what shows when it crashes.. 这是什么显示它崩溃..

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 编辑#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");
}
}

As BalusC pointed out, one solution to the problem is to just use JDK6. 正如BalusC指出的那样,问题的一个解决方案就是使用JDK6。

Another solution, if you want to stay with JDK7, would be to use " -XX:-UseSplitVerifier " as an argument for the VM. 如果你想继续使用JDK7,另一个解决方案是使用“ -XX:-UseSplitVerifier ”作为VM的参数。 Go to

Window → Preferences → Java → Installed JREs → Edit... → Default VM arguments 窗口→首选项→Java→已安装的JRE→编辑...→默认VM参数

and add it there. 并将其添加到那里。

已安装的JREJRE定义

GAE uses Java 1.6, but you've compiled the code with Java 1.7. GAE使用Java 1.6,但您已使用Java 1.7编译代码。 You need to recompile with Java 1.6. 您需要使用Java 1.6重新编译。 As per the comments, you're using Eclipse; 根据评论,你正在使用Eclipse; you can set the Java compiler level in Java > Compiler section of project's properties. 您可以在项目属性的Java> Compiler部分中设置Java编译器级别。

在此输入图像描述

Using -XX:-UseSplitVerifier is a temporary solution. 使用-XX:-UseSplitVerifier是一种临时解决方案。 Now java uses the previous version of the bytecode verifier which tolerates this bad or missing stackmap frames. 现在java使用以前版本的字节码验证器,它可以容忍这个坏的或丢失的堆栈映射帧。 Java8 doesnt support this option. Java8不支持此选项。

I could solve this issue by setting Eclipse Mars / Project properties / Java compiler : 我可以通过设置Eclipse Mars / Project属性/ Java编译器来解决这个问题:

  • Compiler compliance level to 1.7 (as I don't have 1.6 anymore) 编译器合规性级别为1.7(因为我没有1.6)
  • Generated .class files compatibility : 1.6 生成的.class文件兼容性: 1.6
  • Source compatibility : 1.6 来源兼容性: 1.6

as I didn't have 1.7 specific code :-) 因为我没有1.7特定代码:-)

Server Ubuntu + Tomcat 7.0.52 on JVM 1.7.0_85-b01 Dev Eclipse Mars on JDK 7u55 JVM上的服务器Ubuntu + Tomcat 7.0.52 1.7.0_85-b01在JDK 7u55上开发Eclipse Mars

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 java.lang.VerifyError:期望分支目标上的stackmap帧 - java.lang.VerifyError: Expecting a stackmap frame at branch target java.lang.VerifyError:期望分支目标73处的堆栈图帧 - java.lang.VerifyError: Expecting a stackmap frame at branch target 73 java.lang.VerifyError:在分支目标29处期待一个堆栈映射框架 - java.lang.VerifyError: Expecting a stackmap frame at branch target 29 java.lang.VerifyError:在分支目标 5 处期望堆栈图帧 - java.lang.VerifyError: Expecting a stackmap frame at branch target 5 线程“ main”中的异常java.lang.VerifyError:在分支目标118处期望一个堆栈映射框架 - Exception in thread “main” java.lang.VerifyError: Expecting a stackmap frame at branch target 118 java.lang.VerifyError:预期随着ASM生成的字节码发生堆栈图框架 - java.lang.VerifyError: Expecting a stackmap frame occuring with ASM generated byte code java.lang.VerifyError:在使用 PowerMockRunner 时,在分支处需要一个堆栈图帧 - java.lang.VerifyError: Expecting a stackmap frame at branch, when using PowerMockRunner java.lang.VerifyError:在分支目标处期待一个堆栈映射框架70异常详细信息 - java.lang.VerifyError: Expecting a stackmap frame at branch target 70 Exception Details java.lang.VerifyError:在使用 mojo 的 Cobertura 的分支目标处期望堆栈图帧 - java.lang.VerifyError: Expecting a stackmap frame at branch target with Cobertura using mojo java.lang.VerifyError:在分支目标 JDK 1.7 处需要堆栈图帧 - java.lang.VerifyError: Expecting a stackmap frame at branch target JDK 1.7
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM