剖析在WAS 6.1.0.19上碰到/snoop时执行不完整而出现ClassFormatError

简介: 剖析在WAS 6.1.0.19上碰到/snoop时执行不完整而出现ClassFormatError 关键字: WAS Linux 6.1.0.19 snoop ClassFormatError 环境RedHat Linux + WAS 6.1.0.19 部署默认的应用程序 DefaultApplication.ear,访问 /snoop时,出现页面显示不完整,只显示 Servlet Nam

剖析在WAS 6.1.0.19上碰到/snoop时执行不完整而出现ClassFormatError

关键字: WAS Linux 6.1.0.19 snoop ClassFormatError

环境RedHat Linux + WAS 6.1.0.19
部署默认的应用程序 DefaultApplication.ear,访问 /snoop时,出现页面显示不完整,只显示 Servlet Name: 并到 Request Information: 这两项的内容,
然后在页面的源码最下面有一行,虽然源码在最后一行,但是显示却是显示在表格上方,即在 Request Information: 下面
Java代码 复制代码
  1. java.lang.ClassFormatError com/ibm/ws/webcontainer/srt/SRTServletRequest$2 unexpected EOF at offset=1240  


于是只好看此君隐藏在哪个jar里了,通过 JarClassFind 发现在 AppServer/plugins/com.ibm.ws.webcontainer_2.0.0.jar 中。

于是只能通过测试此包是否真的有问题。拷贝一个到另一个目录下,然后执行
Java代码 复制代码
  1. jar xvf com.ibm.ws.webcontainer_2.0.0.jar  

在执行解压的过程当中会出现如下错误:
Java代码 复制代码
  1. java.util.zip.ZipException: invalid entry size (expected 1240 but got 1242 bytes)   
  2.     at java.util.zip.ZipInputStream.readEnd(ZipInputStream.java(Compiled Code))   
  3.     at java.util.zip.ZipInputStream.read(ZipInputStream.java(Compiled Code))   
  4.     at sun.tools.jar.Main.extractFile(Main.java(Compiled Code))   
  5.     at sun.tools.jar.Main.extract(Main.java:718)   
  6.     at sun.tools.jar.Main.run(Main.java:228)   
  7.     at sun.tools.jar.Main.main(Main.java:994)  

只能说明是包坏了,从另一台机器上面执行同样的解压测试,OK,一切正常,那就下载一个过来,覆盖后重新启动之即可。

附Java Doc的解释为:
Java代码 复制代码
  1. public class ClassFormatError extends LinkageError  

当 Java 虚拟机试图读取类文件并确定该文件存在格式错误或无法解释为类文件时,抛出该错误。

Java代码 复制代码
  1. unexpected EOF at offset=1240  
,应当在1240结束,但却没有。

Java代码 复制代码
  1. expected 1240 but got 1242 bytes  
,变多了2个字节,呵呵:)
由于在生产环境,坏的包无法拿出来,放上本机正常包的面目,如下图:



真是见怪不怪了。

正常情况下/snoop接下来应当是显示 Request headers: 相关的内容了。

剖析一下看。。。
Java代码 复制代码
  1. SnoopServlet.java   
  2.                 e = req.getParameterNames();   
  3.                 if ( e.hasMoreElements() )   
  4.                 {   
  5.                         out.println("<h2>Servlet parameters (Single Value style):</h2>");   
  6.                         out.println("<TABLE Border=/"2/" WIDTH=/"65%/" BGCOLOR=/"#DDDDFF/">");   
  7.                         while ( e.hasMoreElements() )   
  8.                         {   
  9.                                 String name = (String)e.nextElement();   
  10.                                 out.println("<tr><td>" + name + "</td><td>" + req.getParameter(name) + "</td></tr>");   
  11.                         }   
  12.                         out.println("</table><BR><BR>");   
  13.                 }  
SRTServletRequest.java
Java代码 复制代码
  1.             public Enumeration getAttributeNames()   
  2.             {   
  3. /* 225*/        if(TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())   
  4. /* 226*/            Tr.debug(tc, "getAttributeNames [" + this + "]");   
  5. /* 228*/        return new Enumeration() {   
  6.   
  7.                     public boolean hasMoreElements()   
  8.                     {   
  9. /* 231*/                return iter.hasNext();   
  10.                     }   
  11.   
  12.                     public Object nextElement()   
  13.                     {   
  14. /* 235*/                return iter.next();   
  15.                     }   
  16.   
  17.                     private Iterator iter;   
  18.   
  19.                        
  20.                     {   
  21. /* 229*/                iter = _srtRequestHelper._attributes.keySet().iterator();   
  22.                     }   
  23.         }  
说明了什么问题?匿名类也是仅在需要的时候才去Load,而不是跟主类一并全Load进去。于是 SnoopServlet可以执行一部分,而后面才出错。
目录
打赏
0
0
0
0
2
分享
相关文章
C#使用外部字体、嵌入字体到程序资源中(Winform)及字体的版权问题
应用程序能够使用一个好的字体,是用户界面很重要的一部分,但是很多字体如果系统没有安装,则需要额外引入,这就涉及到极其重要的字体版权问题,及额外字体的使用和安装。最好的方式应该是将字体嵌入到程序中...
4943 1
C#使用外部字体、嵌入字体到程序资源中(Winform)及字体的版权问题
Winform控件优化之TabControl控件的使用和常用功能
TabControl是一个分页切换(tab)控件,不同的页框内可以呈现不同的内容,将主要介绍调整tab的左右侧显示、设置多行tab、禁用或删除tabpage、隐藏TabControl头部的选项卡等
6386 0
Winform控件优化之TabControl控件的使用和常用功能
小鹏汽车选用阿里云PolarDB,开启AI大模型训练新时代
PolarDB-PG云原生分布式数据库不仅提供了无限的扩展能力,还借助丰富的PostgreSQL生态系统,统一了后台技术栈,极大地简化了运维工作。这种强大的组合不仅提高了系统的稳定性和性能,还为小鹏汽车大模型训练的数据管理带来了前所未有的灵活性和效率。
AI视频监控系统在养老院中的技术实现
AI视频监控系统在养老院的应用,结合了计算机视觉、深度学习和传感器融合技术,实现了对老人体征、摔倒和异常行为的实时监控与分析。系统通过高清摄像头和算法模型,能够准确识别老人的动作和健康状况,并及时向护理人员发出警报,提高护理质量和安全性。
396 14
|
10月前
|
Java根据URL获取文件内容的实现方法
此示例展示了如何安全、有效地根据URL获取文件内容。它不仅展现了处理网络资源的基本技巧,还体现了良好的异常处理实践。在实际开发中,根据项目需求,你可能还需要添加额外的功能,如设置连接超时、处理HTTP响应码等。
697 4
【大数据管理新纪元】EMR Delta Lake 与 DLF 深度集成:解锁企业级数据湖的无限潜能!
【8月更文挑战第26天】随着大数据技术的发展,Apache Spark已成为处理大规模数据集的首选工具。亚马逊的EMR服务简化了Spark集群的搭建和运行流程。结合使用Delta Lake(提供ACID事务保证和数据版本控制)与DLF(加强数据访问控制及管理),可以显著提升数据湖的可靠性和性能。本文通过一个电商公司的具体案例展示了如何在EMR上部署集成Delta Lake和DLF的环境,以及这一集成方案带来的几大优势:增强的可靠性、细粒度访问控制、性能优化以及易于管理的特性。这为数据工程师提供了一个高效且灵活的数据湖平台,简化了数据湖的建设和维护工作。
174 1
|
9月前
|
掌握 SkiaSharp 轻松实现 .NET 跨平台绘图
.NET 框架的发展,我们越来越多地寻求能够在多个平台上无缝运行的应用解决方案。
1479 2
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问