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. JPEG最优压缩参数试验【光影魔术手VS Image Optimizer】

                                          样本数量:100张(1MB-2.6MB)旅游照     样本大小:157MB 156.44      样本尺寸:3M(204 ...

  2. git和repo入门

    版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文 ...

  3. 编写安全代码:小心volatile的原子性误解

    本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载.但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途. ============ ...

  4. 自编译安装nginx

    1. 下载nginx,并解压 http://nginx.org/ 2. 下载health check模块 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 1 ...

  5. HW6.28

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  6. leetcode@ [263/264] Ugly Numbers & Ugly Number II

    https://leetcode.com/problems/ugly-number/ Write a program to check whether a given number is an ugl ...

  7. HDU-4694 Professor Tian 概率DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4649 题意:给一个位运算的表达式,每个运算符和其后的运算数有一定概率不计算,求最后表达式的期望. 因为 ...

  8. [Tool] 使用CodeMaid自動程式排版 - 摘自网络

    前言 「使用StyleCop驗證命名規則」這篇文章,指引開發人員透過StyleCop這個工具,來自動檢驗專案中產出的程式碼是否合乎命名規則. [Tool] 使用StyleCop驗證命名規則 但是在專案 ...

  9. AVR ATMEGA8 串口USART

    avr串口配置很简单,配置就几个寄存器就可以进收发: 但有几点要搞明白的是: 1.串口一但被配置成功IO功能自动被占用,这点与LPC或STM8/32不同(需要寄存配置): 2.没有专门的串口开起或闭关 ...

  10. Sql sp_executesql 参数问题

    DECLARE @name NVARCHAR(30), @sql NVARCHAR(300)set @sql= N'SELECT TOP 1 @n=EmpName from dbo.Emp' exec ...