每当我登录我的应用程序时,我都会收到以下异常...
javax.servlet.ServletException: COM /阳光/组织/阿帕奇/ xalan的/内部/ XSLTC / TRAX / TransformerFactoryImpl (不支持的major.minor版本49.0)
这意味着什么?如何解决问题?
答案 0 :(得分:14)
您用于运行.class的JVM与用于编译.class的Java版本不匹配。运行它的JVM是用于编译该类的JVM的早期版本。
如详细here所示,您有一个1.5版本的类,您尝试在早期的JVM上运行。
编辑:WAS 5.1使用JDK 1.4,it would appear。
答案 1 :(得分:7)
您的代码是使用Java 1.5编译的,并且您尝试使用Java 1.4(或更低版本)
运行它解决方案是
a) Run it with Java1.5 ( perhaps using WAS 6+ )
b) Recompile it with Java 1.4
或
c) Recompile it with Java.15 but specifying the -target flag ( javac -target 1.4 .... )
关键是,你试图在1.4 vm
中运行1.5字节码答案 2 :(得分:2)
您有一些使用Java 5功能编译的代码,您尝试在1.4或更早版本的JVM上运行。检查您的JAVA_HOME变量是否指向1.5或更高版本的JDK。
更新:在您的评论中,您说您使用的是WAS 5.1。 WAS 5.1不支持Java 5,从内存中你需要在WAS 6.1上使用Java 5(寻找参考...)
答案 3 :(得分:1)
如果您使用更高版本的JDK为JAVA的次要版本构建类,请使用javac编译器的-source和-target开关。一些客户确实需要Java的次要版本,例如1.4,而你正在用1.6开发。 -source和-target是对这个szenario的补救措施。您可以阅读Alex Buckley关于字节代码与源代码版本控制问题的非常好的paper。
但是由于TransformerFactoryImpl是一个Sun内部类,请检查您的容器的JAVA_HOME,这是特定于容器的。
答案 4 :(得分:1)
当您在使用与最终运行代码的JDK版本不同的JDK版本的计算机中编译代码时,会发生这种情况。 确保在这些不同的框中使用相同的JDK版本。
答案 5 :(得分:0)
使用sudo update-alternatives --config java并设置您可能想要使用的版本。