eclipse-ee4j / mojarra

Mojarra, a Jakarta Faces implementation
Other
159 stars 109 forks source link

NPE MultiViewHandler#getRedirectURL #5220

Closed svenhaag closed 1 year ago

svenhaag commented 1 year ago

A NPE is thrown with Mojarra 2.3.19. Mojarra 2.3.18 works fine.

The culprit lies in the usage of a NULL-valued redirect parameter.

java.lang.NullPointerException: null
    at java.net.URLDecoder.decode(URLDecoder.java:176)
    at java.net.URLDecoder.decode(URLDecoder.java:142)
    at com.sun.faces.application.view.MultiViewHandler.getRedirectURL(MultiViewHandler.java:419) ~[jakarta.faces-2.3.19.jar:2.3.19]
    at javax.faces.application.ViewHandlerWrapper.getRedirectURL(ViewHandlerWrapper.java:287) ~[jakarta.faces-2.3.19.jar:2.3.19]
    at javax.faces.application.ViewHandlerWrapper.getRedirectURL(ViewHandlerWrapper.java:287) ~[jakarta.faces-2.3.19.jar:2.3.19]
    at org.jboss.weld.module.jsf.ConversationAwareViewHandler.getRedirectURL(ConversationAwareViewHandler.java:145) ~[weld-servlet-shaded-3.1.9.Final.jar:3.1.9.Final]
    at javax.faces.application.ViewHandlerWrapper.getRedirectURL(ViewHandlerWrapper.java:287) ~[jakarta.faces-2.3.19.jar:2.3.19]
    at com.sun.faces.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:291) ~[jakarta.faces-2.3.19.jar:2.3.19]
    at com.sun.faces.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:206) ~[jakarta.faces-2.3.19.jar:2.3.19]
    at org.apache.deltaspike.jsf.impl.config.view.navigation.ViewConfigAwareNavigationHandler.handleNavigation(ViewConfigAwareNavigationHandler.java:146) ~[deltaspike-jsf-module-impl-1.9.6.jar:1.9.6]
    at org.apache.deltaspike.jsf.impl.scope.viewaccess.ViewAccessScopedAwareNavigationHandler.handleNavigation(ViewAccessScopedAwareNavigationHandler.java:51) ~[deltaspike-jsf-module-impl-1.9.6.jar:1.9.6]
    at org.apache.deltaspike.jsf.impl.navigation.DeltaSpikeNavigationHandler.handleNavigation(DeltaSpikeNavigationHandler.java:77) ~[deltaspike-jsf-module-impl-1.9.6.jar:1.9.6]
    at org.apache.deltaspike.jsf.impl.navigation.DeltaSpikeNavigationHandlerWrapper.handleNavigation(DeltaSpikeNavigationHandlerWrapper.java:47) ~[deltaspike-jsf-module-impl-1.9.6.jar:19.6[]
    at com.sun.faces.application.ActionListenerImpl.invokeNavigationHandling(ActionListenerImpl.java:110) ~[jakarta.faces-2.3.19.jar:2.3.19]
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:69) ~[jakarta.faces-2.3.19.jar:2.3.9[]
    at org.apache.deltaspike.jsf.impl.config.view.ViewControllerActionListener.processAction(ViewControllerActionListener.java:63) ~[deltaspike-jsf-module-impl-1.9.6.jar:1.9.6]

Using navigation rule:

    <navigation-rule>
        <from-view-id>*</from-view-id>
        <navigation-case>
            <from-outcome>b00m</from-outcome>
            <to-view-id>/faces/pages/b00m.xhtml</to-view-id>
            <redirect>
                <redirect-param>
                    <name>selectedAppId</name>
                    <value>#{b00mBean.selectedAppId}</value>
                </redirect-param>
            </redirect>
        </navigation-case>
    </navigation-rule>

example.zip

BalusC commented 1 year ago

Has same root cause as https://github.com/eclipse-ee4j/mojarra/issues/5226