簡體   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