[ http://jira.jboss.com/jira/browse/JBAS-1602?page=comments#action_12316635 ] Scott M Stark commented on JBAS-1602: -------------------------------------
I have the JspServlet patched such that a custom Options can be specified, but a problem I'm seeing is that TagLibraryInfoImpl will not resolve a file outside of the war base directory. If the path returned by getLocation() is absolute this just results in an invalid file. However, a jar uri is resolved regardless of where it is located so there is an inconsistency in how tlds are resolved. I was tyring to load the shared tlds from the jbossweb-tomcat55.sar/conf/tlds directory. If the uri is converted into a relative path with respect to the war this works in terms of finding the resource, but the compiler's check for out of date dependencies fails as it expects a URL: 20:34:48,937 INFO [STDOUT] java.net.MalformedURLException: Path ../jbossweb-tomcat55.sar/conf/tlds/myfaces_core.tld/ does not start with a "/" character 20:34:48,937 INFO [STDOUT] at org.apache.catalina.core.ApplicationContext.getResource(ApplicationContext.java:471) 20:34:48,937 INFO [STDOUT] at org.apache.catalina.core.ApplicationContextFacade.getResource(ApplicationContextFacade.java:178) 20:34:48,937 INFO [STDOUT] at org.apache.jasper.JspCompilationContext.getResource(JspCompilationContext.java:267) 20:34:48,937 INFO [STDOUT] at org.apache.jasper.compiler.Compiler.isOutDated(Compiler.java:398) 20:34:48,937 INFO [STDOUT] at org.apache.jasper.compiler.Compiler.isOutDated(Compiler.java:315) 20:34:48,937 INFO [STDOUT] at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:553) 20:34:48,937 INFO [STDOUT] at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:293) 20:34:48,937 INFO [STDOUT] at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315) 20:34:48,937 INFO [STDOUT] at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) So I had to put the tlds in jars within the jbossweb-tomcat55.sar/conf/tlds and this appears to work. The patch to the JspServlet has been submitted to the tomcat bugzilla under the following bug report: http://issues.apache.org/bugzilla/show_bug.cgi?id=34272 > Can't use container level taglibs > --------------------------------- > > Key: JBAS-1602 > URL: http://jira.jboss.com/jira/browse/JBAS-1602 > Project: JBoss Application Server > Type: Bug > Components: Web (Tomcat) service > Reporter: Stan Silvert > Assignee: Scott M Stark > Priority: Critical > Fix For: JBossAS-4.0.2 Final > Attachments: EmbeddedServletOptions.java, TldLocationsCache.java > > > JBoss/Tomcat needs a way to install tag libraries globally so they are > available to all web applications. This functionality is mentioned in the > JSP 2.0 spec section 7.3.5. In Tomcat standalone, you can do this, but it > doesn?t work in JBoss/Tomcat. > The way this works is that the Jasper TldLocationsCache ?Scans all JARs > accessible to the webapp's classloader and its parent classloaders for TLDs.? > If I put my jar into Tomcat standalone?s common/lib directory then the tag > library will be shared across all web apps. I?ve tried putting the jar in > several ?well known? locations in JBoss/Tomcat and nothing seems to work. > For Reference, I?ve attached the TldLocationsCache source code from Tomcat > 5.5.8. > Concerning TldLocationsCache, Scott Stark says: > "This class is useless for non-URLClassLoaders and URLClassLoaders that do > not expose their classpath via getURLs which is what we currently do because > of an old bad behavior with annotated codebases of rmi classes. " > Remy Maucherat offered this as a possible solution: > Would it be possible to have the ENCLoader facade return more interesting > things ? > /** > * A trival extension of URLClassLoader that uses an empty URL[] as its > * classpath so that all work is delegated to its parent. > */ > static class ENCLoader extends URLClassLoader > { > private URL[] urllist = new URL[0]; > ENCLoader(ClassLoader parent) > { > super(new URL[0], parent); > } > void addURLInternal(URL url) > { > URL[] result = new URL[urllist.length + 1]; > for (int i = 0; i < urllist.length; i++) > result[i] = urllist[i]; > result[urllist.length] = url; > urllist = result; > } > public URL[] getURLs() > { > return urllist; > } > } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa - If you want more information on JIRA, or have a bug to report see: http://www.atlassian.com/software/jira ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click _______________________________________________ JBoss-Development mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/jboss-development
