我正在调查以下内容 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)
当启动部署了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)
你可以看到显示了更多的方法签名。
实际的方法签名是
private PgasePdfTable getMonthData(int month, int year, Collection dayTypes, Collection calendarDays, HashMap bcSpecialDays, Collection activityPeriods, Locale locale, MessageResources resources) throws Exception {
我已经尝试过使用它进行查看,javap并且给出了应有的方法签名。
javap
当我的其他同事签出代码,对其进行编译和部署时,他们会遇到相同的问题。当构建服务器获取代码并将其部署在开发或测试环境(HPUX)上时,会发生相同的错误。同样,运行Ubuntu的自动测试机在服务器启动期间也会显示相同的错误。
该应用程序的其余部分可以正常运行,只有一个servlet发生故障。在哪里寻找任何想法都会有所帮助。
java.lang.VerifyError 针对与运行时所用库不同的库进行编译时,可能会出现这种情况。
例如,在尝试运行针对Xerces 1编译的程序但在类路径中找到Xerces 2时,这发生在我身上。所需的类(在org.apache.*命名空间)在运行时被发现,所以ClassNotFoundException是没有结果。对类和方法进行了更改,以便在运行时找到的方法签名与编译时不匹配。
Xerces 1
Xerces 2
org.apache.*
ClassNotFoundException
通常,编译器会标记方法签名不匹配的问题。JVM将在加载类时再次验证字节码,并VerifyError在字节码尝试执行不应允许的操作时抛出-例如,调用返回的方法,String然后将该返回值存储在包含a的字段中List。
VerifyError
String
List