2009-10-15 7 views
5

我們有一個Java Web應用程序偶爾無法找到加密庫。 當前重新啓動應用程序可以解決問題。Java加密庫零星地無法啓動

日誌中出現以下期待,請參閱下面的完整堆棧跟蹤。

java.lang.InternalError: Could not start up the CDSA libraries. 
java.lang.NoClassDefFoundError: Could not initialize class com.apple.crypto.provider.HmacMD5 

應用程序使用Java 1.6.0_15構建和部署到1.6.0_13Mac OS X Server 10.5.8 (9L30)

任何想法運行?

乾杯

城野

Build Java version 
java version "1.6.0_13" 
Java(TM) SE Runtime Environment (build 1.6.0_13-b03-211) 
Java HotSpot(TM) 64-Bit Server VM (build 11.3-b02-83, mixed mode) 

Deployed Jave version 
java version "1.6.0_15" 
Java(TM) SE Runtime Environment (build 1.6.0_15-b03-226) 
Java HotSpot(TM) 64-Bit Server VM (build 14.1-b02-92, mixed mode) 

Full stack trace: 

java.lang.NoClassDefFoundError: Could not initialize class com.apple.crypto.provider.HmacMD5 
     at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
     at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1881) 
     at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1782) 
     at java.lang.Runtime.loadLibrary0(Runtime.java:823) 
     at java.lang.System.loadLibrary(System.java:1047) 
     at com.apple.crypto.provider.HmacCore.<clinit>(HmacCore.java:26) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at java.lang.Class.newInstance0(Class.java:355) 
     at java.lang.Class.newInstance(Class.java:308) 
     at java.security.Provider$Service.newInstance(Provider.java:1221) 
     at javax.crypto.Mac.a(DashoA13*..) 
     at javax.crypto.Mac.init(DashoA13*..) 
     at com.sun.net.ssl.internal.ssl.MAC.<init>(MAC.java:94) 
     at com.sun.net.ssl.internal.ssl.CipherSuite$MacAlg.newMac(CipherSuite.java:429) 
     at com.sun.net.ssl.internal.ssl.Handshaker.newWriteMAC(Handshaker.java:407) 
     at com.sun.net.ssl.internal.ssl.SSLSocketImpl.changeWriteCiphers(SSLSocketImpl.java:1791) 
     at com.sun.net.ssl.internal.ssl.Handshaker.sendChangeCipherSpec(Handshaker.java:607) 
     at com.sun.net.ssl.internal.ssl.ClientHandshaker.sendChangeCipherAndFinish(ClientHandshaker.java:868) 
     at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:794) 
     at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:226) 
     at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516) 
     at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454) 
     at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884) 
     at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112) 
     at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:623) 
     at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59) 
     at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) 
     at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123) 
     at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:506) 
     at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114) 
     at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096) 
     at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398) 
     at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) 
     at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) 
     at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323) 

回答

1

你的錯誤並不意味着類是找不到的。 「無法初始化class com.apple.crypto.provider.HmacMD5」意味着靜態初始化塊(static { ... })導致了異常。你有訪問MmacMD5的源代碼嗎?

我們曾經遇到類似的問題,因爲X服務器不可訪問導致靜態塊失敗 - 但只有當服務器沒有啓用X轉發的SSH會話可用時。 (該班正在註冊字體以便以後用它們來渲染圖像)

0

正如「sfussenegger」所寫,它與靜態{}方法有關。如果您找不到有用的文檔或源代碼,請嘗試使用反編譯器(如果該許可證當然沒問題)。我看到加密庫的問題也與安全隨機產生的種子有關(系統暫停,直到獲得足夠的隨機性)。也許這樣的事情是問題的一部分。

無論如何,如果你不能擺脫問題,仍然有充氣城堡作爲自由或IAIK作爲商業選擇。不多,但也許有幫助...