[ 
https://issues.apache.org/jira/browse/WW-3647?focusedWorklogId=1004004&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-1004004
 ]

ASF GitHub Bot logged work on WW-3647:
--------------------------------------

                Author: ASF GitHub Bot
            Created on: 07/Feb/26 18:38
            Start Date: 07/Feb/26 18:38
    Worklog Time Spent: 10m 
      Work Description: lukaszlenart opened a new pull request, #1571:
URL: https://github.com/apache/struts/pull/1571

   ## Summary
   
   - Change default value of 
`struts.objectFactory.spring.autoWire.alwaysRespect` from `false` to `true`
   - Update JavaDoc in `StrutsConstants.java` to reflect new default and 
reference WW-3647
   - Update field default in `SpringObjectFactory.java`
   
   ## Problem
   
   When a Spring String bean exists (e.g., JNDI lookup with default-value), 
Spring's `AUTOWIRE_CONSTRUCTOR` strategy incorrectly injects that value into 
ALL String parameters of `ServletActionRedirectResult` constructors, causing 
malformed redirect URLs like:
   ```
   http://localhost:8080/XXXX/index!XXXX.action#XXXX
   ```
   
   ## Solution
   
   Change the default to `true` so Spring respects the configured autowire 
strategy (`AUTOWIRE_BY_NAME` by default) instead of using the legacy mixed 
injection approach that always tries constructor injection first.
   
   ## Migration Notes
   
   Users who rely on the legacy constructor autowiring behavior can restore it 
by setting:
   ```xml
   <constant name="struts.objectFactory.spring.autoWire.alwaysRespect" 
value="false" />
   ```
   
   ## Test plan
   
   - [x] All Spring plugin tests pass (`SpringObjectFactoryTest` - 11 tests)
   - [ ] Manual verification with JNDI String bean scenario
   
   Fixes [WW-3647](https://issues.apache.org/jira/browse/WW-3647)
   
   🤖 Generated with [Claude Code](https://claude.com/claude-code)




Issue Time Tracking
-------------------

            Worklog Id:     (was: 1004004)
    Remaining Estimate: 0h
            Time Spent: 10m

> Adding a jndi-lookup Spring bean breaks ServletActionRedirectResult
> -------------------------------------------------------------------
>
>                 Key: WW-3647
>                 URL: https://issues.apache.org/jira/browse/WW-3647
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Dispatch Filter, Plugin - Spring
>    Affects Versions: 2.2.3
>            Reporter: Miguel Almeida
>            Assignee: Lukasz Lenart
>            Priority: Major
>              Labels: injection, redirectAction, spring, struts2
>             Fix For: 7.2.0
>
>         Attachments: redirectActionErrorTest.zip, 
> redirectActionErrorWithJunitTest.zip
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> When you add the following bean to a Spring-Struts application:
> <jee:jndi-lookup jndi-name="someName" id="currentEnvironment" 
> default-value="XXXX"  />
> Whenever you have an action with a redirectAction type, Struts will try to 
> redirect you to:
> http://localhost:8080/XXXX/index!XXXX.action#XXXX
> This happens because the 3 String argument constructor for 
> ServletActionRedirectResult will set action, method and namespace to whatever 
> value is defined for that bean (XXXX in the example, if you don't have a 
> someName JDNI property).
> This only happens when you let struts manage ServletActionRedirectResult. If 
> you add the following Spring bean:
>       <bean id="myRedirect" 
> class="org.apache.struts2.dispatcher.ServletActionRedirectResult"
>               scope="prototype" autowire="byName">
>       </bean>
> and add a                     <result-type name="myRedirect"  
> class="myRedirect" /> result type, the problem doesn't appear.
> I've added a testCase for you to confirm.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to