[ 
http://www.stripesframework.org/jira/browse/STS-111?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ben Gunter closed STS-111.
--------------------------


> Stripes 1.2 doesn't work with Spring unless you go through an ActionBean first
> ------------------------------------------------------------------------------
>
>                 Key: STS-111
>                 URL: http://www.stripesframework.org/jira/browse/STS-111
>             Project: Stripes
>          Issue Type: Bug
>          Components: Tag Library
>         Environment: Stripes version 1.2
>            Reporter: Jeppe Cramon
>            Assignee: Tim Fennell
>            Priority: Blocker
>             Fix For: Release 1.2.1
>
>
> I guess I was too fast to say that Stripes 1.2 didn't give upgrade 
> problems... Just hadn't checked my logs or tried use the actions that used 
> Spring injection.
> The problem only occurs if you don't go through an ActionBean first.
> The problem comes from the FormTags isWizard() method.
> There are actually two issues with it.
> 1. It hides the real cause of the StripesServletException that's thrown from 
> StripesFilter.getConfiguration().getActionResolver().getActionBean(...)
> I changed to log.error statement to the following, so that I can see the 
> cause:
> log.error(sse.getRootCause() != null ? sse.getRootCause() : sse, "Could not 
> locate an ActionBean that was bound to the URL [",
>                           this.actionWithoutContext, "]. Without an 
> ActionBean class Stripes ",
>                           "cannot determine whether the ActionBean is a 
> wizard or not. ",
>                           "As a result wizard behaviour will be disabled.");
> 2. The call to 
> StripesFilter.getConfiguration().getActionResolver().getActionBean(...) uses 
> an empty ActionBeanContext where request and response isn't set.
> Since the ActionBeanContext doesn't have the request and response objects, 
> the SpringHelper fails in the 2. line of the injectBeans() method with a NPE. 
> I couldn't find the NPE until I changed the log.error statement in the 
> FormTag's isWizard() method, so please keep it, it aids in finding bugs.
> Below is a working version of the isWizard() method. You'll notice that it 
> currently catches a ServletException and not StripesServletException.  
> This is because the ActionBeanContextFactory's getContextInstance() method is 
> defined to throw a ServletException instead of a StripesServletException 
> (which the default implementation throws). I could have gone with a double 
> catch block with identical code, but didn't. 
> It would probably be best if you could change ActionBeanContextFactory's 
> getContextInstance() method to throw StripesServletException so that the code 
> in FormTag's isWizard method can be changed to only catch 
> StripesServletException.
> For those who want to use Stripes 1.2 with Spring and use the useActionBean 
> tag, can copy the attached file to their work into the 
> net.sourceforge.stripes.tag package. TomCat or another server will then load 
> it before the Stripes version.
> FormTag's isWizard() method that works with Spring:
> =========================================
>     protected boolean isWizard() {
>         ActionBean bean = getActionBean();
>         if (bean == null) {
>             try {
>               ActionBeanContext context =  
> StripesFilter.getConfiguration().getActionBeanContextFactory().getContextInstance((HttpServletRequest)getPageContext().getRequest(),
>  (HttpServletResponse)getPageContext().getResponse());
>                 bean = 
> StripesFilter.getConfiguration().getActionResolver().getActionBean(
>                        context, this.actionWithoutContext);
>             } 
>             catch (ServletException sse) {
>                 log.error(sse.getRootCause() != null ? sse.getRootCause() : 
> sse, "Could not locate an ActionBean that was bound to the URL [",
>                           this.actionWithoutContext, "]. Without an 
> ActionBean class Stripes ",
>                           "cannot determine whether the ActionBean is a 
> wizard or not. ",
>                           "As a result wizard behaviour will be disabled.");
>                 return false;
>             }
>         }
>         return bean.getClass().getAnnotation(Wizard.class) != null;
>     }

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

------------------------------------------------------------------------------
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and, 
should the need arise, upgrade to a full multi-node Oracle RAC database 
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
Stripes-development mailing list
Stripes-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/stripes-development

Reply via email to