[kotlin-server][Java][JAX-RS] Fix path shadowing (#23414)#23871
Conversation
| * candidate {@code commonPath} is only safe if no <em>other</em> tag owns a resource | ||
| * path that starts with that prefix. | ||
| */ | ||
| private final Set<String> allResourcePaths = new HashSet<>(); |
There was a problem hiding this comment.
Global path registry.
| opList.add(co); | ||
| } | ||
|
|
||
| allResourcePaths.add(resourcePath); |
There was a problem hiding this comment.
Every time an operation is assigned to a tag, its full resource path is added to the global path registry.
| if (commonPath != null && !commonPath.isEmpty() && !"/".equals(commonPath) | ||
| && wouldShadowOtherTags(commonPath, ops, allResourcePaths)) { | ||
| commonPath = null; | ||
| } | ||
|
|
||
| applyCommonPath(ops, commonPath, objs); |
There was a problem hiding this comment.
Before applying a common path prefix to a tag's API class, the generator checks shadowing.
|
@feczkob are you using this fix in production and confirm it works for your use cases? |
|
Hi @feczkob , thanks a lot for fixing this! Unfortunately, I can't test it at the moment, but it looks good and if you tried with the reproducer, I'm inclined to believe that it works. So thumbs up from me 👍 |
|
Let's give it a try 👍 |
|
Hi @feczkob , I found some time to test it with my real project. I built 7.24.0-SNAPSHOT from Thanks a lot for the fix! |
Fixes #23414.
The generator now tracks all resource paths across tags during code generation. Before applying a common
@Pathprefix to an API class, it checks if that prefix would "shadow" (intercept) routes belonging to other tags - if so, it keeps the full paths on each method instead.Could you take a look, please?
@karismann (2019/03) @Zomzog (2019/04) @andrewemery (2019/10) @4brunu (2019/11) @yutaka0m (2020/03) @stefankoppier (2022/06) @e5l (2024/10) @dennisameling (2026/02) and @lbilger
PR checklist
Commit all changed files.
This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
These must match the expectations made by your contribution.
You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example
./bin/generate-samples.sh bin/configs/java*.IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
master(upcoming7.x.0minor release - breaking changes with fallbacks),8.0.x(breaking changes without fallbacks)"fixes #123"present in the PR description)Summary by cubic
Fixes path shadowing in Java JAX-RS and Kotlin
jaxrs-specgenerators by skipping a class-level@Pathwhen it would hide routes from other tags, keeping all endpoints reachable. Fixes #23414.commonPathif it would shadow another tag’s route.AbstractJavaJAXRSServerCodegenduringjaxrsPostProcessOperations; include helpers to compute/apply common path.KotlinServerCodegenfor thejaxrs-speclibrary; other Kotlin libraries remain unchanged.JavaJaxrsBaseTest#testCommonPathDoesNotShadowOtherTags,KotlinServerCodegenTest#testCommonPathDoesNotShadowOtherTags_jaxrsSpec,src/test/resources/3_0/issue_23414.yaml.FakeApinow uses@Path("")with full method paths; add Kotlin Ktor sample filesAppMain.ktandConfiguration.kt).Written for commit 0986dc7. Summary will update on new commits. Review in cubic