You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by "Douglas E. Hornig" <do...@hornig.net> on 2001/12/04 17:18:54 UTC

java.lang.ClassFormatError: Illegal Variable name ""

There seems to be a problem with the Tomcat 4.0.1 class loader.  I have figured out how to get around it, but am posting it in case anyone else runs into it, or someone wants to fix it.

I have an application that works fine with Tomcat 3.2.x but when I ran it under 4.0.1 I would get a ClassFormatError (see below).  I tried recompiling my jar file, putting it in all sorts of different directories, using class files instead of a jar, running with IBM Java 1.3 and Sun J2DSK 1.3.1 under Linux, and Sun J2SDK 1.3.1 on NT--no difference.  The solution turned out to be to edit one of my methods so it did not return from the middle of a synchronized block (also see below).

I apologize for using bandwidth if this has been covered before.
Doug

javax.servlet.ServletException: Error instantiating servlet class org.hitchcock.cismt.CisServlet
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:829)
	at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:615)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:201)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2344)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:462)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:163)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1011)
	at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1106)
	at java.lang.Thread.run(Thread.java:484)


root cause 

java.lang.ClassFormatError: org/hitchcock/cismt/CisMtStats (Illegal Variable name "")
	at java.lang.ClassLoader.defineClass0(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:486)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:111)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:248)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at org.apache.catalina.loader.StandardClassLoader.findClass(StandardClassLoader.java:671)
	at org.apache.catalina.loader.StandardClassLoader.loadClass(StandardClassLoader.java:1090)
	at org.apache.catalina.loader.StandardClassLoader.loadClass(StandardClassLoader.java:989)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)
	at java.lang.Class.newInstance0(Native Method)
	at java.lang.Class.newInstance(Class.java:237)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:820)
	at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:615)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:201)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2344)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:462)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:163)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1011)
	at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1106)
	at java.lang.Thread.run(Thread.java:484)

I had to change this method:

	private static HashMap statsTab = new HashMap();

	public static CisMtStats getStats( String env ) {

		synchronized( statsTab ) {
			// Get the stats from the table for the environment:
			CisMtStats stats = (CisMtStats) statsTab.get( env );

			// No stats?  Make some:
			if( stats == null ) {
				statsTab.put( env, stats = new CisMtStats() );
			}

			return stats;
		}
	}

to this:

	public static CisMtStats getStats( String env ) {

		CisMtStats stats;

		synchronized( statsTab ) {
			// Get the stats from the table for the environment:
			stats = (CisMtStats) statsTab.get( env );

			// No stats?  Make some:
			if( stats == null ) {
				statsTab.put( env, stats = new CisMtStats() );
			}
		}

		return stats;
	}

I don't understand it, but there you are.

--
To unsubscribe:   <ma...@jakarta.apache.org>
For additional commands: <ma...@jakarta.apache.org>
Troubles with the list: <ma...@jakarta.apache.org>