java.lang.ClassFormatError: Illegal UTF8 string in constant pool in class file Server/Request
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的更多相关文章
- java.lang.ClassFormatError: Unknown constant tag 0 in class file
在通过文件上传之后,运行java程序,突然发现这么一个错误:java.lang.ClassFormatError: Unknown constant tag 0 in class file,通过网上查 ...
- java.lang.ClassFormatError: Extra bytes at the end of class file
在精简JRE过程中,将rt.jar中类通过FileInputStream,FileOutputStream进行拷贝操作出错: java.lang.ClassFormatError: Extra byt ...
- 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: ...
- java.lang.ClassFormatError
Error occurred during initialization of VMjava.lang.ClassFormatError: Unknown constant tag 26 in cla ...
- 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 ...
- java.lang.IllegalArgumentException: Illegal character in query at index ...解决办法
今天在写智能机器人问答实现的时候遇到了一个问题,就是我发送消息不能输入空格 给我报了一个错误java.lang.IllegalArgumentException: Illegal character ...
- 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 ...
- 阿里巴巴 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 ...
- java.lang.IllegalArgumentException: Illegal character in query at index 261
在BaseFragment中使用了LoadingPage,而LoadingPage的联网加载使用的是AsyncHttpClient.一直报java.lang.IllegalArgumentExcept ...
随机推荐
- C++关键字(static-register-atuo-extern-volatile-const)
转自:http://blog.163.com/fengxuedong_fxd/blog/static/71926306201173151854964/ 下面关于C++的几个关键字是经常和我们打交道的而 ...
- HDU 1698 Just a Hook 区间更新 lazy标记
lazy标记 #include <iostream> #include <cstdio> #include <cstring> #include <sstre ...
- algorithm@ find kth smallest element in two sorted arrays (O(log n time)
The trivial way, O(m + n): Merge both arrays and the k-th smallest element could be accessed directl ...
- A Tour of Go Exercise: Fibonacci closure
Let's have some fun with functions. Implement a fibonacci function that returns a function (a closur ...
- A Tour of Go Function values
Functions are values too. 在函数式语言中中函数都是变量,比如在javascript中 package main import ( "fmt" " ...
- java properties 文件中书写相对路径
工程src下的properties 文件要引用发布到D:\work\apache-tomcat-7.0.52\webapps\项目名称\certs这个地址下的文件,properties 中的文件路径应 ...
- ASP.NET 学习的总结
应用程序域 使用.Net建立的可执行程序*.exe,并没有直接承载到进程当中,而是承载到应用程序域(AppDomain)当中.应用程序域是.Net引入的一个新概念,它比进程所占用的资源要少,可以被看做 ...
- java 实现视频转换通用工具类:视频相互转换-Ffmpeg(三)
java 实现视频转换通用工具类:获取视频元数据信息(一) java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二) 这节主要是ffmpeg的相关方法封装,在实际调用中主要使用f ...
- Windows Server 2012网卡Teaming模式
成组模式: Switch-independent(交换机独立): 这是配置时的默认值,此模式不要求交换机参与组合配置,由于独立模式下的交换机不知道网卡是主机上组合一部分,teaming组中的网卡可以连 ...
- 逗号分隔字符串转换为一张表--解决查询in(逗号分隔字符串)出错问题
CREATE PROCEDURE [dbo].[Pro_TEST] AS BEGIN ) ) SET @split=',' SET @c='025,023,014,015' )) ) BEGIN IN ...