如何解決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。
替換後,伺服器正常啟動,功能使用正常。