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]

Reply via email to