Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NullPointerException when combining SWF 2.4.7, MyFaces Core 2.2.12 and WebSphere 9.0.7 [SWF-1726] #902

Open
spring-operator opened this issue Jun 21, 2018 · 7 comments

Comments

@spring-operator
Copy link
Contributor

Volker Malzahn opened SWF-1726 and commented

Following NPE occurs when running a webapp based on SWF 2.4.7, MyFaces Core 2.2.12 and WebSphere 9.0.7:

java.lang.NullPointerException
	at java.util.Hashtable.get(Hashtable.java:403)
	at com.ibm.ws.webcontainer.srt.SRTRequestContext.getSession(SRTRequestContext.java:98)
	at com.ibm.ws.webcontainer.srt.SRTServletRequest.getSession(SRTServletRequest.java:1626)
	at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:270)
	at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:270)
	at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:270)
	at org.apache.myfaces.context.servlet.SessionMap._getSession(SessionMap.java:87)
	at org.apache.myfaces.context.servlet.SessionMap.getAttribute(SessionMap.java:49)
	at org.apache.myfaces.util.AbstractThreadSafeAttributeMap.containsKey(AbstractThreadSafeAttributeMap.java:58)
	at org.apache.myfaces.shared.util.SubKeyMap.containsKey(SubKeyMap.java:106)
	at org.apache.myfaces.view.ViewScopeProxyMap.containsKey(ViewScopeProxyMap.java:109)
	at org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.getValue(ManagedBeanResolver.java:203)
	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:66)
	at org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:179)
	at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:80)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)

The NPE occurs when a view-state transition is processed without a "to=...", i.e. the same view-state is shown again. Following happens:

FlowViewHandler.restoreFlowView() reads last ViewRoot instance of last request from flash scope

  • this old javax.faces.component.UIViewRoot instance contains an instance variable _viewScope which references an org.apache.myfaces.view.ViewScopeProxyMap, which contains inst. variable _delegate which holds a reference to org.apache.myfaces.context.servlet.SessionMap which contains a reference to the HttpServletRequest instance of last request.

  • later on this reference to the HttpServletRequest instance of last request is used by org.apache.myfaces.view.ViewScopeProxyMap to check if a certain attribute is stored in JSF's view scope. This calls HttpServletRequestWrapper.getSession() which causes the NPE inside WebSphere's SRTServletRequest/SRTRequestContext classes.

In contrast to simply reusing an old UIViewRoot instance by FlowViewHandler.restoreFlowView() method javax.faces.component.UIViewRoot.restoreState() reinitializes _viewScope with a new instance of ViewScopeProxyMap.


Affects: 2.4.7

1 votes, 3 watchers

@spring-operator
Copy link
Contributor Author

Rossen Stoyanchev commented

Is this a regression?

@spring-operator
Copy link
Contributor Author

Volker Malzahn commented

I don't really understand your question. This issue makes it impossible to use a transition without a "to" attribute (simple <transition on="..."><evaluate.../></transition>) in the combination SWF 2.4, MyFaces 2.2 and WebSphere 9. 

@spring-operator
Copy link
Contributor Author

Rossen Stoyanchev commented

The question is simply whether some recent change in Web Flow broke what previously used to work?

@spring-operator
Copy link
Contributor Author

Rossen Stoyanchev commented

Redirecting in the same state is known to have side effects in JSF. The recommendation is to disable it, see Redirect in Same State.

@spring-operator
Copy link
Contributor Author

Volker Malzahn commented

In this situation it's in the reverse way: "redirect in same state" solves the problem for non-AJAX requests. But for AJAX requests a redirect isn't acceptable (the change parts should be updated only). So we need a solution for AJAX requests in the way I have described above.

@spring-operator
Copy link
Contributor Author

Rossen Stoyanchev commented

Understood and apologies for the slow response, while I was away. To be completely honest, the JSF integration in Web Flow is quite deep unlike my own expertise with JSF. Unfortunately I have to rely on some help from the community and users like yourself to suggest and try out concrete fixes.

@spring-operator
Copy link
Contributor Author

Jürgen Langthaler commented

We hit the same issue using SWF 2.5.1, MyFaces 2.3.2 and Websphere 9.0.0.10. A fix would be very appreciated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants