我正在开发一个在 Windows 操作系统中使用 servlet 和 jsp 的 Web 应用程序,使用 Java 1.6.0_07 和 tomcat 6.0.45 版本。通过从我的系统中获取生成的类文件并尝试在安装了 Java 1.6 和 tomcat 6.0 版本的 solaris 服务器上运行它,它抛出了休闲异常
May 20, 2016 1:41:46 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet IpsmscRamtIsdMsgStatisticsServlet
java.lang.ClassFormatError: Unknown constant tag 58 in class file com/abc/servlet/operator/ramt/statistics/isdstats/IpsmscRamtIsdMsgStatisticsServlet
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:1815)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:869)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1322)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1201)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1034)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:757)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:130)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.valves.FastCommonAccessLogValve.invoke(FastCommonAccessLogValve.java:495)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:662)
当我用谷歌搜索相同的内容时,他们中的一些人告诉我“这可能是因为 java 文件已损坏”,但相同的文件在我的系统和 linux 系统(具有 Java 1.6 和 tomcat 6.0 版本)中工作正常
任何帮助将不胜感激。
最佳答案
如错误所述,目标机器上的 JRE Solaris 无法解码类文件版本。参见 JLS 参见 Java 虚拟机规范的 §4.4: https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html
您也可以尝试运行 javap -verbose <class>
在 solaris 机器上。
如果它工作并返回正确的输出意味着 Solaris jre 能够正确读取类文件。
如果不行,请尝试重新编译 java 文件或尝试在 solaris 上使用不同的 java 版本。
关于java - 类格式错误 : Unknown constant tag 58 in class file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37346417/