繁体   English   中英

java.lang.Exception:java.lang.VerifyError:JVMVRFY012堆栈形状不一致;

[英]java.lang.Exception: java.lang.VerifyError: JVMVRFY012 stack shape inconsistent;

我们刚刚从IBM Websphere 7(Java 1.6)迁移到Websphere 9(Java 1.8)。 我遇到的问题是长类型转换,加载jsp时代码中断,下面的代码段(此代码用JSP编写):

        long caseNum = 0L, empid = 0L;
        Long employeeId;


            employeeId = ((Long) request.getAttribute("EMPID") == null) ? 0L
                    : (Long) request.getAttribute("EMPID");
            empid = employeeId.longValue();

下面是堆栈跟踪,

java.lang.Exception:java.lang.VerifyError:JVMVRFY012堆栈形状不一致; class = com / ibm / _jsp / _TMTSSTaskSummary,method = _jspService(Ljavax / servlet / http / HttpServletRequest; Ljavax / servlet / http / HttpServletResponse;)V,pc = 13805异常详细信息:位置:com / ibm / _jsp / _TMTSSTaskSummary._jspService (Ljavax / servlet / http / HttpServletRequest; Ljavax / servlet / http / HttpServletResponse;)V @ 13805:JBifnull原因:类型top(当前帧,locals [120])无法分配给“ java / lang / Long”(堆栈图) ,locals [120])当前帧:bci:@ 13805标志:{} locals:{'com / ibm / _jsp / _TMTSSTaskSummary','javax / servlet / http / HttpServletRequest','javax / servlet / http / HttpServletResponse', 'javax / servlet / jsp / PageContext','javax / servlet / http / HttpSession','javax / servlet / ServletContext','javax / servlet / ServletConfig','javax / servlet / jsp / JspWriter','java / lang / Object','javax / servlet / jsp / JspWriter','com / presentation / view / pageelements / SecurityAttr','java / lang / String',整数,'java / lang / String','javax / servlet / http / HttpSession','java / lang / String','java / lang / String',整数,整数,'j ava / util / Map',整数,'java / lang / String',整数,'java / lang / String','java / lang / String',整数,整数,整数,整数,'java / lang / String' ,'java / lang / String','java / lang / String','java / lang / String','java / lang / Object','java / lang / Object','java / lang / Object',' java / lang / String','java / lang / Object','java / lang / String','java / lang / Object','java / lang / String','java / lang','2017-08- 04 15:26:47.067','0','A','TMTSS〜100:未知错误','859469','518722','null','null')

有人可以为此提出任何解决方案吗? 我读过有关使用splitverify的信息,但它可用于AspectJ。 还有其他解决方案吗?

在我看来,这

  1. 您正在尝试类型转换会引发错误的空对象,或者

     long caseNum = 0L, empid = 0L; Long employeeId; employeeId = (request.getAttribute("EMPID") == null) ? 0L : (Long) request.getAttribute("EMPID"); empid = employeeId.longValue(); 
  2. 您试图将字符串或任何其他对象强制转换为Long。 如果是字符串,请使用Long.parseLong()

      employeeId = (request.getAttribute("EMPID") == null) ? 0L : Long.parseLong(request.getAttribute("EMPID")); empid = employeeId.longValue(); 

另外,您通常不需要使用Long employeeId转换为通用建议,只要自动拆箱即可处理该建议。

似乎是Java 7兼容性问题。在Jdk 7中,您可以使用-XX:-UseSplitVerifier。 如果您使用的是JDK 8,则-XX:-UseSplitVerifier已弃用,并替换为-noverify。 我在-jvm参数中添加了-noverify,它解决了我的问题。

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM