> On May 30, 2018, at 3:13 AM, Tomas Hofman wrote:
>
> Hello,
>
> I run into something that looks like non spec-conforming behavior and would
> like to check with you if it's really a bug or I'm having incorrect
> expectations.
>
> I have TLD located in JAR under META-INF/tlds/hi.tld. The JAR also contains
> web-fragment.xml with taglib mapping like this:
>
>
>
>
>/HiTag
>/tlds/hi.tld
>
>
>
>
> This JAR is loaded in a WAR, that contains JSP with following directive:
>
> <%@ taglib uri="/HiTag" prefix="say"%>
>
> During deployment in apache-tomcat-9.0.8 I see this warning:
>
> 30-May-2018 10:38:42.240 WARNING
> [ContainerBackgroundProcessor[StandardEngine[Catalina]]]
> org.apache.jasper.servlet.TldScanner.scanJspConfig Failed to process TLD with
> path [/tlds/hi.tld] and URI [/HiTag]. The specified path does not exist.
>
> and the jsp compilation fails.
>
> When I move the TLD under META-INF/resources, then it starts to work.
> When I use implicit mapping by defining element in hi.tld instead of
> explicit mapping in web-fragment.xml, that works too.
>
> The JSP spec says that TLDs must be in META-INF/ or subdirectories:
>
> [quote]
> JSP 7.3.1
>
> When deployed inside a JAR file, the tag library descriptor files must be in
> the META-INF directory, or a subdirectory of it.
> [/quote]
>
> I think it's caused by this line in TldScanner.java:
>
> https://github.com/apache/tomcat/blob/TOMCAT_8_0_0_RC10/java/org/apache/jasper/servlet/TldScanner.java#L177
>
> where ServletContext#getResource() would naturally see only files under
> META-INF/resources/ dir.
>
> Thanks for any opinions!
This may be better addressed to user@t.a.o as this really relates to the Jasper
JSP engine rather than the taglib itself. Having said that, here’s how I read
the spec.
JSP 7.3.3 talks about a “taglib map” using elements in the deployment
descriptor per your example. Per JSP 7.3.2 the URI is mapped to a _context
relative path_ interpreted relative to the root of the web application.
Resources contained in a web fragment jar are located in its
/META-INF/resources directory. Tomcat/Jasper are synthesizing the effective web
application from the resources in the fragments, then resolving the URI in the
taglib map against that merged application. I think that’s a correct
interpretation of the spec.
JSP 7.3.1 refers to implicit map entries found by scanning the web
application’s jars from WEB-INF/lib
--
Jeremy
-
To unsubscribe, e-mail: taglibs-user-unsubscr...@tomcat.apache.org
For additional commands, e-mail: taglibs-user-h...@tomcat.apache.org