2010-08-09 37 views
0

我在我的J2EE容器中偶爾看到下面的錯誤。這是集裝箱起步的一段時間,沒有任何問題,有一段時間集裝箱沒有出現,因爲這個錯誤,有沒有人在......之前看到這個錯誤?可能是什麼原因..?它涉及到任何類加載器/安全問題..?Java.lang.VerifyError

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) 

回答

2

AUTHav.class已損壞(有時候?)。很明顯,某些方法被聲明爲拋出不是Throwable的子類的東西。通常這不應該發生,因爲Java編譯器會檢測到該問題並報告錯誤。但是,也許類文件被修改/檢測,甚至在運行時生成,這引入了零星的錯誤。或者你有一個命名衝突,班級零星地看到一個不同的非Throwable類,而不是預期的類。

如果AUTHav.class包含在一些檔案,你可以看看字節碼(與javap或反編譯器),如果你找到一個可疑throws參數的方法進行檢查。


所以字節代碼混淆...那麼它可能是 - 這只是一個猜測 - 你有你的J2EE容器內庫的多個版本。由於類被混淆,類名AUTHa7和/或AUTHa1有可能被用於庫的不同版本中的不同(原始)類。然後,如果類加載器拿起兩個或可能在錯誤的時間錯誤的一個,它可能發生,那AUTHa7和/或AUTHa1是在運行時不會例外...

+0

我經過AUTHav.class的字節碼。有一個方法如下, 公共同步空A(AUTHa0 autha0)拋出AUTHa7,AUTHa1 這裏,AUTHa7延伸AUTHa1和AUTHa1擴展了「異常」類....所以我覺得沒有什麼是可疑的在這裏。 ..你有什麼主意嗎 ..? – Mariselvam 2010-08-09 13:34:03

+3

...我厭惡混淆字節碼 – 2010-08-09 14:52:02

+0

謝謝Andreas,我檢查了我的類路徑,在不同的JAR文件中有兩個同名的類文件。其中一個擴展了預期的「例外」,另一個擴展了。謝謝。 – Mariselvam 2010-08-10 10:05:39

1

我的猜測:硬件故障,尤其是RAM,導致JVM得到損壞的字節碼。通常它會導致徹底崩潰JVM,但它肯定是檢查出值得可能性:

Memtest86+