How 'bout a custom RequestProcessor: public void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); super.process(request, response); }
Quoting [EMAIL PROTECTED]: > Hello to all. > > I've been using Struts for a while now, with great success! Thanks to the > developers! However, I've found a bit of a problem using Struts 1.1 with > Dynamo 5.6.1 Apologies in advance if this is more appropriate to the user > mailing list - I wasn't sure! > > Dynamo implements J2EE 1.2, which includes the Servlet 2.2 specs, which I > gather can sometimes be a bit vague on the subject of web application > context class loaders. I've been trying to get the tag libraries working > correctly. When using say a <bean:define> tag, an exception is thrown when > trying to instantiate the page by dynamo: > > [ERROR] MessageResourcesFactory - -MessageResourcesFactory.createFactory > <java.lang.ClassNotFoundException: > org.apache.struts.util.PropertyMessageResourcesFactory>java.lang.ClassNotFoundException: > > org.apache.struts.util.PropertyMessageResourcesFactory > at java.net.URLClassLoader$1.run(URLClassLoader.java:200) > at java.security.AccessController.doPrivileged(Native Method) > at java.net.URLClassLoader.findClass(URLClassLoader.java:188) > at java.lang.ClassLoader.loadClass(ClassLoader.java:299) > at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:286) > at java.lang.ClassLoader.loadClass(ClassLoader.java:255) > at > org.apache.struts.util.RequestUtils.applicationClass(RequestUtils.java:182) > at > org.apache.struts.util.MessageResourcesFactory.createFactory(MessageResourcesFactory.java:192) > at > org.apache.struts.util.MessageResources.getMessageResources(MessageResources.java:576) > at > org.apache.struts.util.RequestUtils.<clinit>(RequestUtils.java:138) > at > org.apache.struts.util.MessageResourcesFactory.createFactory(MessageResourcesFactory.java:192) > at > org.apache.struts.util.MessageResources.getMessageResources(MessageResources.java:576) > at > org.apache.struts.taglib.bean.DefineTag.<clinit>(DefineTag.java:88) > at java.lang.Class.newInstance0(Native Method) > at java.lang.Class.newInstance(Class.java:237) > at > atg.servlet.pagecompile.taglib.TagPool.checkOut(TagPool.java:111) > at > atg.servlet.pagecompile.taglib.TagManager.checkOutTag(TagManager.java:210) > (Extra lines cropped, and are all ATG classes) > > Looking through the code for RequestUtils.applicationClass() the code > seems to try and get the current context loader: > > // Look up the class loader to be used > ClassLoader classLoader = > Thread.currentThread().getContextClassLoader(); > if (classLoader == null) { > classLoader = RequestUtils.class.getClassLoader(); > } > > // Attempt to load the specified class > return (classLoader.loadClass(className)); > > However, looking at the trace, I'm guessing that the getContextClassLoader > method returns the system-wide class loader (which has no knowledge of the > WEB-INF/lib contents). One fix which seems to work (at least here) is just > to comment that code and replace with > > return Class.forName(className); > > The main question is whether this fix is appropriate - and whether there > are any other workarounds or fixes available - presumably I would have to > put this in all the other classes where the code using the > getContextClassLoader was? I'm guessing that there was a good reason not > to use Class.forName anyway (if so, I'd be interested to know why?) > > thanks in advance, > > Steve. -- Kris Schneider <mailto:[EMAIL PROTECTED]> D.O.Tech <http://www.dotech.com/> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]