【问题标题】:Java.lang.VerifyErrorJava.lang.VerifyError
【发布时间】:2010-08-09 08:29:41
【问题描述】:

我在我的 J2EE 容器中偶尔收到以下错误。那是有一段时间容器正在启动,没有任何问题,有一段时间容器没有出现,因为这个错误,有没有人以前见过这个错误......?可能是什么原因..?它是否涉及任何类加载器/安全问题..?

java.lang.VerifyError: (class: com/rsa/authagent/authapi/realmstat/AUTHav, method: a signature: (Lcom/rsa/authagent/authapi/authmsg/AUTHa0;)V) catch_type not a subclass of Throwable
        at java.lang.Class.getDeclaredFields0(Native Method)
        at java.lang.Class.privateGetDeclaredFields(Class.java:2259)
        at java.lang.Class.getDeclaredField(Class.java:1852)
        at java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1582)
        at java.io.ObjectStreamClass.access$700(ObjectStreamClass.java:52)
        at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:408)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:400)
        at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:297)
        at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:531)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1552)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1466)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1699)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1634)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
        at com.rsa.authagent.authapi.realmstat.AUTHi.j(Unknown Source)
        at com.rsa.authagent.authapi.realmstat.AUTHi.<init>(Unknown Source)
        at com.rsa.authagent.authapi.realmstat.AUTHh.<init>(Unknown Source)
        at com.rsa.authagent.authapi.realmstat.AUTHg.<init>(Unknown Source)
        at com.rsa.authagent.authapi.AuthSessionFactory.a(Unknown Source)
        at com.rsa.authagent.authapi.AuthSessionFactory.<init>(Unknown Source)
        at com.rsa.authagent.authapi.AuthSessionFactory.getInstance(Unknown Source)
        at netx.esf.authentication.rsa.service.RsaAuthenticationServiceImpl.instantiateRsaAPI(RsaAuthenticationServiceImpl.java:1050)
        at netx.esf.authentication.rsa.service.RsaAuthenticationServiceImpl.start(RsaAuthenticationServiceImpl.java:73)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at arch.service.beans.RepBasedServiceBean.onMessage(RepBasedServiceBean.java:108)
        at arch.service.beans.RepBasedServiceImpl.onMessage(RepBasedServiceImpl.java:202)
        at arch.service.beans.RepBasedServiceImpl.message(RepBasedServiceImpl.java:229)
        at arch.CORBA.service.ServicePOA.local_message(ServicePOA.java:188)
        at arch.CORBA.Transport.sendLocalRequest(Transport.java:447)
        at arch.transport.StubProxy.send_managed_request(StubProxy.java:364)
        at arch.transport.StubProxy.invoke(StubProxy.java:205)
        at $Proxy15.start(Unknown Source)
        at arch.service.beans.RepositoryBasedServiceFactory.startDeployable(RepositoryBasedServiceFactory.java:423)
        at arch.service.beans.ServiceContainer$ServiceStarter.run(ServiceContainer.java:1392)
        at arch.service.beans.ServiceContainer$ThreadPool._run(ServiceContainer.java:2934)
        at arch.util.ThreadPool._runLoopBody(ThreadPool.java:213)
        at arch.util.ThreadPool._runForThread(ThreadPool.java:230)
        at arch.util.ThreadPool.access$000(ThreadPool.java:3)
        at arch.util.ThreadPool$1.run(ThreadPool.java:95)

【问题讨论】:

    标签: java


    【解决方案1】:

    AUTHav.class 已损坏(有时?)。显然,某些方法被声明为抛出不是 Throwable 的子类的东西。通常这不应该发生,因为 Java 编译器会检测到该问题并报告错误。但也许类文件在运行时被修改/检测甚至生成,这会引入零星错误。或者您有命名冲突,并且加载的类偶尔会看到一个不同的、非 Throwable 类,而不是预期的类。

    如果AUTHav.class 包含在某个存档中,您可以查看字节码(使用javap 或反编译器)并检查是否找到带有可疑throws 参数的方法。


    所以字节码被混淆了......那么它可能 - 这只是一个猜测 - 你的 J2EE 容器中有多个版本的库。由于类被混淆,类名AUTHa7 和/或AUTHa1 有可能用于不同版本库中的不同(原始)类。然后,如果类加载器在错误的时间同时选择了两者,或者可能是错误的,那么AUTHa7 和/或AUTHa1 在运行时不是异常...

    【讨论】:

    • 我检查了 AUTHav.class 的字节码。有一种方法如下,public synchronized void a(AUTHa0 autha0) 在这里抛出 AUTHa7, AUTHa1,AUTHa7 扩展了 AUTHa1,而 AUTHa1 扩展了 'Exception' 类......所以我觉得这里没有什么可疑的......你呢有什么想法..?
    • 感谢 Andreas,我检查了我的类路径,有两个来自不同 JAR 文件的同名类文件。这两个中的一个扩展了“异常”,即预期的一个,而另一个扩展了“异常”。谢谢。
    • ... 难以置信 - 这真的只是非常疯狂的猜测。很高兴听到它很受欢迎:-)
    【解决方案2】:

    我的猜测:硬件故障,尤其是 RAM,导致 JVM 获取损坏的字节码。通常它会导致 JVM 彻底崩溃,但这当然值得一试:

    Memtest86+

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 2016-08-05
      • 2018-09-22
      • 2010-10-14
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多