you're exactly right again. I just checked my project settings, I had to
add catalina.jar to the project libraries to get the class to compile,
but I'd forgotten to prevent it from being deployed, so there was a copy
of catalina.jar in my /WEB-INF/lib, doh!
So I configured it to not be deployed, and deleted the existing jar, so
now I get a new problem, a NoClassDefFoundError on the MemoryUser class,
which is referenced by my code. So now my class doesn't even load!! I
have a feeling someone's gone to a fair bit of trouble to make sure I
can't load this class!
the MemoryUser class is in catalina.jar, which is in the server/lib
folder. would I be right in saying that web application code is barred
from loading any classes from the server/lib directory?
any ideas Peter?
org.codehaus.xfire.XFireRuntimeException: Error invoking
'myapp.service.webservice.ImageService.enumerateLOV(java.lang.String)'.
Nested exception is java.lang.reflect.InvocationTargetException: null
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.codehaus.xfire.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:59)
... elided
at
org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
... elided
at
org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NoClassDefFoundError:
org/apache/catalina/users/MemoryUser
at
myapp.service.webservice.ImageServiceImpl.enumerateLOV(ImageServiceImpl.java:67)
... 31 more
Peter Crowther wrote:
Right. So request.getUserPrincipal() returns a class that's loaded by
one of Tomcat's classloaders. You need to make sure that when you
reference MemoryUser, it's loaded by the same classloader.
Thinking aloud here, so apologies to the more experienced folks in the
community who will have better ideas... Is MemoryUser.class in any of
the jars in your webapp? I'm not entirely sure why there's a second
copy of it, loaded by the webapp's classloader, in the system. I'd
expect the webapp's classloader to be unable to find the class as your
webapp loads and punt the request for the class up the classloader
chain, returning the standard classloader's class. But I may be
misunderstanding Tomcat's classloaders.
- Peter
--
Matthew Kerle
IT Consultant
Canberra, Australia
Mobile: +61404 096 863
Email : [EMAIL PROTECTED]
Web : http://threebrightlights.blogspot.com/
---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]