I personally have not changed any classpath settings. The classes are build
using Eclipse SDK Version 3.1.1 with
the Tomcat plugin from sysdeo (3.1.0.beta).
I have noticed that the NoClassDefFoundError occurs on specific pages but
only the first time
the pages are loaded, everything else within the page works perfectly after
I reload the page.
In every instance that I have issues I'm using a Servlet which in turn makes
use of the ClassFinder,
it first calls a Java file (specific to the current command being run)
followed by a redirection to a Jsp.
As for ClassFileFinder here is the code. I can't find where this code was
from but it was originally found online...
I usually leave credit information at the top but this particuliar class did
not contain any.
public class ClassFileFinder extends ClassLoader
{
List cpath = new LinkedList();
Hashtable loadedClasses = new Hashtable();
public void addFile(File f) {
if(f.isDirectory() || (f.isFile() && f.canRead() &&
f.getName().endsWith(".jar")))
cpath.add(f);
}
public byte[] classData(String className) {
String cname = className.replace('.', File.separatorChar) +
".class";
Iterator it = cpath.iterator();
while(it.hasNext()) {
File f = (File)it.next();
try {
if(f.isDirectory()) {
File cFile = new File(f, cname);
if(cFile.isFile()) {
byte[] buf = new
byte[(int)cFile.length()];
InputStream in = new
FileInputStream(cFile);
int off = 0, l;
while((l = in.read(buf, off,
buf.length - off)) > 0) {
off += l;
if(off >= buf.length)
break;
}
in.read(buf);
in.close();
return buf;
}
} else if (f.isFile()) {
JarFile jar = new JarFile(f);
JarEntry ent = jar.getJarEntry(cname);
if(ent != null) {
byte[] buf = new
byte[(int)ent.getSize()];
int off = 0, l;
InputStream in =
jar.getInputStream(ent);
while((l = in.read(buf, off,
buf.length - off)) > 0) {
off += l;
if(off >= buf.length)
break;
}
in.close();
return buf;
}
}
} catch (IOException e) {
}
}
return null;
}
public Class findClass(String className) throws ClassNotFoundException{
if (loadedClasses.get(className)!=null) {
return Class.forName(className);
}
loadedClasses.put(className, className);
byte[] data = classData(className);
if(data == null)
return getParent().loadClass(className);
else
return defineClass(className,data,0, data.length);
}
}
-----Original Message-----
From: David Smith [mailto:[EMAIL PROTECTED]
Sent: December 7, 2005 7:47 AM
To: Tomcat Users List
Subject: Re: Question concerning java.lang.NoClassDefFoundError:
javax/servlet/ServletContext
> ...and that servlet-api.jar from tomcat is in the path.
You wouldn't happen to be messing with the classpath at all would you?
That will cause headaches. Best advise is to leave the classpath alone
and let tomcat's classloader hierarchy handle finding classes.
Thought 2: Tell me more about this ClassFinder class. It's not a part
of Java's API and I'm wondering if it's not running it's own classloader
independant of tomcat's classloader mechanism.
--David
John Poley wrote:
Thank you for your comments thus far.
I have been unable to solve my problem as well. I even went so far as
to start with a machine with no development tools on it, downloading
just the elements I required, and then trying to redeploy. I am
fairly certain that there are no extra servlet jars anywhere, and that
servlet-api.jar from tomcat is in the path. Still I face the
java.lang.NoClassDefFoundError: javax/servlet/ServletContext error. I
am using java 1.5.0_06 and and a 5.5 server. Well, trying to anyway!
=) I'll place the error information at the very bottom of this email
to avoid pushing down the previous responses too far. Any more ideas
would be appreciated!
----- Original Message ----- From: "Armand Rock" <[EMAIL PROTECTED]>
To: "Tomcat Users List" <users@tomcat.apache.org>
Sent: Tuesday, December 06, 2005 12:44 PM
Subject: RE: Question concerning java.lang.NoClassDefFoundError:
javax/servlet/ServletContext
Hello David,
I included all jar & zip files on my computer, including j2ee.jar and
I'm
still having the problem.
I have just noticed a weird behaviour though, if I try to reload the jsp
right after the jsp fails the first
time it seems to run without throwing the exception. If I restart
Tomcat
and try again the problem starts
again. I could get this to work in theory by forcing it to run
through the
code once on startup
but I shouldn't have to do that and I honestly would prefer getting
it to
work as it should.
-----Original Message-----
From: David Smith [mailto:[EMAIL PROTECTED]
Sent: December 6, 2005 11:57 AM
To: Tomcat Users List
Subject: Re: Question concerning java.lang.NoClassDefFoundError:
javax/servlet/ServletContext
I take it you also included j2ee.jar in that search?
--David
Armand Rock wrote:
Hi,
I'm getting the same error. I searched my entire computer for any
jar/zip
files containing javax.servlet.ServletContext
and renamed all of them to ".original" so that they wouldn't be read
by the
JVM. I did this to all the files except for the file
common/lib/servlet-api.jar
I'm still getting the problem.
I'm using java version 1.4.2_10
The code i'm using used to work under Orion version 1.4.5 (I'm now
using
Tomcat 5.5)
The code that eventually throws the exception is basically:
ClassFinder classFinder = new ClassFinder();
classFinder.addFile("/opt/classes/com/canlink/commands/");
Class usrClass =
classFinder.findClass("com.canlink.commands.TestClass");
This line is what throws the exception:
Method setCmdLog = usrClass.getMethod("setCmdLog", new Class[]
{Boolean.class});
The stack trace is:
SEVERE: Servlet.service() for servlet RunCmd threw exception
java.lang.NoClassDefFoundError: javax/servlet/ServletContext
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at com.canlink.commands.RunCmd.service(RunCmd.java:240)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicatio
n
FilterChain.java:252)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterC
h
ain.java:173)
at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher
.
java:672)
at
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDi
s
patcher.java:463)
at
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatc
h
er.java:398)
at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatche
r
.java:301)
at org.apache.jsp.web.Login_jsp._jspService(Login_jsp.java:67)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:
3
22)
at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicatio
n
FilterChain.java:252)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterC
h
ain.java:173)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.j
a
va:213)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.j
a
va:178)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:12
6
)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:10
5
)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.jav
a
:107)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868)
at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.process
C
onnection(Http11BaseProtocol.java:663)
at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.ja
v
a:527)
at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerW
o
rkerThread.java:80)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.ja
v
a:684)
at java.lang.Thread.run(Unknown Source)
-----Original Message-----
From: Tim Funk [mailto:[EMAIL PROTECTED]
Sent: December 6, 2005 6:30 AM
To: Tomcat Users List
Subject: Re: Question concerning java.lang.NoClassDefFoundError:
javax/servlet/ServletContext
See - http://tomcat.apache.org/faq/classnotfound.html
Odds are you have your own servlet-api.jar somewhere in the webapp or
system
classpath and that is conflicting with the one in common/lib
(installed by
tomcat)
-Tim
John Poley wrote:
Please forgive my intrusion if this is not the proper place to post a
questoon of this sort. I am new to servlets, and am working on my
first
deployment- but I am running in to a problem that I can't find a
solution
to. I have installed Tomcat 5.5 and am using Eclipse (as well as a
tomcat
plugin) to manage my project. A colleague of mine sent me a war
file of
out working projected, which I imported to my IDE. I start tomcat,
which
seems to load properly, and attempt to run the project on the
server- where
I am faced with the following:
javax.servlet.ServletException: Servlet.init() for servlet
RequestTranslator threw exception
root cause
java.lang.NoClassDefFoundError: javax/servlet/ServletContext
java.lang.Class.getDeclaredConstructors0(Native Method)
java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
java.lang.Class.getConstructor0(Unknown Source)
java.lang.Class.getConstructor(Unknown Source)
freemarker.template.Configuration.setServletContextForTemplateLoading(Confi
g
uration.java:331)
verkoopen.boundary.UserInterfaceOutput.<init>(UserInterfaceOutput.java:31)
verkoopen.boundary.RequestTranslator.init(RequestTranslator.java:25)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:10
5
)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.process
C
onnection(Http11BaseProtocol.java:663)
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.ja
v
a:527)
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerW
o
rkerThread.java:80)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.ja
v
a:684)
java.lang.Thread.run(Unknown Source)
I am using the most recent J2RE 5 and I am certain that Tomcat's
servlet-api.jar is within my application's class path. I am not
sure why
the source cannot be found. Any helpin locating my problem would be
greatly
appreciated, and I would be happy to prove more information if
needed (I'm
not entirely sure what would be helpful). And again, I am sorry if
this is
not the place for this kind of question!Happy coding!John
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
INFO: Server startup in 1891 ms
Dec 6, 2005 9:59:25 PM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
java.lang.NoClassDefFoundError: javax/servlet/ServletContext
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2328)
at java.lang.Class.getConstructor0(Class.java:2640)
at java.lang.Class.getConstructor(Class.java:1629)
at
freemarker.template.Configuration.setServletContextForTemplateLoading(Config
uration.java:331)
at
verkoopen.boundary.UserInterfaceOutput.<init>(UserInterfaceOutput.java:31)
at verkoopen.boundary.RequestTranslator.init(RequestTranslator.java:25)
at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:11
05)
at
org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:757)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:130)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:178)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126
)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105
)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:107)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processC
onnection(Http11BaseProtocol.java:667)
at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.jav
a:527)
at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWo
rkerThread.java:80)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav
a:684)
at java.lang.Thread.run(Thread.java:595)
Dec 6, 2005 9:59:25 PM org.apache.catalina.core.StandardWrapperValve
invoke
SEVERE: Allocate exception for servlet RequestTranslator
java.lang.NoClassDefFoundError: javax/servlet/ServletContext
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2328)
at java.lang.Class.getConstructor0(Class.java:2640)
at java.lang.Class.getConstructor(Class.java:1629)
at
freemarker.template.Configuration.setServletContextForTemplateLoading(Config
uration.java:331)
at
verkoopen.boundary.UserInterfaceOutput.<init>(UserInterfaceOutput.java:31)
at verkoopen.boundary.RequestTranslator.init(RequestTranslator.java:25)
at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:11
05)
at
org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:757)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:130)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:178)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126
)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105
)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:107)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processC
onnection(Http11BaseProtocol.java:667)
at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.jav
a:527)
at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWo
rkerThread.java:80)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav
a:684)
at java.lang.Thread.run(Thread.java:595)
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]