This is an automated email from the ASF dual-hosted git repository.
lukaszlenart pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/struts.git
from 39bef89be WW-5833 fix(rest): authorize nested container members at the
depth ParametersInterceptor counts (#2091)
new 267a5ae61 WW-4164 docs: add design for per-package and per-action
extensions
new 03ca9052c WW-4164 docs: add implementation plan for per-action
extensions
new 5f7833721 WW-4164 feat(core): add ActionExtensions list parsing
new 0ced1f2d5 WW-4164 feat(core): parse extension attribute on package and
action
new 0997d17bf WW-4164 feat(core): reject disallowed extensions with
ActionExtensionInterceptor
new 4d061a464 WW-4164 feat(core): map declared extensions to their actions
new 8be5c47e5 WW-4164 feat(core): build action URLs with the target
action's extension
new 2a4d1aa8d WW-4164 fix(core): skip extension resolution when nothing
declares extensions
new e824a9c17 WW-4164 test(core): pin extension behaviour with one
declaring package
new da18bd64f WW-4164 fix(core): ignore default-action-ref when claiming
declared extensions
new 06cd4669b WW-4164 fix(core): resolve query-string action names and
declared empty extension
new bc9b2eb59 WW-4164 chore(core): polish extension config validation and
warnings
new 669b8ca34 WW-4164 docs: correct action-prefix enforcement in design
new e5e430a05 WW-4164 refactor(core): use an empty list for undeclared
extensions
new 0cb27d078 WW-4164 fix(core): parse probe names like the mapper and
keep allowed extensionless links
new 70e10cd20 WW-4164 fix(core): match the full requested name when
slashes are allowed
new 3f4d46a13 WW-4164 docs: describe the extensionless-request rule for
generated URLs
new 706045e61 WW-4164 fix(core): address Sonar findings on extension
support
new d3a0310c5 WW-4164 feat(core): let action mappers declare support for
declared extensions
The 19 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../org/apache/struts2/components/Component.java | 12 +
.../struts2/components/ServletUrlRenderer.java | 1 +
.../struts2/config/RuntimeConfiguration.java | 13 ++
.../struts2/config/entities/ActionConfig.java | 28 ++-
.../struts2/config/entities/PackageConfig.java | 37 +++
.../struts2/config/impl/ActionConfigMatcher.java | 1 +
.../struts2/config/impl/DefaultConfiguration.java | 75 ++++--
.../providers/XmlDocConfigurationProvider.java | 22 ++
.../org/apache/struts2/dispatcher/Dispatcher.java | 17 +-
.../dispatcher/mapper/ActionExtensionResolver.java | 142 ++++++++++++
.../dispatcher/mapper/ActionExtensions.java | 78 +++++++
.../struts2/dispatcher/mapper/ActionMapper.java | 10 +
.../dispatcher/mapper/CompositeActionMapper.java | 5 +
.../dispatcher/mapper/DefaultActionMapper.java | 123 +++++++++-
.../dispatcher/mapper/PrefixBasedActionMapper.java | 5 +
.../interceptor/ActionExtensionInterceptor.java | 95 ++++++++
.../struts2/interceptor/ResultResolution.java | 49 ++++
.../httpmethod/HttpMethodInterceptor.java | 16 +-
.../org/apache/struts2/result/PostbackResult.java | 15 +-
.../result/ServletActionRedirectResult.java | 17 +-
core/src/main/resources/struts-7.5.dtd | 2 +
core/src/main/resources/struts-beans.xml | 1 +
core/src/main/resources/struts-default.xml | 4 +
... => XmlConfigurationProviderExtensionTest.java} | 67 +++---
.../dispatcher/ActionExtensionEndToEndTest.java | 168 ++++++++++++++
.../apache/struts2/dispatcher/DispatcherTest.java | 45 ++++
.../mapper/ActionExtensionResolverTest.java | 176 ++++++++++++++
.../dispatcher/mapper/ActionExtensionsTest.java | 57 +++++
.../mapper/CompositeActionMapperTest.java | 22 ++
.../dispatcher/mapper/DefaultActionMapperTest.java | 221 ++++++++++++++++++
.../mapper/PrefixBasedActionMapperTest.java | 61 +++++
.../mapper/Restful2ActionMapperTest.java | 4 +
.../dispatcher/mapper/RestfulActionMapperTest.java | 4 +
.../ActionExtensionInterceptorTest.java | 130 +++++++++++
.../apache/struts2/result/PostbackResultTest.java | 33 +++
.../result/ServletActionRedirectResultTest.java | 33 +++
.../org/apache/struts2/views/jsp/URLTagTest.java | 18 ++
.../apache/struts2/views/jsp/ui/FormTagTest.java | 18 ++
...ethod-invalid.xml => struts-extension-bang.xml} | 13 +-
...lid.xml => struts-extension-default-action.xml} | 6 +-
...od-invalid.xml => struts-extension-invalid.xml} | 4 +-
...hod-invalid.xml => struts-extension-reload.xml} | 4 +-
...invalid.xml => struts-extension-whitespace.xml} | 4 +-
...ttp-method-invalid.xml => struts-extension.xml} | 20 +-
.../struts-extension-one-package.xml} | 9 +-
.../2026-11-02-WW-4164-per-action-extensions.md | 257 +++++++++++++++++++++
...6-11-01-WW-4164-per-action-extensions-design.md | 189 +++++++++++++++
.../struts2/json/JSONActionRedirectResultTest.java | 4 +
.../org/apache/struts2/rest/RestActionMapper.java | 5 +
.../apache/struts2/rest/RestActionMapperTest.java | 4 +
50 files changed, 2259 insertions(+), 85 deletions(-)
create mode 100644
core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionExtensionResolver.java
create mode 100644
core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionExtensions.java
create mode 100644
core/src/main/java/org/apache/struts2/interceptor/ActionExtensionInterceptor.java
create mode 100644
core/src/main/java/org/apache/struts2/interceptor/ResultResolution.java
copy
core/src/test/java/org/apache/struts2/config/providers/{XmlConfigurationProviderHttpMethodTest.java
=> XmlConfigurationProviderExtensionTest.java} (52%)
create mode 100644
core/src/test/java/org/apache/struts2/dispatcher/ActionExtensionEndToEndTest.java
create mode 100644
core/src/test/java/org/apache/struts2/dispatcher/mapper/ActionExtensionResolverTest.java
create mode 100644
core/src/test/java/org/apache/struts2/dispatcher/mapper/ActionExtensionsTest.java
create mode 100644
core/src/test/java/org/apache/struts2/dispatcher/mapper/PrefixBasedActionMapperTest.java
create mode 100644
core/src/test/java/org/apache/struts2/interceptor/ActionExtensionInterceptorTest.java
copy
core/src/test/resources/org/apache/struts2/config/providers/{struts-http-method-invalid.xml
=> struts-extension-bang.xml} (66%)
copy
core/src/test/resources/org/apache/struts2/config/providers/{struts-http-method-invalid.xml
=> struts-extension-default-action.xml} (81%)
copy
core/src/test/resources/org/apache/struts2/config/providers/{struts-http-method-invalid.xml
=> struts-extension-invalid.xml} (88%)
copy
core/src/test/resources/org/apache/struts2/config/providers/{struts-http-method-invalid.xml
=> struts-extension-reload.xml} (88%)
copy
core/src/test/resources/org/apache/struts2/config/providers/{struts-http-method-invalid.xml
=> struts-extension-whitespace.xml} (88%)
copy
core/src/test/resources/org/apache/struts2/config/providers/{struts-http-method-invalid.xml
=> struts-extension.xml} (56%)
copy
core/src/test/resources/org/apache/struts2/{config/providers/struts-http-method-invalid.xml
=> dispatcher/struts-extension-one-package.xml} (70%)
create mode 100644
docs/superpowers/plans/2026-11-02-WW-4164-per-action-extensions.md
create mode 100644
docs/superpowers/specs/2026-11-01-WW-4164-per-action-extensions-design.md