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

java.lang.Exception:java.lang.VerifyError:JVMVRFY012堆栈形状不一致;,java,websphere,verifyerror,Java,Websphere,Verifyerror,我们刚刚从IBMWebSphere7(Java1.6)迁移到WebSphere9(Java1.8)。 我面临着加载jsp时长时间转换、代码中断的问题,下面是代码片段(此代码是用jsp编写的): 下面是堆栈策略 java.lang.Exception:java.lang.VerifyError:JVMVRFY012堆栈形状不一致;class=com/ibm/_jsp/_tmtsstatsksummary,method=_jspService(Ljavax/servlet/http/HttpServ

我们刚刚从IBMWebSphere7(Java1.6)迁移到WebSphere9(Java1.8)。 我面临着加载jsp时长时间转换、代码中断的问题,下面是代码片段(此代码是用jsp编写的):

下面是堆栈策略

java.lang.Exception:java.lang.VerifyError:JVMVRFY012堆栈形状不一致;class=com/ibm/_jsp/_tmtsstatsksummary,method=_jspService(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V,pc=13805 例外情况详情: 地点: com/ibm/_jsp/_tmtstasksummary._jsp服务(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V@13805:JBifnull 原因: 类型top(当前帧,局部变量[120])不可分配给“java/lang/Long”(堆栈映射,局部变量[120]) 当前帧: 密件抄送:@13805 标志:{} 当地人:{'com/ibm/_jsp/_tmtstasksummary','javax/servlet/http/HttpServletRequest','javax/servlet/http/HttpServletResponse','javax/servlet/jsp/PageContext','javax/servlet/servlet/ServletConfig','javax/servlet/JspWriter','java/lang/Object','javax/servlet/jsp/JspWriter','com/presentation/查看/pageelements/SecurityAttr',java/lang/String',integer',java/lang/String',javax/servlet/http/HttpSession',java/lang/String',java/lang/String',integer,integer,'java/util/Map',integer',java/lang/String',java/lang/String',integer,integer,'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/String、java/lang/Object、java/lang/Object、java/lang/Object、java/lang/String/Object、java/lang/String/String/String、java/lang、java/lang/lang/lang/String、java/lang/lang、java/lang/lang/lang/lang/lang、java/lang/lang

有谁能提出解决办法吗。 我读过关于使用splitverify的文章,但它可以与AspectJ一起使用。还有其他解决方案吗?

我觉得

  • 您正在尝试对引发错误或错误的空对象进行类型转换

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

  • 另外,一个一般性的建议是,你不需要使用Long employeeId来转换为Long,只要你能处理这个问题。

    我觉得

  • 您正在尝试对引发错误或错误的空对象进行类型转换

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


  • 另外,一个一般性的建议是,您实际上不需要使用Long-employeeId来转换为Long-as,这应该可以解决这个问题。

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

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

    我使用三元运算符,这样就不会出现类型转换空对象问题。我使用三元运算符,这样就不会出现类型转换空对象问题。您解决了这个问题吗?您解决了这个问题吗?
        employeeId = (request.getAttribute("EMPID") == null) ? 0L
                : Long.parseLong(request.getAttribute("EMPID"));
        empid = employeeId.longValue();