剖析在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可以执行一部分,而后面才出错。
相关文章
|
网络协议 应用服务中间件 nginx
玩转Kubernetes TCP Ingress
如何使用Kubernetes的TCP Ingress
20747 0
|
8月前
|
存储 人工智能 Cloud Native
小鹏汽车选用阿里云PolarDB,开启AI大模型训练新时代
PolarDB-PG云原生分布式数据库不仅提供了无限的扩展能力,还借助丰富的PostgreSQL生态系统,统一了后台技术栈,极大地简化了运维工作。这种强大的组合不仅提高了系统的稳定性和性能,还为小鹏汽车大模型训练的数据管理带来了前所未有的灵活性和效率。
|
11月前
|
机器学习/深度学习 传感器 人工智能
AI视频监控系统在养老院中的技术实现
AI视频监控系统在养老院的应用,结合了计算机视觉、深度学习和传感器融合技术,实现了对老人体征、摔倒和异常行为的实时监控与分析。系统通过高清摄像头和算法模型,能够准确识别老人的动作和健康状况,并及时向护理人员发出警报,提高护理质量和安全性。
668 14
|
数据安全/隐私保护
OAuth 2.0身份验证及授权
8月更文挑战第24天
711 0
|
运维 Kubernetes Cloud Native
还在为多集群管理烦恼吗?OCM来啦!
在云计算领域如果还有人没听过 Kubernetes,就好像有人不知道重庆火锅必须有辣椒。Kubernetes 已经像手机上的 Android,笔记本上的 Windows 一样成为管理数据中心事实上的标准平台了。围绕着 Kubernetes,开源社区构建了丰富的技术生态,无论是 CI/CD、监控运维,还是应用框架、安全反入侵,用户都能找到适合自己的项目和产品。可是,一旦将场景扩展到多集群、混合云环境时,用户能够依赖的开源技术就屈指可数,而且往往都不够成熟、全面。
还在为多集群管理烦恼吗?OCM来啦!
|
存储 canal 消息中间件
数据仓库系列(三)数仓分层的意义价值及如何设计数据分层
数据仓库系列(三)数仓分层的意义价值及如何设计数据分层
1919 0
数据仓库系列(三)数仓分层的意义价值及如何设计数据分层
|
监控 语音技术 异构计算
使用开源的模型(像speech_sambert-hifigan_tts_zhida_zh-cn_16k)进行语音合成任务的推理时,推理速度太慢了,500字大约需要1分钟,为什么会这么慢
使用开源的模型(像speech_sambert-hifigan_tts_zhida_zh-cn_16k)进行语音合成任务的推理时,推理速度太慢了,500字大约需要1分钟,为什么会这么慢
847 2
|
存储 弹性计算 运维
如何正确选择多云架构?
多云是指企业使用两个或更多的公有云 IaaS 供应商。广义来看,混合云也在其范畴。
1072 1
如何正确选择多云架构?
Linux 命令 `chown`:改变文件或目录的所有者
`chown` 是 Linux 中用于改变文件或目录所有者的命令。基本语法是 `chown [选项] 新所有者 文件或目录...`。常用选项包括 `-R` 递归更改、`-c` 显示详细信息和 `-v` 显示详细处理。示例:将 `example.txt` 所有者改为 `user2` 使用 `chown user2 example.txt`;更改目录 `mydir` 及其内容所有者为 `user2` 使用 `chown -R user2 mydir`。注意,通常只有 root 或当前所有者能更改所有者,且需谨慎操作以避免影响权限。
|
应用服务中间件 Shell nginx
win10 nginx设置开机启动 --亲测有效
win10 nginx设置开机启动 --亲测有效
304 0