如何解决invalid LOC header错误的问题 - 润乾报表集成

在Eclipse启动服务器时遇到'invalid LOC header (bad signature)'错误,原因是jar文件可能损坏或未签名。可以通过解压再压缩jar文件或者替换正常的jar来解决问题。通过替换dm.jar,成功解决了服务器启动问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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。

替换后,服务器正常启动,功能使用正常。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值