Linux服务器上,将本地编译好的文件上传后,Tomcat启动时报错:

Exception in thread "Thread-2" java.lang.ClassFormatError:
Illegal UTF8 string in constant pool in class file Server/Request
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:873)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1326)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1205)
at Server.Test.<init>(Test.java:13)
at Server.HttpServer.startServer(HttpServer.java:80)
at Server.HttpServer.run(HttpServer.java:27)
at java.lang.Thread.run(Thread.java:662)

看到这个报错我特别诧异,根据异常提示,Server包下的Request类中某个常量池常量不是合法的UTF-8字符常量

通过异常栈的信息可以看出这是一个类加载器加载类文件过程中(WebappClassLoader),解析class文件时抛出的异常,问题的原因是class文件的格式不符合定义,导致文件解析失败(在Test对象的初始化方法中会首先初始化Request对象,所以可以在异常栈中看到Test.<init>)

Test test = new Test(socket);
Thread t = new Thread(test);
t.start();
public Test(Socket socket) throws Exception{
this.socket = socket;
request = new Request();
}

这样就定位了问题的原因出现在Request类的class文件上,使用javap命令分析一下这个文件

[hadoop@hadoop Server]# javap -verbose Request
Error: error while reading constant pool for Request: unexpected tag at #8: 110

这样就确定了服务器上的这个类文件就是有问题的:常量池中的第8个常量无法解析

本地运行时这个类是没有问题的,那么本地编译的Request.class文件肯定是没问题的,虽然Linux服务器上用的是JDK1.6_45_x64而我本地使用的JDK1.5_15_x86,我认为问题的原因不在于JDK的版本,因为编译版本小于运行版本

在本地使用javap命令查看编译后的文件

E:\Users\...>javap -verbose Request > e:\1.txt

看看1.txt文件中保存的解析结果,常量池中的第八个常量也是没有问题的:

Compiled from "Request.java"
public class Server.Request extends java.lang.Object
SourceFile: "Request.java"
minor version: 0
major version: 49
Constant pool:
const #1 = class #2; // Server/Request
const #2 = Asciz Server/Request;
const #3 = class #4; // java/lang/Object
const #4 = Asciz java/lang/Object;
const #5 = Asciz CRLF;
const #6 = Asciz Ljava/lang/String;;
const #7 = Asciz ConstantValue;
const #8 = String #9; // \r\n
......

那么就确定了问题发生在本地文件上传至服务器的过程中

使用rz -b命令代替rz命令后,Tomcat运行正常

java.lang.ClassFormatError: Illegal UTF8 string in constant pool in class file Server/Request的更多相关文章

  1. java.lang.ClassFormatError: Unknown constant tag 0 in class file

    在通过文件上传之后,运行java程序,突然发现这么一个错误:java.lang.ClassFormatError: Unknown constant tag 0 in class file,通过网上查 ...

  2. java.lang.ClassFormatError: Extra bytes at the end of class file

    在精简JRE过程中,将rt.jar中类通过FileInputStream,FileOutputStream进行拷贝操作出错: java.lang.ClassFormatError: Extra byt ...

  3. HTTP错误:java.lang.IllegalArgumentException: Illegal character in scheme at index 0: http://xxxxxx

    读取T卡文件里的域名,HTTP请求出现如下错误 java.lang.IllegalArgumentException: Illegal character in scheme at index 0: ...

  4. java.lang.ClassFormatError

    Error occurred during initialization of VMjava.lang.ClassFormatError: Unknown constant tag 26 in cla ...

  5. java.lang.ClassFormatError Duplicate field name&signature in class file XXXXXX【转】

    本文转载自:https://blog.csdn.net/ylchou/article/details/7739742 2012-7-5 15:06:25org.apache.catalina.core ...

  6. java.lang.IllegalArgumentException: Illegal character in query at index ...解决办法

    今天在写智能机器人问答实现的时候遇到了一个问题,就是我发送消息不能输入空格 给我报了一个错误java.lang.IllegalArgumentException: Illegal character ...

  7. Exception in thread "main" java.lang.IllegalArgumentException: Illegal character in query at index 189......

    Exception in thread "main" java.lang.IllegalArgumentException: Illegal character in query ...

  8. 阿里巴巴 fastjson-1.2.12.jar json解析异常java.lang.ClassFormatError: Invalid method Code length 66865 in class file com/alibaba/fastjson/serializer/ASMSerializer_6_UserKdlb

    承接上篇:fastjson反序列化LocalDateTime失败的问题java.time.format.DateTimeParseException: Text '2019-05-24 13:52:1 ...

  9. java.lang.IllegalArgumentException: Illegal character in query at index 261

    在BaseFragment中使用了LoadingPage,而LoadingPage的联网加载使用的是AsyncHttpClient.一直报java.lang.IllegalArgumentExcept ...

随机推荐

  1. selenium在chrome上运行报 Element is not clickable at point (1096, 26)

    Firefox上正常运行的脚本在chrome上提示Element is not clickable at point (1096, 26).分析原因,首先肯定不是因为页面元素不存在而无法点击.也不是要 ...

  2. <转>SpringMVC与Struts2 比较总结

    原链接:http://blog.csdn.net/chenleixing/article/details/44570681 个人整理: 1.级别不同:SpringMVC :方法  Struts是 类级 ...

  3. jira破解

    JIRA是一个优秀的问题(or bugs,task,improvement,new feature )跟踪及管理软件.    它由Atlassian开发,采用J2EE技术.它正被广泛的开源软件组织,以 ...

  4. git http方式时保存密码

    一直使用ssh方式,但是git@osc的ssh只能pull,不能push  - -|||    htts方式保存密码老是忘记,每次提交代码都要输入密码烦死了.找到文章备忘: 转自:http://git ...

  5. RecyclerView设置verticalSapcing等

    RecyclerView没有像GridView那样有提供verticalSpacing属性,上StackOverflow找到了一种替代方法,代码如下 public class SpacesItemDe ...

  6. 教程-Delphi编译就报毒

    这几天都在忙专周实验,今天用到delphi,一到编译时nod32就报毒,编译空文件也报毒,上网查了资料才明白,是编译文件被感染了,生成软件就会报毒.把自己找到的资料分享如下:   重新编译时,生成的e ...

  7. 教程-Delphi第三方控件安装卸载指南

    1 只有一个DCU文件的组件.DCU文件是编译好的单元文件,这样的组件是作者不想把源码公布.一般来说,作者必须说明此组件适合Delphi的哪种版本,如果版本不对,在安装时就会出现错误.也正是因为没有源 ...

  8. Property cannot be found on forward class object?

    I have a UIView and I'm trying to set its layer properties. self.colorSwatch = [[UIView alloc] initW ...

  9. 安装Python

    因为Python是跨平台的,它可以运行在Windows.Mac和各种Linux/Unix系统上.在Windows上写Python程序,放到Linux上也是能够运行的. 要开始学习Python编程,首先 ...

  10. hdu 5585 Numbers【大数+同余定理】

    Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...