[
https://issues.apache.org/jira/browse/TOMEE-4651?focusedWorklogId=1032656&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-1032656
]
ASF GitHub Bot logged work on TOMEE-4651:
-----------------------------------------
Author: ASF GitHub Bot
Created on: 28/Jul/26 19:37
Start Date: 28/Jul/26 19:37
Worklog Time Spent: 10m
Work Description: jungm commented on PR #2844:
URL: https://github.com/apache/tomee/pull/2844#issuecomment-5108836430
Thanks — I verified all of it independently and you're right on every count.
Pushed in 164b44ba10.
**Precedence.** Confirmed against tomcat-jasper 11.0.23 bytecode: `scan()`
calls `scanPlatform()` first, `parseTld()` guards its put with `containsKey` +
`ifne` (first writer wins), and `scanJspConfig()` does `containsKey` →
`Log.warn` → skip. So the description was backwards and a bundled
Jakarta-native JSTL does not win.
Taking your steer and keeping the precedence as-is, since it matches how the
legacy `http://java.sun.com/jsp/jstl/*` URIs already behave. It is now stated
in the `aliasJakartaTagsUris()` javadoc and in the commit message, and pinned
by `containerAliasWinsOverAnApplicationBundledTld`, which drives the real
`parseTld()` with an app TLD declaring `jakarta.tags.core` — so the assertion
tracks Tomcat rather than restating my reading of it.
**The `isEmpty()` guard.** Real bug, exactly as you described:
`populateMyfacesAndJstlData()` guards myfaces (L125) and JSTL (L4142)
independently, so myfaces-without-JSTL left the map non-empty and warned five
times. Now guards on `JSTL_URL`. To make that reachable from a test I added a
package-private `aliasJakartaTagsUris(URL)` overload — `JSTL_URL` is `static
final` and modern JDKs reject reflective writes, so stubbing it wasn't an
option. The test asserts zero warnings, which is what actually distinguishes
the two guards.
**`permittedTaglibs` split.** Confirmed — `PermittedTaglibsTLV` uses a
single-arg `StringTokenizer`, i.e. any whitespace. Split is now `\s+`; a
space-separated list previously came back as one token so the widening silently
no-oped. The test helper read it back with the same wrong delimiter, which is
why nothing caught it.
**Static-initialiser wiring.** Added `staticInitialiserRegistersTheAliases`.
Since the shaded jar isn't on the module's test classpath, it asserts over
`<clinit>` bytecode that `aliasJakartaTagsUris` is called and that
`populateMyfacesAndJstlData` precedes it.
**Seven vs five.** Stale — bfc0e16bb0 already cut the map to the five URIs
the spec actually renamed (`permittedTaglibs`/`scriptfree` are
Apache-Standard-Taglibs TLVs that kept their URIs). The PR description still
said seven; I've corrected it.
I mutation-tested each fix — reverting the guard, the split, the wiring, and
the precedence each makes exactly the corresponding test fail. Module suite is
19/19.
_🤖 Addressed by [Claude Code](https://claude.com/claude-code)_
Issue Time Tracking
-------------------
Worklog Id: (was: 1032656)
Time Spent: 0.5h (was: 20m)
> TomEE does not register jakarta.tags.* TLD URIs, breaking all Jakarta Tags 3.0
> ------------------------------------------------------------------------------
>
> Key: TOMEE-4651
> URL: https://issues.apache.org/jira/browse/TOMEE-4651
> Project: TomEE
> Issue Type: Bug
> Components: TomEE Core Server
> Reporter: Markus Jung
> Assignee: Markus Jung
> Priority: Major
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> Jakarta Tags 3.0 replaces the old JSTL jar. Its TLD files declare URIs under
> the jakarta.tags._ namespace. TomEE and Tomcat do not expose these URIs to
> applications, so any JSP page that declares a taglib with a jakarta.tags._
> URI fails at JSP compile time.
> This breaks all 50 Jakarta Tags 3.0 TCK test classes. It also breaks the
> EJB-Lite JSP vehicles, which use the same tags and fail as a side effect.
> The TCK's own compatibility class hits the same problem. Of its 38 methods,
> only one avoids a jakarta.tags.* URI; the other 37 fail for the same reason.
> h2. Steps to reproduce / TCK reference
> Run the Jakarta Tags 3.0 TCK against TomEE 11. All ~50 test classes fail,
> plus the EJB-Lite JSP vehicle tests, including:
> * {{**/jstl/**/JSTLClientIT.java}}
> These are currently excluded in {{runner-webprofile/exclusions/tags.txt}} in
> the apache/tomee-tck harness repo. Once TomEE registers the jakarta.tags.*
> TLD URIs, remove this exclusion and rerun the suite to confirm the classes
> pass.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)