Unable to find taglib [c] for URI: [jakarta.tags.core] Tomcat 10.1.x

1.2k Views Asked by At

after migrating to spring 6.0.11 and tomcat 10.1.13, we started getting problems with jstl and jsp. According to the Jakarta Standard Tag Library 3.0 documentation, Ive changed the taglib uri in all .jsp files from <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> to <%@ taglib prefix="c" uri="jakarta.tags.core" %>. After debugging, I saw that the map in the TldCache class was not filled in, which is why TagLibraryInfoImpl receives tldResourcePath as null. All the necessary libs are installed

implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:3.0.0'
implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl:3.0.1'
implementation 'org.mortbay.jasper:apache-jsp:10.1.7'
implementation("org.apache.tomcat:tomcat-jsp-api:10.1.13")
compileOnly "jakarta.servlet:jakarta.servlet-api:6.0.0"

what could be the problem?

org.apache.jasper.JasperException: Could not find taglib [c] for URI: [jakarta.tags.core]
    in org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:54)
    in org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:294)
    in org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:81)
    in org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:176)
    in org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:429)
    in org.apache.jasper.compiler.Parser.parseDirective(Parser.java:487)
    in org.apache.jasper.compiler.Parser.parseElements(Parser.java:1444)
    in org.apache.jasper.compiler.Parser.parse(Parser.java:138)
    in org.apache.jasper.compiler.ParserController.doParse(ParserController.java:245)
    in org.apache.jasper.compiler.ParserController.parse(ParserController.java:106)
    in org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:211)
    in org.apache.jasper.compiler.Compiler.compile(Compiler.java:396)
    in org.apache.jasper.compiler.Compiler.compile(Compiler.java:372)
    in org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
    in org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:603)
    in org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:396)
    in org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:380)
    in org.apache.jasper.servlet.JspServlet.service(JspServlet.java:328)
    in jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
    in org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205)
    in org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
    in org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    in org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
    in org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
    in org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110)
    in org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
    in org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)

I tried also add aditional dependecies, like

compileOnly 'jakarta.servlet.jsp:jakarta.servlet.jsp-api:3.1.1'
implementation 'org.mortbay.jasper:taglibs-standard:10.0.2'
compileOnly 'jakarta.platform:jakarta.jakartaee-api:10.0.0'

but it also didnt help. with tomcat 9 and java EE it was easy, simple add

implementation "jstl:jstl:1.2"  
implementation("org.apache.tomcat:tomcat-jsp-api:9.0.33")

and we got path to differents tags and all works.

I also have custom tags:

<taglib xmlns="https://jakarta.ee/xml/ns/jakartaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-jsptaglibrary_3_1.xsd"
        version="3.1">
    ...

and with custom tags any problem, I don't understand how apache-jsp should resolve path for tags jakarta.tags.*

1

There are 1 best solutions below

0
Vooply On

I found the problem. I have context.xml with JarScanFilter and I used for scanning old jar naming. after changing to tldScan="jakarta.servlet.jsp.jstl*.jar all works old naming for tld jar scan