1. 程式人生 > >如何解決invalid LOC header錯誤的問題

如何解決invalid LOC header錯誤的問題

在eclipse中引入一報表應用,在啟動伺服器時,報錯:

2011-4-12 9:27:08 org.apache.catalina.core.StandardHost start 
資訊: XML validation disabled 
Exception in thread “main” java.lang.InternalError: jzentry == 0, 
jzfile = 503315792, 
total = 4417, 
name = D:\Program Files\reportHome\webapps\demo\WEB-INF\lib\dm.jar, 
i = 2197, 
message = invalid LOC header (bad signature) 
at java.util.zip.ZipFile$3.nextElement(ZipFile.java:429) 
at java.util.zip.ZipFile$3.nextElement(ZipFile.java:415) 
at java.util.jar.JarFile$1.nextElement(JarFile.java:221) 
at java.util.jar.JarFile$1.nextElement(JarFile.java:220) 
at org.apache.catalina.startup.TldConfig.tldScanJar(TldConfig.java:460) 
at org.apache.catalina.startup.TldConfig.execute(TldConfig.java:307) 
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4282) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083) 
at org.apache.catalina.core.StandardHost.start(StandardHost.java:789) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083) 
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478) 
at org.apache.catalina.core.StandardService.start(StandardService.java:480) 
at org.apache.catalina.core.StandardServer.start(StandardServer.java:2313) 
at org.apache.catalina.startup.Catalina.start(Catalina.java:557)

經過 查詢一些網上資料,並從java官網上認定這是一個bug。

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4615343

是由於ZipFile.java在處理經過壓縮的jar檔案的時候會有些問題,如果你的jar檔案沒有經過簽名的話,你可以通過解壓縮的方法來回避這個bug的產生。

例如:jar xf xxx.jar

jar cf0 xxx.jar

所以產生這個問題的原因就是由於dm.jar由於某種原因被破壞了(或許是ZipFile處理過程中會對經過壓縮過的jar檔案進行重新的解壓、壓縮的過程,而在某一次的處理過程被異常中斷或其他原因導致現在的dm.jar不再是之前的dm.jar)。

既然是這樣,最簡單粗暴有效的方法就是從正常的應用中拷貝一個正常的dm.jar過來覆蓋這個被破壞的dm.jar。

替換後,伺服器正常啟動,功能使用正常。