I've been struggling to get my Struts2+SiteMesh+Guice application
working.  I was getting this stack trace with guice 3.0 rc3 and Struts
2.2.1.1:


java.lang.NullPointerException
        com.google.inject.struts2.Struts2Factory
$ProvidedInterceptor.intercept(Struts2Factory.java:215)
        
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:
248)
        
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:
52)
        
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:
485)
        
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:
77)
        
org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter.doFilter(StrutsExecuteFilter.java:
88)
        
com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:
162)
        
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:
58)
        
com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:
129)
        
com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:
77)
        
com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:
162)
        
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:
58)
        
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.doFilter(StrutsPrepareFilter.java:
82)
        
com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:
162)
        
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:
58)
        
com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:
118)
        com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)

I did a little investigation and found that Struts is calling
StrutsFactory.buildInterceptor() AFTER Struts2Factory.createInjector()
is called.  This means that the created interceptor never has its
inject() method called, the created interceptor is added to the list
of provided interceptors AFTER the initialize loop in the
buildInterceptor() method.

To fix this, I added the line "providedInterceptor.inject()" to the
end of the buildInterceptor() method and all seems to be working fine.

So, is this a bug, or do I have something configured wrong?

Thanks!
Jeff Butler

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-guice?hl=en.

Reply via email to