我的任务是让旧的Java代码在较新的环境中运行,而让Tomcat(8.0.32)启动组件时遇到问题。在catalina.out日志文件中,我得到以下信息:
import java.util.HashSet;
import java.util.Set;
public class MyClass {
abstract class Node
{
public abstract String getCode();
// public abstract boolean isAttribute();
}
public class Attribute extends Node
{
private String name;
public Attribute(String name)
{
this.name=name;
}
public String getCode()
{
return name;
}
}
public class Expression extends Node
{
private String name;
private Set<Attribute> arg1 = new HashSet<Attribute>();
private Set<Expression> arg2 = new HashSet<Expression>();
private String op;
public Expression(Set<Attribute> arg1,Set<Expression> arg2, String op)
{
this.arg1=arg1;
this.arg2=arg2;
this.op=" "+op+" ";
}
public String getCode()
{
String result="";
// The correct code need to be written here
return result;
}
public Expression(String name)
{
this.name=name;
}
}
public static void main(String args[]) {
MyClass cl=new MyClass();
cl.run();
}
public void run(){
Attribute x=new Attribute("x");
Expression xpx=new Expression(Set.of(x,x),null,"+");
Expression xpxdx=new Expression(Set.of(x),Set.of(xpx),"/");
System.out.println(xpxdx.getCode());
}
}
看来Tomcat试图解压缩某些东西,但失败了。
我对Java或Tomcat不太熟悉,因此我无法弄清楚导致此失败的原因。有一种通用的方法可以找出导致此问题的原因吗?通常,我会尝试运行有问题的代码并尝试对其进行调试,但是看来运行此代码需要Tomcat环境,而且我找不到问题的根源。
我还知道此代码已在另一个虚拟(生产)服务器中成功运行,其中某些组件较旧。
答案 0 :(得分:0)
它无法提取战争之罐。 如果要检查此选项,请尝试使用tomcat用于解压缩jar的程序或代码解压缩战争的所有库。 或者为tomcat启用完整的堆栈跟踪,以查看完整的日志并识别损坏的jar。 您也可以尝试重建战争。
答案 1 :(得分:0)
问题已解决,谢谢您的贡献。使问题消失所需采取的措施:
问题出在./WEB-INF/lib/xerces.jar中,它已损坏。我对LuisMuñoz的评论链接here很感兴趣。通过将其替换为未损坏的版本,我可以解决此问题。