标签: verifyerror

获取java.lang.VerifyError的原因

我正在调查以下内容 java.lang.VerifyError

java.lang.VerifyError: (class: be/post/ehr/wfm/application/serviceorganization/report/DisplayReportServlet, method: getMonthData signature: (IILjava/util/Collection;Ljava/util/Collection;Ljava/util/HashMap;Ljava/util/Collection;Ljava/util/Locale;Lorg/apache/struts/util/MessageRe˜̴Mt̴MÚw€mçw€mp:”MŒŒ
                at java.lang.Class.getDeclaredConstructors0(Native Method)
                at java.lang.Class.privateGetDeclaredConstructors(Class.java:2357)
                at java.lang.Class.getConstructor0(Class.java:2671)
Run Code Online (Sandbox Code Playgroud)

它在启动部署servlet的jboss服务器时发生.它是用jdk-1.5.0_11编译的,我试图用jdk-1.5.0_15重新编译它而没有成功.这是编译运行正常但在部署时,会发生java.lang.VerifyError.

当我更改方法名称并得到以下错误:

java.lang.VerifyError: (class: be/post/ehr/wfm/application/serviceorganization/report/DisplayReportServlet, method: getMD signature: (IILjava/util/Collection;Lj    ava/util/Collection;Ljava/util/HashMap;Ljava/util/Collection;Ljava/util/Locale;Lorg/apache/struts/util/MessageResources?á?ÿ?àN|?ÿ?àN?Üw?Çm?ºw?ÇmX#?ûM|X?öM
            at java.lang.Class.getDeclaredConstructors0(Native Method)
            at java.lang.Class.privateGetDeclaredConstructors(Class.java:2357
            at java.lang.Class.getConstructor0(Class.java:2671)
            at java.lang.Class.newInstance0(Class.java:321)
            at java.lang.Class.newInstance(Class.java:303)
Run Code Online (Sandbox Code Playgroud)

您可以看到显示更多的方法签名.

实际的方法签名是

  private PgasePdfTable getMonthData(int month, int year, Collection dayTypes,
                          Collection calendarDays,
                          HashMap bcSpecialDays,
                          Collection activityPeriods,
                          Locale locale, MessageResources resources) throws   Exception {
Run Code Online (Sandbox Code Playgroud)

我已经尝试过用它来查看它,javap并给出了应该的方法签名.

当我的其他同事检查代码,编译并部署它们时,它们会遇到同样的问题.当构建服务器获取代码并将其部署在开发或测试环境(HPUX)上时,会发生同样的错误.此外,运行Ubuntu的自动测试机在服务器启动期间显示相同的错误.

应用程序的其余部分运行正常,只有一个servlet出现故障.任何想看的地方都会有所帮助.

java deployment exception verifyerror

188
推荐指数
7
解决办法
28万
查看次数

Android java.lang.VerifyError?

在我的Android应用程序中,我总是得到VerifyErrors!我无法弄清楚原因.每当我包含一个外部JAR时,我总是在尝试启动我的应用程序时获得VerifyErrors(除了一次,当我包含Apache Log4j时).

我通常通过获取库的源代码并将其添加到我的项目来解决这个问题,但我正在尝试放置GData客户端库.

我可以在源代码中获取它,但它的依赖项(mail.jar,activation.jar,servlet-api.jar)我不能,所以我得到验证错误.我想一劳永逸地找到这个问题的根源.我在互联网上看了一下,但他们似乎都在谈论不完整的类文件?我不知道.

java android gdata verifyerror

98
推荐指数
8
解决办法
9万
查看次数

tomcat 7.0.23/jdk 1.6.x中的java.lang.VerifyError解决方案?

当我在Linux(java 1.6.x)上将maven 3.0.3构建的webapp部署到tomcat 7.0.23并访问在登录页面中发布我的凭据时,我收到以下错误.pom.xml引用了servlet 2.5,jsp 2.1和JSTL 1.2.

为什么我会收到此错误?我该怎么做才能避免它?

我在同一个tomcat实例上部署了其他.war文件,并且从未在这些应用程序中遇到过这个问题.

我做了http GET的第一个JSP(login.jsp)没有抛出错误.从第一个JSP到第二个Jsp(ChLogin.jsp)的POST遇到了问题.

===========================

根本原因

java.lang.VerifyError: (class: org/apache/jsp/ChLogin_jsp, method: _jspService signature: (Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V) Inconsistent stack height 0 != 1
    java.lang.Class.getDeclaredConstructors0(Native Method)
    java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
    java.lang.Class.getConstructor0(Class.java:2699)
    java.lang.Class.newInstance0(Class.java:326)
    java.lang.Class.newInstance(Class.java:308)
    org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:172)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
Run Code Online (Sandbox Code Playgroud)

更新1
webapp的WEB-INF\lib不包含servlet,jsp或JSTL jar.它包含许多应用程序依赖项和spring jar(我们使用spring MVC).

更新2
我们不预编译JSP.不过,这是另一天的目标.

更新3
发现此问题不在tomcat 7.0.12,7.0.14,7.0.16中,而是从7.0.19开始.发布到tomcat用户邮件列表.得到一个答复,可能是日食JDT编译器有问题.通过用tomcat 7.0.16的JDT编译器和LO&BEHOLD替换tomcat 7.0.23/27中的编译器确实是这种情况,一切都很好.我打算写Eclipse JDT编译器团队(如果有的话)并发布有关此错误的信息.

java tomcat exception verifyerror

19
推荐指数
2
解决办法
4187
查看次数

在API 1.6上部署VerifyError

在Android 1.6上部署我的应用程序时,我遇到了向后兼容性问题.我在这段代码上得到了VerifyError:

if(android.os.Build.VERSION.SDK_INT >= 11) {
    getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.actionbar_bg));
}
Run Code Online (Sandbox Code Playgroud)

这不是意料之外的,因为在API 11之前不存在getActionBar(),但1.6之后(API 5及更高版本?)根据在API级别上部署时获取的logcat消息进行半优雅的构建8装置;

06-27 16:47:04.333: INFO/dalvikvm(11529): Could not find method com.me.app.MyActivity.getActionBar, referenced from method com.me.app.MyActivity.init
06-27 16:47:04.333: WARN/dalvikvm(11529): VFY: unable to resolve virtual method 1090: Lcom.me.app.MyActivity;.getActionBar ()Landroid/app/ActionBar;
06-27 16:47:04.333: DEBUG/dalvikvm(11529): VFY: replacing opcode 0x6e at 0x004f
06-27 16:47:04.333: DEBUG/dalvikvm(11529): VFY: dead code 0x0052-005f in Lcom.me.app.MyActivity;.init (Z)V
Run Code Online (Sandbox Code Playgroud)

1.6及更早版本不会这样做,而是抛出VerifyError:

06-27 16:23:45.561: ERROR/dalvikvm(427): Could not find method com.me.app.MyActivity.getActionBar, referenced from method com.me.app.MyActivity.init
06-27 16:23:45.561: WARN/dalvikvm(427): VFY: unable to resolve virtual method 1090: Lcom/me/app/MyActivity;.getActionBar ()Landroid/app/ActionBar;
06-27 …
Run Code Online (Sandbox Code Playgroud)

android backwards-compatibility verifyerror android-3.0-honeycomb android-4.0-ice-cream-sandwich

14
推荐指数
1
解决办法
2730
查看次数

java.lang.VerifyError IllformedLocaleException

我有以下父方法,在所有情况下都使用各种AP​​I级别:

public int setVoice (@NonNull final String language, @NonNull final String region){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        return setVoice21(language, region);
    } else {
        return setVoiceDeprecated(language, region);
    }
}
Run Code Online (Sandbox Code Playgroud)

setVoice21做这样的事情:

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public int setVoice21 ( @NonNull final String language, @NonNull final String region){

    try {
        // try some API 21 stuff
    } catch (final IllformedLocaleException e) {
        e.printStackTrace();
        return setVoiceDeprecated(language, region);
    }
Run Code Online (Sandbox Code Playgroud)

setVoice21包含其他需要API 21+的代码,特别是TextToSpeech.VoiceLocale.Builder

当我在设备<API 21上运行此代码时,我收到以下错误:

W/dalvikvm:VFY:无法解析异常类6232(Ljava/util/IllformedLocaleException;)W/dalvikvm:VFY:拒绝操作码0x0d在0x0168 W/dalvikvm:VFY:拒绝Lcom/myapp/android/speech/MyTextToSpeech; .setVoice21 (Ljava/lang/String; Ljava/lang/String;)IW/dalvikvm:Verifier拒绝了类Lcom/myapp/android/speech/MyTextToSpeech;

E/AndroidRuntime:FATAL EXCEPTION:main java.lang.VerifyError:com/myapp/android/speech/MyTextToSpeech

如果我删除了 …

java android exception verifyerror

14
推荐指数
2
解决办法
931
查看次数

WAS 6.1 java.lang.VerifyError:违反了类加载约束

环境是Linux上的WAS 6.1,部署了一个使用xercesImpl.jar类的webapp.

由于公司政策限制,必须使用以下设置部署应用:

Class Loader Order
    Classes loaded with parent class loader first
->  Classes loaded with application class loader first

WAR class loader policy
    Class loader for each WAR file in application
->  Single class loader for application
Run Code Online (Sandbox Code Playgroud)

WAR文件包含xercesImpl.jar的副本,与编译应用程序时类路径中的相同.

启动webapp时,当Spring尝试解析其配置时,它会抛出:

java.lang.VerifyError: class loading constraint violated 
    (class: org/apache/xerces/jaxp/DocumentBuilderImpl 
    method: parse(Lorg/xml/sax/InputSource;)Lorg/w3c/dom/Document;)
Run Code Online (Sandbox Code Playgroud)

因此分析

看来WAS提供了org.apache.xerces.jaxp.DocumentBuilderImpl的实现,因为我们可以从WAR文件中删除xercesImpl.jar并仍然得到相同的错误(不是ClassNotFoundException).因此,WAS似乎使用自己的副本来解析引用,该副本与我们编译的类文件中的引用不兼容.但是,我能找到的'xercesImpl.jar'的唯一其他实例(除了使用我们的应用程序部署的副本)位于目录中 deploytool,这似乎在应用服务器之外.

我用WAS(所有1300个)扫描了所有的罐子

for i in `find . -name \*.jar`; do jar tvf $i|grep -qi xerces && echo $i ; done
Run Code Online (Sandbox Code Playgroud)

并发现它./java/jre/lib/xml.jar包含所有类org.apache.xerces.*,因此这可能是类加载器解析引用的地方.

这是肮脏的部分:

如果我们改为"父类加载器第一",我们看不到异常.这与预期的行为背道而驰.我们希望使用"application …

java websphere classloader verifyerror

10
推荐指数
1
解决办法
3万
查看次数

错误消息"尝试在堆栈上拆分长或双"表示什么?

我从我的代码中收到以下错误:

尝试在堆栈上拆分long或double

我对这个错误的起源一无所知,也不知道如何调试它.这表明什么问题?我该如何解决?

[ERROR]  [Mon May 23 14:29:46 IST 2011]   [(class: org/apache/jsp/dashboard_jsp, method: _jspService signature:     (Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V) Attempt to split long or double on the stack]  [10.97.34.222] hddlntdsz2350  [ session not set ] 
java.lang.VerifyError: (class: org/apache/jsp/dashboard_jsp, method: _jspService signature: (Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V) Attempt to split long or double on the stack
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.newInstance0(Class.java:326)
at java.lang.Class.newInstance(Class.java:308)
at org.jboss.web.tomcat.service.TomcatInjectionContainer.newInstance(TomcatInjectionContainer.java:273)
Run Code Online (Sandbox Code Playgroud)

问题代码:我创建了一个如下所示的模型

public class DashboardViewModel implements Serializable {

/** defalut serialization id */
private static final long serialVersionUID = 1L; …
Run Code Online (Sandbox Code Playgroud)

java verifyerror

10
推荐指数
1
解决办法
814
查看次数

用于调试VerifyError的好工具?

我发现字节码VerifyErrors很难调试.JVM提供的反馈很少,通常只是当前类,有时是方法.

我通常通过ASMJasmin手动设计字节码时遇到的一些错误示例:

  • Stack size too large
  • Unable to pop operand off an empty stack
  • Falling off the end of the code
  • Expecting to find object/array on stack
  • Incompatible object argument for function call
  • Inconsistent stack height 4 != 2

(要清楚;我知道所有这些意味着什么,我对调试它们的原因的工具或技术感兴趣.)

我的问题:是否有任何工具可以提供有关这些类型错误的详细反馈?我会欣赏诸如此类的信息

  • javap类似的输出
  • 对行号(或操作码字节偏移)的引用
  • 每行的操作数堆栈信息(类型/深度)
  • 更具描述性的错误消息

java debugging bytecode verifyerror

10
推荐指数
1
解决办法
1622
查看次数

升级Android SDK会导致java.lang.VerifyError崩溃

自升级我的Android SDK以来,我的java.lang.VerifyError崩溃启动了以前正在运行的应用程序.

查看日志,导致崩溃的一些新问题以前不存在:

Could not find method android.support.v4.content.LocalBroadcastManager.getInstance, referenced from method com.myapp.android.App.setOAuthLoginState
04-12 19:43:10.249: W/dalvikvm(9508): VFY: unable to resolve static method 251: Landroid/support/v4/content/LocalBroadcastManager;.getInstance (Landroid/content/Context;)Landroid/support/v4/content/LocalBroadcastManager;
04-12 19:43:10.249: D/dalvikvm(9508): VFY: replacing opcode 0x71 at 0x0014
Run Code Online (Sandbox Code Playgroud)

android.support.v4.content.LocalBroadcastManager.getInstance似乎仍然在Android Compatibilty库的源代码中.在我的App.onCreate()被称为BTW之前记录此警告.

我已经尝试使用android-support-v4.jar以前使用我的应用程序的旧版本,以及android-support-v4.jar最新SDK 中包含的新版本,但结果在两种情况下都是相同的(这看起来很有趣吗?).

同样奇怪的是像这样的警告流:

W/dalvikvm(12455): VFY: unable to find class referenced in signature (Ltwitter4j/User;)
Run Code Online (Sandbox Code Playgroud)

这里引用的twitter4j库似乎在我的项目中正确包含.

我还在学习Java,所以我不确定导致这个问题的原因.任何帮助将不胜感激.

仅供参考,完整日志如下:

04-12 19:43:07.585: W/ActivityThread(9508): Application com.myapp.android is waiting for the debugger on port 8100...
04-12 19:43:07.593: I/System.out(9508): Sending WAIT chunk
04-12 19:43:07.601: I/dalvikvm(9508): …
Run Code Online (Sandbox Code Playgroud)

java android verifyerror android-support-library

9
推荐指数
1
解决办法
7689
查看次数

Gradle:从分支内部调用错误的<init>方法(invokespecial)

当前版本的java(8u20,7u67)打破了gradle\groovy编译器和运行时兼容性:

:compileTestGroovy FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileTestGroovy'.
> Bad <init> method call from inside of a branch
  Exception Details:
    Location:
      some/MyClass.<init>(Lsome/MyOtherClass;)V @71: invokespecial
    Reason:
      Error exists in the bytecode
    Bytecode:
      0x0000000: b800 174d 04bd 0019 5903 2b53 5910 ff12
      0x0000010: 05b8 001f 2a5f ab00 0000 0055 0000 0003
      0x0000020: f20b c677 0000 0022 0000 9b75 0000 0037
      0x0000030: 2cce be6d 0000 0040 5f5a 5903 3212 05b8
      0x0000040: 0023 c000 …
Run Code Online (Sandbox Code Playgroud)

groovy verifyerror gradle

8
推荐指数
2
解决办法
3998
查看次数