@ZEAL Blog·厉
We stand alone,
TOGETHER.

ZipFile的invalid LOC header错误

Posted by zeal on 2005-06-29 16:58 , 3181 characters |  + 1 - 0   English
转载请保留本行原始出处声明信息 : http://www.zeali.net/entry/106 MaDe1nZEAL
标签 ( JAVA/C++ ):  ,  , 
今天服务器上跑的好好的Weblogic突然罢工,所有的jsp都显示编译错误。这还了得,赶紧查资料解决问题。

Weblogic错误信息如下:

Compilation of '/weblogic/server/bin/myserver/.wlnotdelete/pub_30829871/jsp_servlet/__login.java' failed:
--------------------------------------------------------------------------------
 (Failed to parse compiler output. See full output below).
--------------------------------------------------------------------------------
Full compiler error(s):
An exception has occurred in the compiler (1.4.2_04). Please file a bug at the Java Developer Connection (
http://java.sun.com/cgi-bin/bugreport.cgi)  after checking the Bug Parade for duplicates. Include your program and the following diagnostic in your report.  Thank you.
java.lang.InternalError: jzentry == 0,
 jzfile = 1293945432,
 total = 16327,
 name = /weblogic/server/lib/weblogic.jar,
 i = 13901,
 message = invalid LOC header (bad signature)
    at java.util.zip.ZipFile$2.nextElement(ZipFile.java:321)
    at com.sun.tools.javac.v8.code.ClassReader.openArchive(ClassReader.java:975)
    at com.sun.tools.javac.v8.code.ClassReader.list(ClassReader.java:1218)
    at com.sun.tools.javac.v8.code.ClassReader.listAll(ClassReader.java:1339)
    at com.sun.tools.javac.v8.code.ClassReader.fillIn(ClassReader.java:1359)
    at com.sun.tools.javac.v8.code.ClassReader.complete(ClassReader.java:1052)
    at com.sun.tools.javac.v8.code.Symbol.complete(Symbol.java:372)
    at com.sun.tools.javac.v8.comp.Enter.visitTopLevel(Enter.java:467)
    at com.sun.tools.javac.v8.tree.Tree$TopLevel.accept(Tree.java:390)
    at com.sun.tools.javac.v8.comp.Enter.classEnter(Enter.java:442)
    at com.sun.tools.javac.v8.comp.Enter.classEnter(Enter.java:456)
    at com.sun.tools.javac.v8.comp.Enter.complete(Enter.java:596)
    at com.sun.tools.javac.v8.comp.Enter.main(Enter.java:582)
    at com.sun.tools.javac.v8.JavaCompiler.compile(JavaCompiler.java:331)
    at com.sun.tools.javac.v8.Main.compile(Main.java:569)
    at com.sun.tools.javac.Main.compile(Main.java:36)
    at com.sun.tools.javac.Main.main(Main.java:27)

一开始怀疑是JAVA_HOME设置得不对,检查之后发现没问题。而且错误信息里面显示的jdk版本是1.4.2_04没错。于是求救于google,总算找到了线索。

amorrow@earthlink.net  认为这是jdk本身的一个bug,ZipFile.java在处理经过压缩的jar文件的时候会有些问题,如果你的jar文件没有经过签名的话,你可以通过解压缩的方法来回避这个bug的产生:

jar xf weblogic.jar

jar cf0 weblogic.jar

另外从 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4615343 可以看到,这个问题的确是一个bug,遗憾的是目前这个bug的状态仍然是In progress, bug

不管怎么样,问题的结论应该就是这个weblogic.jar由于某种原因被破坏了(或许是ZipFile处理过程中会对经过压缩过的jar文件进行重新的解压、压缩的过程,而在某一次的处理过程被异常中断或其他原因导致现在的weblogic.jar不再是之前的weblogic.jar)。

既然是这样,最简单粗暴有效的方法就是从其他服务器上拷贝一个正常的weblogic.jar过来覆盖这个被破坏的weblogic.jar。马上操作,果然Weblogic恢复了正常。

MassonJ  说可以通过命令 zip -FF weblogic.jar 来修复受损的jar文件(this is the zip which comes with Debian Linux, "This is Zip 2.3 (November 29th 1999), by Info-ZIP."),不过我没有实际去测试。

奇怪的是两个weblogic.jar从字节数来看是一模一样的,真不知道是那根筋出现了问题。

Last Modified on 2007-05-25 17:28
1 条评论:
- Blacksmith2006-07-05 10:59
正好碰到相似的问题,果然覆盖了就好了。谢谢!
Since 2005.04.27  梦想 就像鸡蛋 要么孵化 要么臭掉RSS Feed (Entries) | Back To Home | @ZEAL | 沪ICP备05024379号