eclipse-ee4j / mojarra

Mojarra, a Jakarta Faces implementation
Other
158 stars 107 forks source link

Broken Util.java (NoSuchElementException) #5429

Closed TomasHofman closed 3 months ago

TomasHofman commented 3 months ago

Describe the bug

PR https://github.com/eclipse-ee4j/mojarra/pull/5385 introduced a problem in Util.java class: https://github.com/eclipse-ee4j/mojarra/pull/5385/files#diff-6e59848a7dc34c64f4c25e5afc623099e1262d1161223a33eec9570569242aebR1680

In the method getResponseEncoding(FacesContext context, Optional<String> defaultEncoding) the defaultEncoding Optional.get() is called without checking its non-emptiness, while in the same PR a code is introduced that is calling this method with an empty Optional (https://github.com/eclipse-ee4j/mojarra/pull/5385/files#diff-6e59848a7dc34c64f4c25e5afc623099e1262d1161223a33eec9570569242aebR1629).

To Reproduce

Causes TCK failures on Wildfly:

[javatest.batch] FAILED........com/sun/ts/tests/jsf/api/jakarta_faces/application/navigationcase/URLClient.java#navigationCaseGetBookmarkableURLTest
[javatest.batch] FAILED........com/sun/ts/tests/jsf/api/jakarta_faces/application/navigationcase/URLClient.java#navigationCaseGetRedirectURLTest
[javatest.batch] FAILED........com/sun/ts/tests/jsf/api/jakarta_faces/component/html/htmlform/URLClient.java#uiComponentEncodeBeginELTest
[javatest.batch] FAILED........com/sun/ts/tests/jsf/api/jakarta_faces/component/html/htmlform/URLClient.java#uiComponentEncodeEndELTest
[javatest.batch] FAILED........com/sun/ts/tests/jsf/api/jakarta_faces/component/html/htmlform/URLClient.java#uiComponentGetCurrentComponentNullTest
[javatest.batch] FAILED........com/sun/ts/tests/jsf/api/jakarta_faces/component/html/htmlform/URLClient.java#uiComponentGetCurrentComponentTest
[javatest.batch] FAILED........com/sun/ts/tests/jsf/api/jakarta_faces/component/html/htmlform/URLClient.java#uiComponentGetCurrentCompositeComponentNullTest
[javatest.batch] FAILED........com/sun/ts/tests/jsf/api/jakarta_faces/component/html/htmlform/URLClient.java#uiComponentPopComponentFromELTest
[javatest.batch] FAILED........com/sun/ts/tests/jsf/api/jakarta_faces/component/html/htmlform/URLClient.java#uiComponentPushComponentToELTest
[javatest.batch] FAILED........com/sun/ts/tests/jsf/api/jakarta_faces/component/uiform/URLClient.java#uiComponentEncodeBeginELTest
[javatest.batch] FAILED........com/sun/ts/tests/jsf/api/jakarta_faces/component/uiform/URLClient.java#uiComponentEncodeEndELTest
[javatest.batch] FAILED........com/sun/ts/tests/jsf/api/jakarta_faces/component/uiform/URLClient.java#uiComponentGetCurrentComponentNullTest
[javatest.batch] FAILED........com/sun/ts/tests/jsf/api/jakarta_faces/component/uiform/URLClient.java#uiComponentGetCurrentComponentTest
[javatest.batch] FAILED........com/sun/ts/tests/jsf/api/jakarta_faces/component/uiform/URLClient.java#uiComponentGetCurrentCompositeComponentNullTest
[javatest.batch] FAILED........com/sun/ts/tests/jsf/api/jakarta_faces/component/uiform/URLClient.java#uiComponentPopComponentFromELTest
[javatest.batch] FAILED........com/sun/ts/tests/jsf/api/jakarta_faces/component/uiform/URLClient.java#uiComponentPushComponentToELTest
Caused by: java.util.NoSuchElementException: No value present
    at java.base/java.util.Optional.get(Optional.java:143)
    at jakarta.faces.impl@4.0.6.redhat-00001//com.sun.faces.util.Util.getResponseEncoding(Util.java:1680)
    at jakarta.faces.impl@4.0.6.redhat-00001//com.sun.faces.util.Util.getResponseEncoding(Util.java:1629)
    at jakarta.faces.impl@4.0.6.redhat-00001//com.sun.faces.context.ExternalContextImpl.encodeBookmarkableURL(ExternalContextImpl.java:976)
    at jakarta.faces.impl@4.0.6.redhat-00001//com.sun.faces.application.view.MultiViewHandler.getBookmarkableURL(MultiViewHandler.java:327)
    at jakarta.faces.impl@4.0.6.redhat-00001//jakarta.faces.application.ViewHandlerWrapper.getBookmarkableURL(ViewHandlerWrapper.java:293)
    at org.jboss.as.jsf-injection//org.jboss.weld.module.jsf.ConversationAwareViewHandler.getBookmarkableURL(ConversationAwareViewHandler.java:138)
    at jakarta.faces.impl@4.0.6.redhat-00001//jakarta.faces.application.NavigationCase.getBookmarkableURL(NavigationCase.java:189)
    at com.sun.ts//com.sun.ts.tests.jsf.api.jakarta_faces.application.navigationcase.TestServlet.navigationCaseGetBookmarkableURLTest(TestServlet.java:150)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at com.sun.ts//com.sun.ts.tests.jsf.common.servlets.HttpTCKServlet.invokeTest(HttpTCKServlet.java:163)
    ... 45 more
TomasHofman commented 3 months ago

It turns out there is a fix for this in the 4.1 branch, I created a backport: https://github.com/eclipse-ee4j/mojarra/pull/5430

TomasHofman commented 3 months ago

Backport has been merged :+1: