diff --git a/build.gradle b/build.gradle index 38bd82df..0ffd0097 100644 --- a/build.gradle +++ b/build.gradle @@ -32,28 +32,32 @@ allprojects { dependencyManagement { imports { - mavenBom "org.springframework:spring-framework-bom:6.0.0-M5" - mavenBom "org.springframework.security:spring-security-bom:5.5.6" + mavenBom "org.springframework:spring-framework-bom:6.0.3" + mavenBom "org.springframework.security:spring-security-bom:6.0.1" mavenBom "org.junit:junit-bom:5.7.1" } dependencies { - dependency "jakarta.servlet:jakarta.servlet-api:5.0.0" - dependency "jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:2.0.0" - dependency "jakarta.servlet.jsp:jakarta.servlet.jsp-api:3.0.0" - dependency "jakarta.el:jakarta.el-api:4.0.0" - dependency "jakarta.validation:jakarta.validation-api:3.0.0" + dependency "jakarta.servlet:jakarta.servlet-api:6.0.0" + dependency "jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:3.0.0" + dependency "jakarta.servlet.jsp:jakarta.servlet.jsp-api:3.1.0" + dependency "jakarta.el:jakarta.el-api:5.0.1" + dependency "jakarta.faces:jakarta.faces-api:4.0.1" + dependency "jakarta.enterprise:jakarta.enterprise.cdi-api:4.0.1" + dependency "org.glassfish:jakarta.faces:4.0.0" + dependency "jakarta.validation:jakarta.validation-api:3.0.2" dependencySet(group: 'org.hibernate', version: '5.6.10.Final') { entry 'hibernate-core-jakarta' entry 'hibernate-entitymanager' } - dependency "org.hibernate:hibernate-validator:7.0.4.Final" + dependency "org.hibernate.validator:hibernate-validator:8.0.0.Final" + dependency "org.apache.myfaces.core:myfaces-impl:4.0.0-RC4" + dependency "org.apache.myfaces.core:myfaces-test:4.0.0-RC4" /* dependencySet(group: 'com.sun.faces', version: '2.2.20') { entry 'jsf-api' entry 'jsf-impl' } - dependency "org.apache.myfaces.core:myfaces-impl:3.0.1" dependency "com.sun.facelets:jsf-facelets:1.1.14" */ @@ -63,13 +67,13 @@ allprojects { entry 'log4j-slf4j-impl' entry 'log4j-jul' } - dependency "org.slf4j:slf4j-api:1.7.30" + dependency "org.slf4j:slf4j-api:2.0.6" dependency("junit:junit:4.13.2") dependency "org.easymock:easymock:4.2" - dependency "org.hamcrest:hamcrest:2.1" - dependency "org.apache.tomcat:tomcat-jasper-el:10.0.20" - dependency "org.hsqldb:hsqldb:2.5.0" + dependency "org.hamcrest:hamcrest:2.2" + dependency "org.apache.tomcat:tomcat-jasper-el:11.0.0-M1" + dependency "org.hsqldb:hsqldb:2.7.1" /* dependency "org.apache.myfaces.test:myfaces-test22:1.0.8" diff --git a/settings.gradle b/settings.gradle index 444820eb..fa48951b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -10,8 +10,7 @@ rootProject.name = 'webflow' include 'spring-binding' include 'spring-webflow' include 'spring-js-resources' - -// include 'spring-faces' +include 'spring-faces' rootProject.children.each {project -> project.buildFileName = "${project.name}.gradle" diff --git a/spring-faces/spring-faces.gradle b/spring-faces/spring-faces.gradle index 1e440a34..6ca94e70 100644 --- a/spring-faces/spring-faces.gradle +++ b/spring-faces/spring-faces.gradle @@ -6,26 +6,25 @@ dependencies { implementation("org.springframework:spring-web") implementation("org.springframework:spring-webmvc") - compileOnly("javax.el:javax.el-api") - compileOnly("javax.servlet:javax.servlet-api") - compileOnly("com.sun.faces:jsf-api") - compileOnly("com.sun.faces:jsf-impl") + compileOnly("jakarta.el:jakarta.el-api") + compileOnly("jakarta.servlet:jakarta.servlet-api") + compileOnly("org.glassfish:jakarta.faces") compileOnly("org.apache.myfaces.core:myfaces-impl") - optional("com.sun.facelets:jsf-facelets") + optional("jakarta.faces:jakarta.faces-api") optional("org.springframework.security:spring-security-core") optional("org.springframework.security:spring-security-web") optional("org.springframework.security:spring-security-taglibs") testImplementation("org.junit.jupiter:junit-jupiter") testImplementation("org.easymock:easymock") - testImplementation("org.apache.myfaces.test:myfaces-test22") + testImplementation("org.apache.myfaces.core:myfaces-test") testImplementation("org.apache.tomcat:tomcat-jasper-el") testImplementation("org.springframework:spring-test") - testImplementation("javax.servlet:javax.servlet-api") - testImplementation("com.sun.faces:jsf-api") - testImplementation("com.sun.faces:jsf-impl") + testImplementation("jakarta.servlet:jakarta.servlet-api") + testImplementation("org.glassfish:jakarta.faces") testImplementation("org.apache.myfaces.core:myfaces-impl") + testImplementation("jakarta.enterprise:jakarta.enterprise.cdi-api") testRuntimeOnly("org.apache.logging.log4j:log4j-core") testRuntimeOnly("org.apache.logging.log4j:log4j-slf4j-impl") testRuntimeOnly("org.apache.logging.log4j:log4j-jul") diff --git a/spring-faces/src/main/java/org/springframework/faces/config/AbstractFacesFlowConfiguration.java b/spring-faces/src/main/java/org/springframework/faces/config/AbstractFacesFlowConfiguration.java index 86b42bc4..925c9f40 100644 --- a/spring-faces/src/main/java/org/springframework/faces/config/AbstractFacesFlowConfiguration.java +++ b/spring-faces/src/main/java/org/springframework/faces/config/AbstractFacesFlowConfiguration.java @@ -46,7 +46,7 @@ import org.springframework.webflow.executor.FlowExecutor; * *

* Also registers a HandlerMapping bean to provide JSF 2 resource handling at - * {@code "/javax.faces.resource/**"} or Rich Faces at {@code "/rfRes/**"}. + * {@code "/jakarta.faces.resource/**"} or Rich Faces at {@code "/rfRes/**"}. * @author Rossen Stoyanchev * @since 2.4 @@ -107,7 +107,7 @@ public class AbstractFacesFlowConfiguration implements ApplicationContextAware { public SimpleUrlHandlerMapping jsrResourceHandlerMapping() { Map urlMap = new HashMap<>(); - urlMap.put("/javax.faces.resource/**", jsfResourceRequestHandler()); + urlMap.put("/jakarta.faces.resource/**", jsfResourceRequestHandler()); if (isRichFacesPresent) { urlMap.put("/rfRes/**", jsfResourceRequestHandler()); } diff --git a/spring-faces/src/main/java/org/springframework/faces/config/ResourcesBeanDefinitionParser.java b/spring-faces/src/main/java/org/springframework/faces/config/ResourcesBeanDefinitionParser.java index 28c745b8..3788293a 100644 --- a/spring-faces/src/main/java/org/springframework/faces/config/ResourcesBeanDefinitionParser.java +++ b/spring-faces/src/main/java/org/springframework/faces/config/ResourcesBeanDefinitionParser.java @@ -76,7 +76,7 @@ public class ResourcesBeanDefinitionParser implements BeanDefinitionParser { private void registerHandlerMappings(Element element, Object source, ParserContext parserContext) { Map urlMap = new ManagedMap<>(); - urlMap.put("/javax.faces.resource/**", SERVLET_RESOURCE_HANDLER_BEAN_NAME); + urlMap.put("/jakarta.faces.resource/**", SERVLET_RESOURCE_HANDLER_BEAN_NAME); if (isRichFacesPresent) { urlMap.put("/rfRes/**", SERVLET_RESOURCE_HANDLER_BEAN_NAME); @@ -92,4 +92,4 @@ public class ResourcesBeanDefinitionParser implements BeanDefinitionParser { parserContext.getReaderContext().registerWithGeneratedName(beanDefinition); } -} \ No newline at end of file +} diff --git a/spring-faces/src/main/java/org/springframework/faces/model/ManySelectionTrackingListDataModel.java b/spring-faces/src/main/java/org/springframework/faces/model/ManySelectionTrackingListDataModel.java index adc3d940..8721fa81 100644 --- a/spring-faces/src/main/java/org/springframework/faces/model/ManySelectionTrackingListDataModel.java +++ b/spring-faces/src/main/java/org/springframework/faces/model/ManySelectionTrackingListDataModel.java @@ -18,10 +18,10 @@ package org.springframework.faces.model; import java.util.ArrayList; import java.util.List; -import javax.faces.model.DataModel; - import org.springframework.util.Assert; +import jakarta.faces.model.DataModel; + /** * A {@link DataModel} implementation that tracks the currently selected rows, allowing any number of rows to be * selected at one time. diff --git a/spring-faces/src/main/java/org/springframework/faces/model/OneSelectionTrackingListDataModel.java b/spring-faces/src/main/java/org/springframework/faces/model/OneSelectionTrackingListDataModel.java index 2fc2168f..ef5479f8 100644 --- a/spring-faces/src/main/java/org/springframework/faces/model/OneSelectionTrackingListDataModel.java +++ b/spring-faces/src/main/java/org/springframework/faces/model/OneSelectionTrackingListDataModel.java @@ -18,16 +18,15 @@ package org.springframework.faces.model; import java.util.ArrayList; import java.util.List; -import javax.faces.model.DataModel; - import org.springframework.util.Assert; +import jakarta.faces.model.DataModel; + /** * A {@link DataModel} implementation that tracks the currently selected row, allowing only one selection at a time. * * @author Jeremy Grelle */ -@SuppressWarnings("serial") public class OneSelectionTrackingListDataModel extends SerializableListDataModel implements SelectionAware { /** @@ -70,7 +69,7 @@ public class OneSelectionTrackingListDataModel extends SerializableListDataMo if (!rowSelected) { this.selections.remove(getRowData()); - } else if (rowSelected && !this.selections.contains(getRowData())) { + } else if (!this.selections.contains(getRowData())) { this.selections.clear(); this.selections.add(getRowData()); } diff --git a/spring-faces/src/main/java/org/springframework/faces/model/SelectionAware.java b/spring-faces/src/main/java/org/springframework/faces/model/SelectionAware.java index 5e8db24e..4d44d51b 100644 --- a/spring-faces/src/main/java/org/springframework/faces/model/SelectionAware.java +++ b/spring-faces/src/main/java/org/springframework/faces/model/SelectionAware.java @@ -17,7 +17,7 @@ package org.springframework.faces.model; import java.util.List; -import javax.faces.model.DataModel; +import jakarta.faces.model.DataModel; /** * Interface for {@link DataModel} implementations that need to track selected rows. diff --git a/spring-faces/src/main/java/org/springframework/faces/model/SelectionTrackingActionListener.java b/spring-faces/src/main/java/org/springframework/faces/model/SelectionTrackingActionListener.java index ce572fca..d514ced0 100644 --- a/spring-faces/src/main/java/org/springframework/faces/model/SelectionTrackingActionListener.java +++ b/spring-faces/src/main/java/org/springframework/faces/model/SelectionTrackingActionListener.java @@ -19,19 +19,19 @@ import java.lang.reflect.Method; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import javax.faces.component.UIComponent; -import javax.faces.component.UIData; -import javax.faces.component.UIViewRoot; -import javax.faces.event.AbortProcessingException; -import javax.faces.event.ActionEvent; -import javax.faces.event.ActionListener; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.faces.webflow.FlowActionListener; import org.springframework.util.ClassUtils; import org.springframework.util.ReflectionUtils; +import jakarta.faces.component.UIComponent; +import jakarta.faces.component.UIData; +import jakarta.faces.component.UIViewRoot; +import jakarta.faces.event.AbortProcessingException; +import jakarta.faces.event.ActionEvent; +import jakarta.faces.event.ActionListener; + /** * Custom {@link ActionListener} that inspects the {@link UIComponent} that signaled the current {@link ActionEvent} to * determine whether it is a child of any iterator type of component (such as {@link UIData}) that uses a @@ -72,7 +72,7 @@ public class SelectionTrackingActionListener implements ActionListener { Method valueAccessor = getValueMethod(parent.getClass()); if (valueAccessor != null) { Object value = ReflectionUtils.invokeMethod(valueAccessor, parent); - if (value != null && value instanceof SelectionAware) { + if (value instanceof SelectionAware) { ((SelectionAware) value).setCurrentRowSelected(true); if (logger.isDebugEnabled()) { logger.debug("Row selection has been set on the current SelectionAware data model."); diff --git a/spring-faces/src/main/java/org/springframework/faces/model/SerializableListDataModel.java b/spring-faces/src/main/java/org/springframework/faces/model/SerializableListDataModel.java index bbdbbcf0..d4631e16 100644 --- a/spring-faces/src/main/java/org/springframework/faces/model/SerializableListDataModel.java +++ b/spring-faces/src/main/java/org/springframework/faces/model/SerializableListDataModel.java @@ -22,17 +22,16 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; -import javax.faces.model.ListDataModel; - import org.springframework.util.Assert; +import jakarta.faces.model.ListDataModel; + /** * A simple {@link ListDataModel List-to-JSF-DataModel} adapter that is also {@link Serializable}. * * @author Jeremy Grelle * @author Phillip Webb */ -@SuppressWarnings("serial") public class SerializableListDataModel extends ListDataModel implements Serializable { diff --git a/spring-faces/src/main/java/org/springframework/faces/model/converter/DataModelConverter.java b/spring-faces/src/main/java/org/springframework/faces/model/converter/DataModelConverter.java index 99b69c18..bda04c75 100644 --- a/spring-faces/src/main/java/org/springframework/faces/model/converter/DataModelConverter.java +++ b/spring-faces/src/main/java/org/springframework/faces/model/converter/DataModelConverter.java @@ -18,12 +18,12 @@ package org.springframework.faces.model.converter; import java.lang.reflect.Constructor; import java.util.List; -import javax.faces.model.DataModel; - import org.springframework.binding.convert.converters.Converter; import org.springframework.faces.model.OneSelectionTrackingListDataModel; import org.springframework.util.ClassUtils; +import jakarta.faces.model.DataModel; + /** * A {@link Converter} implementation that converts an Object, Object array, or {@link List} into a JSF * {@link DataModel}. diff --git a/spring-faces/src/main/java/org/springframework/faces/model/converter/FacesConversionService.java b/spring-faces/src/main/java/org/springframework/faces/model/converter/FacesConversionService.java index d5155d7d..cf1ffbed 100644 --- a/spring-faces/src/main/java/org/springframework/faces/model/converter/FacesConversionService.java +++ b/spring-faces/src/main/java/org/springframework/faces/model/converter/FacesConversionService.java @@ -15,7 +15,7 @@ */ package org.springframework.faces.model.converter; -import javax.faces.model.DataModel; +import jakarta.faces.model.DataModel; import org.springframework.binding.convert.service.DefaultConversionService; import org.springframework.core.convert.ConversionService; diff --git a/spring-faces/src/main/java/org/springframework/faces/mvc/JsfView.java b/spring-faces/src/main/java/org/springframework/faces/mvc/JsfView.java index d789612e..f2e838f2 100644 --- a/spring-faces/src/main/java/org/springframework/faces/mvc/JsfView.java +++ b/spring-faces/src/main/java/org/springframework/faces/mvc/JsfView.java @@ -16,14 +16,6 @@ package org.springframework.faces.mvc; import java.util.Map; -import javax.faces.application.ViewHandler; -import javax.faces.component.UIViewRoot; -import javax.faces.context.FacesContext; -import javax.faces.event.PhaseId; -import javax.faces.lifecycle.Lifecycle; -import javax.faces.lifecycle.LifecycleFactory; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.springframework.faces.webflow.FacesContextHelper; import org.springframework.faces.webflow.JsfUtils; @@ -31,6 +23,15 @@ import org.springframework.util.Assert; import org.springframework.web.servlet.support.RequestContextUtils; import org.springframework.web.servlet.view.AbstractUrlBasedView; +import jakarta.faces.application.ViewHandler; +import jakarta.faces.component.UIViewRoot; +import jakarta.faces.context.FacesContext; +import jakarta.faces.event.PhaseId; +import jakarta.faces.lifecycle.Lifecycle; +import jakarta.faces.lifecycle.LifecycleFactory; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + /** * JSF View that renders a transient (stateless) JSF view template. The UIViewRoot will not be saved and thus the JSF * lifecycle will not be able to be invoked on postback. @@ -47,7 +48,7 @@ public class JsfView extends AbstractUrlBasedView { } protected void renderMergedOutputModel(Map model, HttpServletRequest request, - HttpServletResponse response) throws Exception { + HttpServletResponse response) { FacesContextHelper facesContextHelper = new FacesContextHelper(); FacesContext facesContext = facesContextHelper.getFacesContext(getServletContext(), request, response); @@ -83,6 +84,7 @@ public class JsfView extends AbstractUrlBasedView { Map requestMap = facesContext.getExternalContext().getRequestMap(); for (Map.Entry entry : model.entrySet()) { // JSF does not insist that putAll is implemented, hence we use individual put calls + //noinspection UseBulkOperation requestMap.put(entry.getKey(), entry.getValue()); } } diff --git a/spring-faces/src/main/java/org/springframework/faces/security/FaceletsAuthorizeTag.java b/spring-faces/src/main/java/org/springframework/faces/security/FaceletsAuthorizeTag.java index 6bc3fb7d..d7f65a8f 100644 --- a/spring-faces/src/main/java/org/springframework/faces/security/FaceletsAuthorizeTag.java +++ b/spring-faces/src/main/java/org/springframework/faces/security/FaceletsAuthorizeTag.java @@ -15,19 +15,19 @@ */ package org.springframework.faces.security; -import javax.el.ValueExpression; -import javax.faces.context.FacesContext; -import javax.faces.view.facelets.FaceletContext; -import javax.faces.view.facelets.TagAttribute; -import javax.faces.view.facelets.TagHandler; -import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - import org.springframework.security.taglibs.authz.AbstractAuthorizeTag; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; +import jakarta.el.ValueExpression; +import jakarta.faces.context.FacesContext; +import jakarta.faces.view.facelets.FaceletContext; +import jakarta.faces.view.facelets.TagAttribute; +import jakarta.faces.view.facelets.TagHandler; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; + /** * A concrete implementation of {@link AbstractAuthorizeTag} for use with standard Facelets rendering technology. * @@ -131,7 +131,7 @@ public class FaceletsAuthorizeTag extends AbstractAuthorizeTag { if (tagAttribute != null) { if (evaluate) { ValueExpression expression = tagAttribute.getValueExpression(faceletContext, String.class); - value = (String) expression.getValue(faceletContext.getFacesContext().getELContext()); + value = expression.getValue(faceletContext.getFacesContext().getELContext()); } else { value = tagAttribute.getValue(); } diff --git a/spring-faces/src/main/java/org/springframework/faces/security/FaceletsAuthorizeTagHandler.java b/spring-faces/src/main/java/org/springframework/faces/security/FaceletsAuthorizeTagHandler.java index 9382db80..8a2ab5b6 100644 --- a/spring-faces/src/main/java/org/springframework/faces/security/FaceletsAuthorizeTagHandler.java +++ b/spring-faces/src/main/java/org/springframework/faces/security/FaceletsAuthorizeTagHandler.java @@ -17,11 +17,11 @@ package org.springframework.faces.security; import java.io.IOException; -import javax.faces.component.UIComponent; -import javax.faces.view.facelets.FaceletContext; -import javax.faces.view.facelets.TagAttribute; -import javax.faces.view.facelets.TagConfig; -import javax.faces.view.facelets.TagHandler; +import jakarta.faces.component.UIComponent; +import jakarta.faces.view.facelets.FaceletContext; +import jakarta.faces.view.facelets.TagAttribute; +import jakarta.faces.view.facelets.TagConfig; +import jakarta.faces.view.facelets.TagHandler; import org.springframework.security.core.context.SecurityContextHolder; diff --git a/spring-faces/src/main/java/org/springframework/faces/support/LifecycleWrapper.java b/spring-faces/src/main/java/org/springframework/faces/support/LifecycleWrapper.java index 5c0ec9e8..09464cc6 100644 --- a/spring-faces/src/main/java/org/springframework/faces/support/LifecycleWrapper.java +++ b/spring-faces/src/main/java/org/springframework/faces/support/LifecycleWrapper.java @@ -15,11 +15,11 @@ */ package org.springframework.faces.support; -import javax.faces.FacesException; -import javax.faces.FacesWrapper; -import javax.faces.context.FacesContext; -import javax.faces.event.PhaseListener; -import javax.faces.lifecycle.Lifecycle; +import jakarta.faces.FacesException; +import jakarta.faces.FacesWrapper; +import jakarta.faces.context.FacesContext; +import jakarta.faces.event.PhaseListener; +import jakarta.faces.lifecycle.Lifecycle; /** * Provides a simple implementation of {@link Lifecycle} that can be subclassed by developers wishing to provide diff --git a/spring-faces/src/main/java/org/springframework/faces/support/RequestLoggingPhaseListener.java b/spring-faces/src/main/java/org/springframework/faces/support/RequestLoggingPhaseListener.java index c85b58e6..e0af8346 100644 --- a/spring-faces/src/main/java/org/springframework/faces/support/RequestLoggingPhaseListener.java +++ b/spring-faces/src/main/java/org/springframework/faces/support/RequestLoggingPhaseListener.java @@ -15,13 +15,13 @@ */ package org.springframework.faces.support; -import javax.faces.event.PhaseEvent; -import javax.faces.event.PhaseId; -import javax.faces.event.PhaseListener; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import jakarta.faces.event.PhaseEvent; +import jakarta.faces.event.PhaseId; +import jakarta.faces.event.PhaseListener; + /** * {@link PhaseListener} that logs the execution of the individual phases of the JSF lifecycle. Useful during JSF * application development in order to detect unreported JSF errors that cause the lifecycle to short-circuit. Turn @@ -29,7 +29,6 @@ import org.apache.commons.logging.LogFactory; * * @author Jeremy Grelle */ -@SuppressWarnings("serial") public class RequestLoggingPhaseListener implements PhaseListener { private static final Log logger = LogFactory.getLog(RequestLoggingPhaseListener.class); diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FacesContextHelper.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FacesContextHelper.java index 7ba1914f..b595c650 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FacesContextHelper.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FacesContextHelper.java @@ -16,9 +16,9 @@ package org.springframework.faces.webflow; -import javax.faces.context.FacesContext; -import javax.faces.context.FacesContextFactory; -import javax.faces.lifecycle.Lifecycle; +import jakarta.faces.context.FacesContext; +import jakarta.faces.context.FacesContextFactory; +import jakarta.faces.lifecycle.Lifecycle; /** * Provides helper methods for getting a FacesContext that is suitable for use outside of Web Flow. Inside a running @@ -44,7 +44,7 @@ public class FacesContextHelper { * @see #release */ public FacesContext getFacesContext(Object context, Object request, Object response) { - FacesContext facesContext = null; + FacesContext facesContext; if (FacesContext.getCurrentInstance() != null) { facesContext = FacesContext.getCurrentInstance(); } else { diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowActionListener.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowActionListener.java index 37e68276..79f931ba 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowActionListener.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowActionListener.java @@ -18,12 +18,12 @@ package org.springframework.faces.webflow; import java.util.ArrayList; import java.util.List; -import javax.faces.application.NavigationHandler; -import javax.faces.component.ActionSource2; -import javax.faces.context.FacesContext; -import javax.faces.event.AbortProcessingException; -import javax.faces.event.ActionEvent; -import javax.faces.event.ActionListener; +import jakarta.faces.application.NavigationHandler; +import jakarta.faces.component.ActionSource2; +import jakarta.faces.context.FacesContext; +import jakarta.faces.event.AbortProcessingException; +import jakarta.faces.event.ActionEvent; +import jakarta.faces.event.ActionListener; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -43,7 +43,6 @@ import org.springframework.webflow.validation.WebFlowMessageCodesResolver; /** * The default {@link ActionListener} implementation to be used with Web Flow. - * * This implementation bypasses the JSF {@link NavigationHandler} mechanism to instead let the event be handled directly * by Web Flow. *

diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowApplication.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowApplication.java index 874f4e6b..9d5b8b95 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowApplication.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowApplication.java @@ -15,10 +15,10 @@ */ package org.springframework.faces.webflow; -import javax.faces.application.Application; -import javax.faces.application.ApplicationWrapper; -import javax.faces.application.StateManager; -import javax.faces.application.ViewHandler; +import jakarta.faces.application.Application; +import jakarta.faces.application.ApplicationWrapper; +import jakarta.faces.application.StateManager; +import jakarta.faces.application.ViewHandler; import org.springframework.util.Assert; diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowApplicationFactory.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowApplicationFactory.java index 560aee9a..1785eb70 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowApplicationFactory.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowApplicationFactory.java @@ -15,11 +15,11 @@ */ package org.springframework.faces.webflow; -import javax.faces.application.Application; -import javax.faces.application.ApplicationFactory; - import org.springframework.util.Assert; +import jakarta.faces.application.Application; +import jakarta.faces.application.ApplicationFactory; + /** * Custom {@link ApplicationFactory} that ensures the FlowApplication is the first {@link Application} in the chain, * which in turn guarantees the install order for other JSF components. diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowELResolver.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowELResolver.java index 01a9ea8b..37954459 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowELResolver.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowELResolver.java @@ -15,8 +15,8 @@ */ package org.springframework.faces.webflow; -import javax.el.CompositeELResolver; -import javax.el.ELResolver; +import jakarta.el.CompositeELResolver; +import jakarta.el.ELResolver; import org.springframework.binding.expression.el.MapAdaptableELResolver; import org.springframework.webflow.expression.el.FlowResourceELResolver; diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowExternalContext.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowExternalContext.java index 9eb92629..e0939eb9 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowExternalContext.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowExternalContext.java @@ -17,9 +17,9 @@ package org.springframework.faces.webflow; import java.io.IOException; -import javax.faces.context.ExternalContext; -import javax.faces.context.ExternalContextWrapper; -import javax.servlet.http.HttpServletResponse; +import jakarta.faces.context.ExternalContext; +import jakarta.faces.context.ExternalContextWrapper; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContext.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContext.java index 43f26dcc..21354691 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContext.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContext.java @@ -29,14 +29,14 @@ import java.util.Locale; import java.util.Map; import java.util.Set; -import javax.el.ELContext; -import javax.faces.application.FacesMessage; -import javax.faces.context.ExternalContext; -import javax.faces.context.FacesContext; -import javax.faces.context.FacesContextWrapper; -import javax.faces.context.PartialViewContext; -import javax.faces.context.PartialViewContextFactory; -import javax.faces.lifecycle.Lifecycle; +import jakarta.el.ELContext; +import jakarta.faces.application.FacesMessage; +import jakarta.faces.context.ExternalContext; +import jakarta.faces.context.FacesContext; +import jakarta.faces.context.FacesContextWrapper; +import jakarta.faces.context.PartialViewContext; +import jakarta.faces.context.PartialViewContextFactory; +import jakarta.faces.lifecycle.Lifecycle; import org.springframework.binding.message.Message; import org.springframework.binding.message.MessageResolver; @@ -130,7 +130,7 @@ public class FlowFacesContext extends FacesContextWrapper { public boolean getRenderResponse() { Boolean renderResponse = this.context.getFlashScope().getBoolean(RENDER_RESPONSE_KEY); - return (renderResponse == null ? false : renderResponse); + return (renderResponse != null && renderResponse); } public boolean getResponseComplete() { @@ -170,7 +170,7 @@ public class FlowFacesContext extends FacesContextWrapper { Set clientIds = new LinkedHashSet<>(); for (Message message : this.context.getMessageContext().getAllMessages()) { Object source = message.getSource(); - if (source != null && source instanceof String) { + if (source instanceof String) { clientIds.add((String) source); } else if (message.getSource() instanceof FacesMessageSource) { clientIds.add(((FacesMessageSource) source).getClientId()); @@ -293,9 +293,8 @@ public class FlowFacesContext extends FacesContextWrapper { * uncommon for FacesMessages to be changed after they have been added to a FacesContext, for * example, from a PhaseListener. *

- * NOTE: Only {@link javax.faces.application.FacesMessage} instances are directly adapted, any subclasses will be + * NOTE: Only {@link jakarta.faces.application.FacesMessage} instances are directly adapted, any subclasses will be * converted to the standard FacesMessage implementation. This is to protect against bugs such as SWF-1073. - * * For convenience this class also implements the {@link MessageResolver} interface. */ protected static class FlowFacesMessage extends Message implements MessageResolver { @@ -310,8 +309,8 @@ public class FlowFacesContext extends FacesContextWrapper { /** * Use standard faces message as required to protect against bugs such as SWF-1073. * - * @param message {@link javax.faces.application.FacesMessage} or subclass. - * @return {@link javax.faces.application.FacesMessage} instance + * @param message {@link jakarta.faces.application.FacesMessage} or subclass. + * @return {@link jakarta.faces.application.FacesMessage} instance */ private FacesMessage asStandardFacesMessageInstance(FacesMessage message) { if (FacesMessage.class.equals(message.getClass())) { diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContextLifecycleListener.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContextLifecycleListener.java index 20242689..79a30c42 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContextLifecycleListener.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContextLifecycleListener.java @@ -15,7 +15,7 @@ */ package org.springframework.faces.webflow; -import javax.faces.context.FacesContext; +import jakarta.faces.context.FacesContext; import org.springframework.webflow.execution.FlowExecutionListener; import org.springframework.webflow.execution.RequestContext; diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowLifecycle.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowLifecycle.java index 51bbb4c1..c172149b 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowLifecycle.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowLifecycle.java @@ -15,11 +15,11 @@ */ package org.springframework.faces.webflow; -import javax.faces.FacesException; -import javax.faces.context.FacesContext; -import javax.faces.event.PhaseId; -import javax.faces.lifecycle.Lifecycle; -import javax.faces.lifecycle.LifecycleFactory; +import jakarta.faces.FacesException; +import jakarta.faces.context.FacesContext; +import jakarta.faces.event.PhaseId; +import jakarta.faces.lifecycle.Lifecycle; +import jakarta.faces.lifecycle.LifecycleFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -74,10 +74,8 @@ public class FlowLifecycle extends LifecycleWrapper { private boolean skipPhase(FacesContext context, PhaseId phaseId) { if (context.getResponseComplete()) { return true; - } else if (context.getRenderResponse()) { - return true; } else { - return false; + return context.getRenderResponse(); } } diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowPartialViewContext.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowPartialViewContext.java index a7d6f265..ba76140d 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowPartialViewContext.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowPartialViewContext.java @@ -19,8 +19,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import javax.faces.context.PartialViewContext; -import javax.faces.context.PartialViewContextWrapper; +import jakarta.faces.context.PartialViewContext; +import jakarta.faces.context.PartialViewContextWrapper; import org.springframework.webflow.execution.RequestContext; import org.springframework.webflow.execution.RequestContextHolder; diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowRenderKit.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowRenderKit.java index f7d3df4e..74ad241e 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowRenderKit.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowRenderKit.java @@ -15,9 +15,9 @@ */ package org.springframework.faces.webflow; -import javax.faces.render.RenderKit; -import javax.faces.render.RenderKitWrapper; -import javax.faces.render.ResponseStateManager; +import jakarta.faces.render.RenderKit; +import jakarta.faces.render.RenderKitWrapper; +import jakarta.faces.render.ResponseStateManager; /** * A render kit implementation that ensures use of Web Flow's FlowViewResponseStateManager, which takes over reading and diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowResourceHandler.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowResourceHandler.java index 75049f3c..67d436c7 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowResourceHandler.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowResourceHandler.java @@ -17,17 +17,18 @@ package org.springframework.faces.webflow; import java.io.IOException; import java.net.URL; -import javax.faces.FacesException; -import javax.faces.application.ResourceHandler; -import javax.faces.application.ResourceHandlerWrapper; -import javax.faces.application.ViewResource; -import javax.faces.context.FacesContext; import org.springframework.context.ApplicationContext; import org.springframework.core.io.Resource; import org.springframework.webflow.execution.RequestContext; import org.springframework.webflow.execution.RequestContextHolder; +import jakarta.faces.FacesException; +import jakarta.faces.application.ResourceHandler; +import jakarta.faces.application.ResourceHandlerWrapper; +import jakarta.faces.application.ViewResource; +import jakarta.faces.context.FacesContext; + /** * Resolves Facelets resources using Spring Resource paths such as "classpath:foo.xhtml". *

This handler is auto-configured in the faces-config.xml bundled with the diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowResourceResolver.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowResourceResolver.java deleted file mode 100644 index 727070e2..00000000 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowResourceResolver.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright 2004-2012 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.faces.webflow; - -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javax.faces.FacesException; - -import org.springframework.context.ApplicationContext; -import org.springframework.core.io.Resource; -import org.springframework.util.ClassUtils; -import org.springframework.webflow.execution.RequestContext; -import org.springframework.webflow.execution.RequestContextHolder; - -/** - * Resolves Facelets templates using Spring Resource paths such as "classpath:foo.xhtml". - * Configure it via a context parameter in web.xml: - *

- * <context-param/> 
- * 	<param-name>facelets.RESOURCE_RESOLVER</param-name>
- * 	<param-value>org.springframework.faces.webflow.FlowResourceResolver</param-value> 
- * </context-param>
- * 
- * @deprecated as of 2.5 in favor of {@link FlowResourceHandler}. - */ -@Deprecated -@SuppressWarnings("deprecation") -public class FlowResourceResolver extends javax.faces.view.facelets.ResourceResolver { - - /** - * All known {@code ResourceResolver} implementations in the priority order - */ - private static final List RESOLVERS_CLASSES; - static { - List resolvers = new ArrayList<>(); - resolvers.add("com.sun.faces.facelets.impl.DefaultResourceResolver"); - resolvers.add("org.apache.myfaces.view.facelets.impl.DefaultResourceResolver"); - RESOLVERS_CLASSES = Collections.unmodifiableList(resolvers); - } - - private final javax.faces.view.facelets.ResourceResolver delegateResolver; - - public FlowResourceResolver() { - this.delegateResolver = createDelegateResolver(); - } - - private javax.faces.view.facelets.ResourceResolver createDelegateResolver() { - try { - ClassLoader classLoader = getClass().getClassLoader(); - for (String resolverClass : RESOLVERS_CLASSES) { - if (ClassUtils.isPresent(resolverClass, classLoader)) { - return (javax.faces.view.facelets.ResourceResolver) - ClassUtils.forName(resolverClass, classLoader).newInstance(); - } - } - } catch (Exception e) { - } - throw new IllegalStateException("Unable to find Default ResourceResolver"); - } - - public URL resolveUrl(String path) { - - if (!JsfUtils.isFlowRequest()) { - return this.delegateResolver.resolveUrl(path); - } - - try { - RequestContext context = RequestContextHolder.getRequestContext(); - ApplicationContext flowContext = context.getActiveFlow().getApplicationContext(); - if (flowContext == null) { - throw new IllegalStateException("A Flow ApplicationContext is required to resolve Flow View Resources"); - } - - ApplicationContext appContext = flowContext.getParent(); - Resource viewResource = appContext.getResource(path); - if (viewResource.exists()) { - return viewResource.getURL(); - } else { - return this.delegateResolver.resolveUrl(path); - } - } catch (IOException ex) { - throw new FacesException(ex); - } - } - -} diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowResponseStateManager.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowResponseStateManager.java index dff335d7..31b9fa94 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowResponseStateManager.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowResponseStateManager.java @@ -18,11 +18,11 @@ package org.springframework.faces.webflow; import java.io.IOException; import java.io.Writer; -import javax.faces.FacesWrapper; -import javax.faces.context.FacesContext; -import javax.faces.context.ResponseWriter; -import javax.faces.render.RenderKitFactory; -import javax.faces.render.ResponseStateManager; +import jakarta.faces.FacesWrapper; +import jakarta.faces.context.FacesContext; +import jakarta.faces.context.ResponseWriter; +import jakarta.faces.render.RenderKitFactory; +import jakarta.faces.render.ResponseStateManager; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -94,7 +94,7 @@ public class FlowResponseStateManager extends ResponseStateManager } /** - * This method returns the flow execution key to be used as the value for the "javax.faces.ViewState" hidden input + * This method returns the flow execution key to be used as the value for the "jakarta.faces.ViewState" hidden input * field. The value of this key is not important because JSF state is stored in a Web Flow managed view scoped * variable. However the presence of the view state parameter alone is important for triggering actions. Hence we * return the most logical value, which is the flow execution key. diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowStateManager.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowStateManager.java index 28822ed6..55090b5c 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowStateManager.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowStateManager.java @@ -15,9 +15,9 @@ */ package org.springframework.faces.webflow; -import javax.faces.application.StateManager; -import javax.faces.application.StateManagerWrapper; -import javax.faces.context.FacesContext; +import jakarta.faces.application.StateManager; +import jakarta.faces.application.StateManagerWrapper; +import jakarta.faces.context.FacesContext; /** * Custom {@link StateManager} that manages ensures web flow's state is always stored server side. @@ -33,6 +33,7 @@ public class FlowStateManager extends StateManagerWrapper { private final StateManager wrapped; public FlowStateManager(StateManager wrapped) { + super(wrapped); this.wrapped = wrapped; } diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowViewHandler.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowViewHandler.java index 73b559c3..65c060a7 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowViewHandler.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowViewHandler.java @@ -16,10 +16,10 @@ package org.springframework.faces.webflow; import java.util.Locale; -import javax.faces.application.ViewHandler; -import javax.faces.application.ViewHandlerWrapper; -import javax.faces.component.UIViewRoot; -import javax.faces.context.FacesContext; +import jakarta.faces.application.ViewHandler; +import jakarta.faces.application.ViewHandlerWrapper; +import jakarta.faces.component.UIViewRoot; +import jakarta.faces.context.FacesContext; import org.springframework.context.ApplicationContext; import org.springframework.core.io.ContextResource; diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfAjaxHandler.java b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfAjaxHandler.java index de93d225..337345cd 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfAjaxHandler.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfAjaxHandler.java @@ -18,17 +18,17 @@ package org.springframework.faces.webflow; import java.io.IOException; import java.io.Writer; -import javax.faces.context.ExternalContext; -import javax.faces.context.FacesContext; -import javax.faces.context.PartialResponseWriter; -import javax.faces.context.ResponseWriter; -import javax.faces.render.RenderKit; -import javax.faces.render.RenderKitFactory; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.springframework.webflow.context.servlet.AbstractAjaxHandler; +import jakarta.faces.context.ExternalContext; +import jakarta.faces.context.FacesContext; +import jakarta.faces.context.PartialResponseWriter; +import jakarta.faces.context.ResponseWriter; +import jakarta.faces.render.RenderKit; +import jakarta.faces.render.RenderKitFactory; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + /** * Ajax handler for JSF 2 requests that can identify JSF 2 Ajax requests and send redirect instructions back to the * client by including a redirect instruction in the content of the response. @@ -54,7 +54,7 @@ public class JsfAjaxHandler extends AbstractAjaxHandler { return facesContext.getPartialViewContext().isAjaxRequest(); } else { String header = request.getHeader("Faces-Request"); - String param = request.getParameter("javax.faces.partial.ajax"); + String param = request.getParameter("jakarta.faces.partial.ajax"); return "partial/ajax".equals(header) || "true".equals(param); } } diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfFlowHandlerAdapter.java b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfFlowHandlerAdapter.java index ca50a4e0..1c7db047 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfFlowHandlerAdapter.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfFlowHandlerAdapter.java @@ -15,9 +15,9 @@ */ package org.springframework.faces.webflow; -import javax.faces.context.FacesContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.faces.context.FacesContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.webflow.context.servlet.AjaxHandler; import org.springframework.web.servlet.ModelAndView; diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfManagedBeanAwareELExpressionParser.java b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfManagedBeanAwareELExpressionParser.java index 3046c5cf..64b00f24 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfManagedBeanAwareELExpressionParser.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfManagedBeanAwareELExpressionParser.java @@ -18,11 +18,11 @@ package org.springframework.faces.webflow; import java.util.ArrayList; import java.util.List; -import javax.el.ELContext; -import javax.el.ELResolver; -import javax.el.ExpressionFactory; -import javax.el.FunctionMapper; -import javax.el.VariableMapper; +import jakarta.el.ELContext; +import jakarta.el.ELResolver; +import jakarta.el.ExpressionFactory; +import jakarta.el.FunctionMapper; +import jakarta.el.VariableMapper; import org.springframework.binding.expression.el.DefaultELResolver; import org.springframework.binding.expression.el.ELContextFactory; diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfManagedBeanPropertyAccessor.java b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfManagedBeanPropertyAccessor.java index 0f5155a1..2d0a7dc6 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfManagedBeanPropertyAccessor.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfManagedBeanPropertyAccessor.java @@ -15,10 +15,10 @@ */ package org.springframework.faces.webflow; -import javax.el.ELContext; -import javax.el.ExpressionFactory; -import javax.el.ValueExpression; -import javax.faces.context.FacesContext; +import jakarta.el.ELContext; +import jakarta.el.ExpressionFactory; +import jakarta.el.ValueExpression; +import jakarta.faces.context.FacesContext; import org.springframework.expression.EvaluationContext; import org.springframework.expression.PropertyAccessor; diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfManagedBeanResolver.java b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfManagedBeanResolver.java index 521a6cc5..dedd13b0 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfManagedBeanResolver.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfManagedBeanResolver.java @@ -18,10 +18,10 @@ package org.springframework.faces.webflow; import java.beans.FeatureDescriptor; import java.util.Iterator; -import javax.el.ELContext; -import javax.el.ELResolver; -import javax.faces.application.Application; -import javax.faces.context.FacesContext; +import jakarta.el.ELContext; +import jakarta.el.ELResolver; +import jakarta.faces.application.Application; +import jakarta.faces.context.FacesContext; import org.springframework.util.Assert; import org.springframework.webflow.execution.RequestContext; @@ -109,8 +109,7 @@ public class JsfManagedBeanResolver extends ELResolver { RequestContext requestContext = RequestContextHolder.getRequestContext(); Assert.notNull(requestContext, "RequestContext cannot be null - This resolver is only intended to be invoked " + "from an active Flow Execution."); - FacesContext facesContext = FlowFacesContext.newInstance(requestContext, FlowLifecycle.newInstance()); - return facesContext; + return FlowFacesContext.newInstance(requestContext, FlowLifecycle.newInstance()); } /** diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfResourceRequestHandler.java b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfResourceRequestHandler.java index 99070338..86fe331b 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfResourceRequestHandler.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfResourceRequestHandler.java @@ -16,14 +16,15 @@ package org.springframework.faces.webflow; import java.io.IOException; -import javax.faces.application.ResourceHandler; -import javax.faces.context.FacesContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.springframework.web.HttpRequestHandler; import org.springframework.web.context.support.WebApplicationObjectSupport; +import jakarta.faces.application.ResourceHandler; +import jakarta.faces.context.FacesContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + /** * Handles a request by delegating to the JSF ResourceHandler, which serves web * application and classpath resources such as images, CSS and JavaScript files diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfRuntimeInformation.java b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfRuntimeInformation.java index bc1a0327..e72cfe19 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfRuntimeInformation.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfRuntimeInformation.java @@ -16,11 +16,11 @@ package org.springframework.faces.webflow; -import javax.faces.context.FacesContext; -import javax.faces.context.FacesContextWrapper; - import org.springframework.util.ClassUtils; +import jakarta.faces.context.FacesContext; +import jakarta.faces.context.FacesContextWrapper; + /** * Helper class to provide information about the JSF runtime environment such as * JSF version and implementation. diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfUtils.java b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfUtils.java index 0de91aa8..d40489af 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfUtils.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfUtils.java @@ -17,23 +17,23 @@ package org.springframework.faces.webflow; import java.util.HashMap; import java.util.Map; -import javax.faces.FactoryFinder; -import javax.faces.application.ApplicationFactory; -import javax.faces.component.visit.VisitContextFactory; -import javax.faces.context.ExceptionHandlerFactory; -import javax.faces.context.ExternalContextFactory; -import javax.faces.context.FacesContext; -import javax.faces.context.FacesContextFactory; -import javax.faces.context.PartialViewContextFactory; -import javax.faces.event.PhaseEvent; -import javax.faces.event.PhaseId; -import javax.faces.event.PhaseListener; -import javax.faces.lifecycle.Lifecycle; -import javax.faces.lifecycle.LifecycleFactory; -import javax.faces.render.RenderKitFactory; -import javax.faces.view.ViewDeclarationLanguageFactory; -import javax.faces.view.facelets.FaceletCacheFactory; -import javax.faces.view.facelets.TagHandlerDelegateFactory; +import jakarta.faces.FactoryFinder; +import jakarta.faces.application.ApplicationFactory; +import jakarta.faces.component.visit.VisitContextFactory; +import jakarta.faces.context.ExceptionHandlerFactory; +import jakarta.faces.context.ExternalContextFactory; +import jakarta.faces.context.FacesContext; +import jakarta.faces.context.FacesContextFactory; +import jakarta.faces.context.PartialViewContextFactory; +import jakarta.faces.event.PhaseEvent; +import jakarta.faces.event.PhaseId; +import jakarta.faces.event.PhaseListener; +import jakarta.faces.lifecycle.Lifecycle; +import jakarta.faces.lifecycle.LifecycleFactory; +import jakarta.faces.render.RenderKitFactory; +import jakarta.faces.view.ViewDeclarationLanguageFactory; +import jakarta.faces.view.facelets.FaceletCacheFactory; +import jakarta.faces.view.facelets.TagHandlerDelegateFactory; import org.springframework.util.Assert; import org.springframework.webflow.execution.RequestContextHolder; @@ -67,19 +67,11 @@ public class JsfUtils { } public static boolean isFlowRequest() { - if (RequestContextHolder.getRequestContext() != null) { - return true; - } else { - return false; - } + return RequestContextHolder.getRequestContext() != null; } public static boolean isAsynchronousFlowRequest() { - if (isFlowRequest() && RequestContextHolder.getRequestContext().getExternalContext().isAjaxRequest()) { - return true; - } else { - return false; - } + return isFlowRequest() && RequestContextHolder.getRequestContext().getExternalContext().isAjaxRequest(); } /** diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfView.java b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfView.java index 2d75806e..1340045a 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfView.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfView.java @@ -18,11 +18,11 @@ package org.springframework.faces.webflow; import java.io.IOException; import java.io.Serializable; -import javax.faces.component.UIViewRoot; -import javax.faces.context.FacesContext; -import javax.faces.lifecycle.Lifecycle; -import javax.faces.view.StateManagementStrategy; -import javax.faces.view.ViewDeclarationLanguage; +import jakarta.faces.component.UIViewRoot; +import jakarta.faces.context.FacesContext; +import jakarta.faces.lifecycle.Lifecycle; +import jakarta.faces.view.StateManagementStrategy; +import jakarta.faces.view.ViewDeclarationLanguage; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -48,7 +48,7 @@ public class JsfView implements View { private final RequestContext requestContext; - private String viewId; + private final String viewId; /** * Creates a new JSF view. @@ -97,7 +97,7 @@ public class JsfView implements View { FacesContext facesContext = FlowFacesContext.getCurrentInstance(); if (facesContext != null) { // Use ExternalContext for multipart request parsing by component libraries - return facesContext.getExternalContext().getRequestParameterMap().containsKey("javax.faces.ViewState"); + return facesContext.getExternalContext().getRequestParameterMap().containsKey("jakarta.faces.ViewState"); } return false; } diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfViewFactory.java b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfViewFactory.java index bd662a4f..88934b41 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfViewFactory.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfViewFactory.java @@ -17,19 +17,19 @@ package org.springframework.faces.webflow; import java.util.EnumSet; import java.util.Iterator; -import javax.el.ValueExpression; -import javax.faces.application.ViewHandler; -import javax.faces.component.EditableValueHolder; -import javax.faces.component.UIComponent; -import javax.faces.component.UIViewRoot; -import javax.faces.component.visit.VisitContext; -import javax.faces.component.visit.VisitHint; -import javax.faces.context.FacesContext; -import javax.faces.event.AbortProcessingException; -import javax.faces.event.ExceptionQueuedEvent; -import javax.faces.event.ExceptionQueuedEventContext; -import javax.faces.event.PhaseId; -import javax.faces.lifecycle.Lifecycle; +import jakarta.el.ValueExpression; +import jakarta.faces.application.ViewHandler; +import jakarta.faces.component.EditableValueHolder; +import jakarta.faces.component.UIComponent; +import jakarta.faces.component.UIViewRoot; +import jakarta.faces.component.visit.VisitContext; +import jakarta.faces.component.visit.VisitHint; +import jakarta.faces.context.FacesContext; +import jakarta.faces.event.AbortProcessingException; +import jakarta.faces.event.ExceptionQueuedEvent; +import jakarta.faces.event.ExceptionQueuedEventContext; +import jakarta.faces.event.PhaseId; +import jakarta.faces.lifecycle.Lifecycle; import com.sun.faces.component.CompositeComponentStackManager; import org.apache.commons.logging.Log; @@ -159,7 +159,7 @@ public class JsfViewFactory implements ViewFactory { */ private void processTree(FacesContext context, UIComponent component) { - Object mojarraTreeHandler = null; + MojarraProcessTreeHandler mojarraTreeHandler = null; if (isMojarraPresent() && !JsfRuntimeInformation.isMyFacesInUse()) { mojarraTreeHandler = new MojarraProcessTreeHandler().handleBefore(context, component); } @@ -181,7 +181,7 @@ public class JsfViewFactory implements ViewFactory { } if (mojarraTreeHandler != null) { - ((MojarraProcessTreeHandler) mojarraTreeHandler).handleAfter(); + mojarraTreeHandler.handleAfter(); } } @@ -193,7 +193,7 @@ public class JsfViewFactory implements ViewFactory { catch (IllegalArgumentException ex) { // JSF < 2.1 } - String name = "javax.faces.visit.SKIP_ITERATION"; + String name = "jakarta.faces.visit.SKIP_ITERATION"; facesContext.getAttributes().put(name, true); try { VisitContext visitContext = (visitHint != null ? diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfViewFactoryCreator.java b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfViewFactoryCreator.java index e6d2462b..3c632ba7 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfViewFactoryCreator.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfViewFactoryCreator.java @@ -15,7 +15,7 @@ */ package org.springframework.faces.webflow; -import javax.faces.lifecycle.Lifecycle; +import jakarta.faces.lifecycle.Lifecycle; import org.springframework.binding.convert.ConversionService; import org.springframework.binding.expression.Expression; diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/PostRestoreStateEventVisitCallback.java b/spring-faces/src/main/java/org/springframework/faces/webflow/PostRestoreStateEventVisitCallback.java index b8a03dc4..2631dc3b 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/PostRestoreStateEventVisitCallback.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/PostRestoreStateEventVisitCallback.java @@ -15,11 +15,11 @@ */ package org.springframework.faces.webflow; -import javax.faces.component.UIComponent; -import javax.faces.component.visit.VisitCallback; -import javax.faces.component.visit.VisitContext; -import javax.faces.component.visit.VisitResult; -import javax.faces.event.PostRestoreStateEvent; +import jakarta.faces.component.UIComponent; +import jakarta.faces.component.visit.VisitCallback; +import jakarta.faces.component.visit.VisitContext; +import jakarta.faces.component.visit.VisitResult; +import jakarta.faces.event.PostRestoreStateEvent; /** * A VisitCallback used to deliver a PostRestoreStataEvent similar to diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/ViewRootHolder.java b/spring-faces/src/main/java/org/springframework/faces/webflow/ViewRootHolder.java index c03a85f5..e790e94e 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/ViewRootHolder.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/ViewRootHolder.java @@ -17,7 +17,7 @@ package org.springframework.faces.webflow; import java.io.Serializable; -import javax.faces.component.UIViewRoot; +import jakarta.faces.component.UIViewRoot; /** * Holder for the JSF UIViewRoot @@ -26,7 +26,7 @@ import javax.faces.component.UIViewRoot; */ class ViewRootHolder implements Serializable { - private transient UIViewRoot viewRoot; + private final transient UIViewRoot viewRoot; public ViewRootHolder(UIViewRoot viewRoot) { this.viewRoot = viewRoot; @@ -36,4 +36,4 @@ class ViewRootHolder implements Serializable { return this.viewRoot; } -} \ No newline at end of file +} diff --git a/spring-faces/src/test/java/org/springframework/faces/config/AbstractResourcesConfigurationTests.java b/spring-faces/src/test/java/org/springframework/faces/config/AbstractResourcesConfigurationTests.java index 8a76b7fd..157e1b70 100644 --- a/spring-faces/src/test/java/org/springframework/faces/config/AbstractResourcesConfigurationTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/config/AbstractResourcesConfigurationTests.java @@ -42,7 +42,7 @@ public abstract class AbstractResourcesConfigurationTests { map = this.context.getBeansOfType(SimpleUrlHandlerMapping.class); assertEquals(1, map.values().size()); SimpleUrlHandlerMapping handlerMapping = (SimpleUrlHandlerMapping) map.values().iterator().next(); - assertSame(resourceHandler, handlerMapping.getHandlerMap().get("/javax.faces.resource/**")); + assertSame(resourceHandler, handlerMapping.getHandlerMap().get("/jakarta.faces.resource/**")); assertEquals(0, handlerMapping.getOrder()); } diff --git a/spring-faces/src/test/java/org/springframework/faces/model/SelectionTrackingActionListenerTests.java b/spring-faces/src/test/java/org/springframework/faces/model/SelectionTrackingActionListenerTests.java index ae6ca863..25853a87 100644 --- a/spring-faces/src/test/java/org/springframework/faces/model/SelectionTrackingActionListenerTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/model/SelectionTrackingActionListenerTests.java @@ -1,6 +1,7 @@ package org.springframework.faces.model; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -8,16 +9,6 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; -import javax.faces.component.UIColumn; -import javax.faces.component.UICommand; -import javax.faces.component.UIData; -import javax.faces.component.UIViewRoot; -import javax.faces.context.FacesContext; -import javax.faces.event.AbortProcessingException; -import javax.faces.event.ActionEvent; -import javax.faces.event.ActionListener; - - import org.apache.myfaces.test.mock.MockFacesContext; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -27,6 +18,15 @@ import org.springframework.util.ReflectionUtils; import com.sun.faces.facelets.component.UIRepeat; +import jakarta.faces.component.UIColumn; +import jakarta.faces.component.UICommand; +import jakarta.faces.component.UIData; +import jakarta.faces.component.UIViewRoot; +import jakarta.faces.context.FacesContext; +import jakarta.faces.event.AbortProcessingException; +import jakarta.faces.event.ActionEvent; +import jakarta.faces.event.ActionListener; + public class SelectionTrackingActionListenerTests { /** @@ -92,7 +92,7 @@ public class SelectionTrackingActionListenerTests { this.dataModel.setRowIndex(2); assertFalse(this.dataModel.isCurrentRowSelected()); - assertTrue(this.dataModel.getSelectedRow() != this.dataModel.getRowData()); + assertNotSame(this.dataModel.getSelectedRow(), this.dataModel.getRowData()); } @Test @@ -120,14 +120,14 @@ public class SelectionTrackingActionListenerTests { ReflectionUtils.invokeMethod(indexMutator, uiRepeat, new MockFacesContext(), 2); assertFalse(this.dataModel.isCurrentRowSelected()); - assertTrue(this.dataModel.getSelectedRow() != this.dataModel.getRowData()); + assertNotSame(this.dataModel.getSelectedRow(), this.dataModel.getRowData()); } - private class TestRowData { + private static class TestRowData { } - private class TestDelegateActionListener implements ActionListener { + private static class TestDelegateActionListener implements ActionListener { public boolean processedEvent = false; diff --git a/spring-faces/src/test/java/org/springframework/faces/model/converter/DataModelConverterTests.java b/spring-faces/src/test/java/org/springframework/faces/model/converter/DataModelConverterTests.java index f4af4560..9181b2bc 100644 --- a/spring-faces/src/test/java/org/springframework/faces/model/converter/DataModelConverterTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/model/converter/DataModelConverterTests.java @@ -9,8 +9,8 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; -import javax.faces.model.DataModel; -import javax.faces.model.ListDataModel; +import jakarta.faces.model.DataModel; +import jakarta.faces.model.ListDataModel; import org.junit.jupiter.api.Test; import org.springframework.binding.convert.converters.Converter; diff --git a/spring-faces/src/test/java/org/springframework/faces/model/converter/FacesConversionServiceTests.java b/spring-faces/src/test/java/org/springframework/faces/model/converter/FacesConversionServiceTests.java index 6355e626..ed9da359 100644 --- a/spring-faces/src/test/java/org/springframework/faces/model/converter/FacesConversionServiceTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/model/converter/FacesConversionServiceTests.java @@ -3,12 +3,12 @@ package org.springframework.faces.model.converter; import java.util.ArrayList; import java.util.List; -import javax.faces.model.DataModel; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.binding.convert.ConversionExecutor; +import jakarta.faces.model.DataModel; + public class FacesConversionServiceTests { private FacesConversionService service; diff --git a/spring-faces/src/test/java/org/springframework/faces/mvc/JsfViewTests.java b/spring-faces/src/test/java/org/springframework/faces/mvc/JsfViewTests.java index 577500e6..4549907e 100644 --- a/spring-faces/src/test/java/org/springframework/faces/mvc/JsfViewTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/mvc/JsfViewTests.java @@ -7,9 +7,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.HashMap; import java.util.Locale; -import javax.faces.component.UIViewRoot; -import javax.faces.context.FacesContext; - import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -22,6 +19,9 @@ import org.springframework.web.context.support.StaticWebApplicationContext; import org.springframework.web.servlet.View; import org.springframework.web.servlet.view.UrlBasedViewResolver; +import jakarta.faces.component.UIViewRoot; +import jakarta.faces.context.FacesContext; + public class JsfViewTests { UrlBasedViewResolver resolver; @@ -59,7 +59,7 @@ public class JsfViewTests { view.render(new HashMap<>(), new MockHttpServletRequest(), new MockHttpServletResponse()); } - private class ResourceCheckingViewHandler extends MockViewHandler { + private static class ResourceCheckingViewHandler extends MockViewHandler { public UIViewRoot createView(FacesContext context, String viewId) { assertNotNull(viewId); diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/FlowActionListenerTests.java b/spring-faces/src/test/java/org/springframework/faces/webflow/FlowActionListenerTests.java index cd448934..103c1c8f 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/FlowActionListenerTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/FlowActionListenerTests.java @@ -4,12 +4,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import javax.el.ELContext; -import javax.el.MethodExpression; -import javax.el.MethodInfo; -import javax.faces.component.UICommand; -import javax.faces.event.ActionEvent; - import org.easymock.EasyMock; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -20,6 +14,12 @@ import org.springframework.webflow.engine.ViewState; import org.springframework.webflow.execution.RequestContext; import org.springframework.webflow.execution.RequestContextHolder; +import jakarta.el.ELContext; +import jakarta.el.MethodExpression; +import jakarta.el.MethodInfo; +import jakarta.faces.component.UICommand; +import jakarta.faces.event.ActionEvent; + public class FlowActionListenerTests { FlowActionListener listener; @@ -78,7 +78,7 @@ public class FlowActionListenerTests { "An unexpected event was signaled"); } - private class MethodExpressionStub extends MethodExpression { + private static class MethodExpressionStub extends MethodExpression { String result; @@ -117,7 +117,7 @@ public class FlowActionListenerTests { } } - private class MockViewState extends ViewState { + private static class MockViewState extends ViewState { public MockViewState() { super(new Flow("mockFlow"), "mockView", context -> { diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/FlowELResolverTests.java b/spring-faces/src/test/java/org/springframework/faces/webflow/FlowELResolverTests.java index 021afa9e..7254c5ed 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/FlowELResolverTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/FlowELResolverTests.java @@ -7,7 +7,7 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertTrue; -import javax.el.ELContext; +import jakarta.el.ELContext; import org.apache.myfaces.test.el.MockELContext; import org.junit.jupiter.api.AfterEach; diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/FlowFacesContextTests.java b/spring-faces/src/test/java/org/springframework/faces/webflow/FlowFacesContextTests.java index a2500c78..794bcccf 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/FlowFacesContextTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/FlowFacesContextTests.java @@ -4,6 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -14,8 +15,8 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import javax.faces.application.FacesMessage; -import javax.faces.context.FacesContext; +import jakarta.faces.application.FacesMessage; +import jakarta.faces.context.FacesContext; import org.easymock.EasyMock; import org.junit.jupiter.api.AfterEach; @@ -44,7 +45,7 @@ public class FlowFacesContextTests { @BeforeEach public void setUp() throws Exception { this.jsf.setUp(); - this.requestContext = (RequestContext) EasyMock.createMock(RequestContext.class); + this.requestContext = EasyMock.createMock(RequestContext.class); this.facesContext = new FlowFacesContext(this.requestContext, this.jsf.facesContext()); setupMessageContext(); } @@ -286,7 +287,7 @@ public class FlowFacesContextTests { this.facesContext.addMessage("foo", new FacesMessage(FacesMessage.SEVERITY_ERROR, "foo", "bar")); - assertEquals(true, this.facesContext.isValidationFailed()); + assertTrue(this.facesContext.isValidationFailed()); } private void setupMessageContext() { diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/FlowPartialViewContextTests.java b/spring-faces/src/test/java/org/springframework/faces/webflow/FlowPartialViewContextTests.java index 00d88fe4..ee5ea607 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/FlowPartialViewContextTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/FlowPartialViewContextTests.java @@ -6,8 +6,8 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; -import javax.faces.context.PartialViewContext; -import javax.faces.context.PartialViewContextWrapper; +import jakarta.faces.context.PartialViewContext; +import jakarta.faces.context.PartialViewContextWrapper; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/FlowResponseStateManagerTests.java b/spring-faces/src/test/java/org/springframework/faces/webflow/FlowResponseStateManagerTests.java index ee9b7846..21fd90f0 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/FlowResponseStateManagerTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/FlowResponseStateManagerTests.java @@ -61,7 +61,7 @@ public class FlowResponseStateManagerTests { assertEquals(state, viewMap.get(FlowResponseStateManager.FACES_VIEW_STATE)); assertEquals( - "", + "", this.jsfMock.contentAsString()); EasyMock.verify(this.flowExecutionContext, this.requestContext); } diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/JSFMockHelper.java b/spring-faces/src/test/java/org/springframework/faces/webflow/JSFMockHelper.java index 484ee21f..53100bff 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/JSFMockHelper.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/JSFMockHelper.java @@ -4,16 +4,7 @@ import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; -import javax.faces.FactoryFinder; -import javax.faces.application.Application; -import javax.faces.application.ApplicationFactory; -import javax.faces.component.UIViewRoot; -import javax.faces.context.FacesContext; -import javax.faces.context.FacesContextFactory; -import javax.faces.lifecycle.LifecycleFactory; -import javax.faces.render.RenderKitFactory; - -import org.apache.myfaces.test.base.AbstractJsfTestCase; +import org.apache.myfaces.test.base.junit.AbstractJsfTestCase; import org.apache.myfaces.test.mock.MockApplicationFactory; import org.apache.myfaces.test.mock.MockExternalContext; import org.apache.myfaces.test.mock.MockHttpServletRequest; @@ -30,6 +21,15 @@ import org.apache.myfaces.test.mock.lifecycle.MockLifecycle; import org.apache.myfaces.test.mock.lifecycle.MockLifecycleFactory; import org.apache.myfaces.test.mock.visit.MockVisitContextFactory; +import jakarta.faces.FactoryFinder; +import jakarta.faces.application.Application; +import jakarta.faces.application.ApplicationFactory; +import jakarta.faces.component.UIViewRoot; +import jakarta.faces.context.FacesContext; +import jakarta.faces.context.FacesContextFactory; +import jakarta.faces.lifecycle.LifecycleFactory; +import jakarta.faces.render.RenderKitFactory; + /** * Helper for using the mock JSF environment provided by shale-test inside unit tests that do not extend * {@link AbstractJsfTestCase} @@ -106,7 +106,7 @@ public class JSFMockHelper { private ClassLoader threadContextClassLoader; public JSFMock() { - super("JSFMock"); + super(); } FacesContext facesContext; diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/JsfFinalResponseActionTests.java b/spring-faces/src/test/java/org/springframework/faces/webflow/JsfFinalResponseActionTests.java index 8aead521..bcccf210 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/JsfFinalResponseActionTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/JsfFinalResponseActionTests.java @@ -8,20 +8,11 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import javax.faces.FacesException; -import javax.faces.application.ViewHandler; -import javax.faces.component.UIViewRoot; -import javax.faces.context.FacesContext; -import javax.faces.event.PhaseEvent; -import javax.faces.event.PhaseId; -import javax.faces.event.PhaseListener; -import javax.faces.lifecycle.Lifecycle; - +import org.apache.el.ExpressionFactoryImpl; import org.easymock.EasyMock; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.apache.el.ExpressionFactoryImpl; import org.springframework.binding.expression.ExpressionParser; import org.springframework.binding.expression.support.FluentParserContext; import org.springframework.mock.web.MockHttpServletRequest; @@ -35,6 +26,15 @@ import org.springframework.webflow.execution.View; import org.springframework.webflow.expression.el.WebFlowELExpressionParser; import org.springframework.webflow.test.MockExternalContext; +import jakarta.faces.FacesException; +import jakarta.faces.application.ViewHandler; +import jakarta.faces.component.UIViewRoot; +import jakarta.faces.context.FacesContext; +import jakarta.faces.event.PhaseEvent; +import jakarta.faces.event.PhaseId; +import jakarta.faces.event.PhaseListener; +import jakarta.faces.lifecycle.Lifecycle; + public class JsfFinalResponseActionTests { private static final String VIEW_ID = "/testView.xhtml"; @@ -47,10 +47,6 @@ public class JsfFinalResponseActionTests { private final ViewHandler viewHandler = new NoRenderViewHandler(); - private TestLifecycle lifecycle; - - private PhaseListener trackingListener; - ExpressionParser parser = new WebFlowELExpressionParser(new ExpressionFactoryImpl()); @BeforeEach @@ -68,13 +64,13 @@ public class JsfFinalResponseActionTests { this.jsfMock.setUp(); - this.trackingListener = new TrackingPhaseListener(); - this.jsfMock.lifecycle().addPhaseListener(this.trackingListener); + PhaseListener trackingListener = new TrackingPhaseListener(); + this.jsfMock.lifecycle().addPhaseListener(trackingListener); this.jsfMock.facesContext().setViewRoot(null); this.jsfMock.facesContext().getApplication().setViewHandler(this.viewHandler); - this.lifecycle = new TestLifecycle(this.jsfMock.lifecycle()); + TestLifecycle lifecycle = new TestLifecycle(this.jsfMock.lifecycle()); this.factory = new JsfViewFactory(this.parser.parseExpression("#{'" + VIEW_ID + "'}", new FluentParserContext() - .template().evaluate(RequestContext.class).expectResult(String.class)), this.lifecycle); + .template().evaluate(RequestContext.class).expectResult(String.class)), lifecycle); RequestContextHolder.setRequestContext(this.context); MockExternalContext ext = new MockExternalContext(); ext.setNativeContext(new MockServletContext()); @@ -97,7 +93,7 @@ public class JsfFinalResponseActionTests { this.context.inViewState(); EasyMock.expectLastCall().andReturn(false); - EasyMock.replay(new Object[] { this.context }); + EasyMock.replay(this.context); View view = this.factory.getView(this.context); ((JsfView) view).getViewRoot().setTransient(true); @@ -107,7 +103,7 @@ public class JsfFinalResponseActionTests { assertTrue(((NoRenderViewHandler) this.viewHandler).rendered); } - private class TestLifecycle extends FlowLifecycle { + private static class TestLifecycle extends FlowLifecycle { boolean executed = false; @@ -123,7 +119,7 @@ public class JsfFinalResponseActionTests { } - private class TrackingPhaseListener implements PhaseListener { + private static class TrackingPhaseListener implements PhaseListener { private final List phaseCallbacks = new ArrayList<>(); @@ -146,10 +142,10 @@ public class JsfFinalResponseActionTests { } } - private class NoRenderViewHandler extends MockViewHandler { + private static class NoRenderViewHandler extends MockViewHandler { boolean rendered = false; - public void renderView(FacesContext context, UIViewRoot viewToRender) throws IOException, FacesException { + public void renderView(FacesContext context, UIViewRoot viewToRender) throws FacesException { this.rendered = true; } diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/JsfUtilsTests.java b/spring-faces/src/test/java/org/springframework/faces/webflow/JsfUtilsTests.java index b887b289..4f37e3b2 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/JsfUtilsTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/JsfUtilsTests.java @@ -4,27 +4,27 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.List; -import javax.faces.application.ApplicationFactory; -import javax.faces.context.FacesContextFactory; -import javax.faces.event.PhaseEvent; -import javax.faces.event.PhaseId; -import javax.faces.event.PhaseListener; -import javax.faces.lifecycle.LifecycleFactory; -import javax.faces.render.RenderKitFactory; - -import org.apache.myfaces.test.base.AbstractJsfTestCase; +import org.apache.myfaces.test.base.junit.AbstractJsfTestCase; import org.apache.myfaces.test.mock.MockApplicationFactory; -import org.apache.myfaces.test.mock.MockFacesContext20; +import org.apache.myfaces.test.mock.MockFacesContext; import org.apache.myfaces.test.mock.MockFacesContextFactory; import org.apache.myfaces.test.mock.MockRenderKitFactory; import org.apache.myfaces.test.mock.lifecycle.MockLifecycle; import org.apache.myfaces.test.mock.lifecycle.MockLifecycleFactory; import org.junit.Test; +import jakarta.faces.application.ApplicationFactory; +import jakarta.faces.context.FacesContextFactory; +import jakarta.faces.event.PhaseEvent; +import jakarta.faces.event.PhaseId; +import jakarta.faces.event.PhaseListener; +import jakarta.faces.lifecycle.LifecycleFactory; +import jakarta.faces.render.RenderKitFactory; + public class JsfUtilsTests extends AbstractJsfTestCase { - public JsfUtilsTests(String name) { - super(name); + public JsfUtilsTests() { + super(); } @Test @@ -37,7 +37,7 @@ public class JsfUtilsTests extends AbstractJsfTestCase { lifecycle.addPhaseListener(listener2); PhaseListener listener3 = new OrderVerifyingPhaseListener(null, list); lifecycle.addPhaseListener(listener3); - JsfUtils.notifyBeforeListeners(PhaseId.ANY_PHASE, lifecycle, new MockFacesContext20()); + JsfUtils.notifyBeforeListeners(PhaseId.ANY_PHASE, lifecycle, new MockFacesContext()); assertEquals(listener1, list.get(0)); assertEquals(listener2, list.get(1)); assertEquals(listener3, list.get(2)); @@ -53,7 +53,7 @@ public class JsfUtilsTests extends AbstractJsfTestCase { lifecycle.addPhaseListener(listener2); PhaseListener listener3 = new OrderVerifyingPhaseListener(list, null); lifecycle.addPhaseListener(listener3); - JsfUtils.notifyAfterListeners(PhaseId.ANY_PHASE, lifecycle, new MockFacesContext20()); + JsfUtils.notifyAfterListeners(PhaseId.ANY_PHASE, lifecycle, new MockFacesContext()); assertEquals(listener3, list.get(0)); assertEquals(listener2, list.get(1)); assertEquals(listener1, list.get(2)); @@ -78,7 +78,7 @@ public class JsfUtilsTests extends AbstractJsfTestCase { } } - private class OrderVerifyingPhaseListener implements PhaseListener { + private static class OrderVerifyingPhaseListener implements PhaseListener { private final List afterPhaseList; private final List beforePhaseList; diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/JsfViewFactoryTests.java b/spring-faces/src/test/java/org/springframework/faces/webflow/JsfViewFactoryTests.java index 3dd70af4..9b0feaa6 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/JsfViewFactoryTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/JsfViewFactoryTests.java @@ -10,23 +10,6 @@ import static org.junit.jupiter.api.Assertions.fail; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import javax.faces.FacesException; -import javax.faces.application.ViewHandler; -import javax.faces.component.UIInput; -import javax.faces.component.UIOutput; -import javax.faces.component.UIPanel; -import javax.faces.component.UIViewRoot; -import javax.faces.context.FacesContext; -import javax.faces.event.AbortProcessingException; -import javax.faces.event.ComponentSystemEvent; -import javax.faces.event.ExceptionQueuedEvent; -import javax.faces.event.ExceptionQueuedEventContext; -import javax.faces.event.PhaseEvent; -import javax.faces.event.PhaseId; -import javax.faces.event.PhaseListener; -import javax.faces.event.PostRestoreStateEvent; -import javax.faces.event.SystemEvent; -import javax.faces.lifecycle.Lifecycle; import org.apache.el.ExpressionFactoryImpl; import org.apache.myfaces.test.mock.MockApplication20; @@ -51,6 +34,24 @@ import org.springframework.webflow.execution.ViewFactory; import org.springframework.webflow.expression.el.WebFlowELExpressionParser; import org.springframework.webflow.test.MockExternalContext; +import jakarta.faces.FacesException; +import jakarta.faces.application.ViewHandler; +import jakarta.faces.component.UIInput; +import jakarta.faces.component.UIOutput; +import jakarta.faces.component.UIPanel; +import jakarta.faces.component.UIViewRoot; +import jakarta.faces.context.FacesContext; +import jakarta.faces.event.AbortProcessingException; +import jakarta.faces.event.ComponentSystemEvent; +import jakarta.faces.event.ExceptionQueuedEvent; +import jakarta.faces.event.ExceptionQueuedEventContext; +import jakarta.faces.event.PhaseEvent; +import jakarta.faces.event.PhaseId; +import jakarta.faces.event.PhaseListener; +import jakarta.faces.event.PostRestoreStateEvent; +import jakarta.faces.event.SystemEvent; +import jakarta.faces.lifecycle.Lifecycle; + public class JsfViewFactoryTests { private static final String VIEW_ID = "/testView.xhtml"; @@ -184,10 +185,15 @@ public class JsfViewFactoryTests { UIPanel panel = new UIPanel(); panel.setId("panel1"); UIOutput output = new UIOutput(); - output.setValueBinding("binding", this.jsfMock.facesContext().getApplication().createValueBinding("#{myBean.output}")); + FacesContext facesContext = this.jsfMock.facesContext(); + output.setValueExpression("binding", + facesContext.getApplication().getExpressionFactory().createValueExpression( + facesContext.getELContext(), "#{myBean.output}", UIOutput.class)); output.setId("output1"); UIInput input = new UIInput(); - input.setValueBinding("binding", this.jsfMock.facesContext().getApplication().createValueBinding("#{myBean.input}")); + input.setValueExpression("binding", + facesContext.getApplication().getExpressionFactory().createValueExpression( + facesContext.getELContext(), "#{myBean.input}", UIInput.class)); input.setId("input1"); existingRoot.getChildren().add(panel); @@ -245,7 +251,7 @@ public class JsfViewFactoryTests { assertNotNull(restoredView, "A View was not restored"); assertTrue(restoredView instanceof JsfView, "A JsfView was expected"); - assertTrue(((JsfView) restoredView).getViewRoot() != null, "An ViewRoot was not set"); + assertNotNull(((JsfView) restoredView).getViewRoot(), "An ViewRoot was not set"); assertEquals(VIEW_ID, ((JsfView) restoredView).getViewRoot().getViewId(), "View name did not match"); assertFalse(restoredView.hasFlowEvent(), "An unexpected event was signaled,"); assertTrue(existingRoot.isPostRestoreStateEventSeen(), "The PostRestoreViewEvent was not seen"); @@ -302,7 +308,7 @@ public class JsfViewFactoryTests { application.getExceptionQueuedEventContext().getException(), "Expected same exception"); } - private class NoExecutionLifecycle extends FlowLifecycle { + private static class NoExecutionLifecycle extends FlowLifecycle { public NoExecutionLifecycle(Lifecycle delegate) { super(delegate); @@ -313,7 +319,7 @@ public class JsfViewFactoryTests { } } - private class TrackingPhaseListener implements PhaseListener { + private static class TrackingPhaseListener implements PhaseListener { private final List phaseCallbacks = new ArrayList<>(); @@ -336,7 +342,7 @@ public class JsfViewFactoryTests { } } - private class NormalViewState implements StateDefinition { + private static class NormalViewState implements StateDefinition { public boolean isViewState() { return true; @@ -363,7 +369,7 @@ public class JsfViewFactoryTests { } } - protected class TestBean { + public static class TestBean { UIOutput output; UIInput input; diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/JsfViewTests.java b/spring-faces/src/test/java/org/springframework/faces/webflow/JsfViewTests.java index e24a3954..e1c68f2f 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/JsfViewTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/JsfViewTests.java @@ -6,14 +6,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; import java.io.StringWriter; -import javax.faces.FacesException; -import javax.faces.component.UIForm; -import javax.faces.component.UIInput; -import javax.faces.component.UIViewRoot; -import javax.faces.component.html.HtmlForm; -import javax.faces.component.html.HtmlInputText; -import javax.faces.context.FacesContext; -import javax.faces.lifecycle.Lifecycle; import org.apache.myfaces.test.mock.MockResponseWriter; import org.easymock.EasyMock; @@ -28,6 +20,15 @@ import org.springframework.webflow.execution.RequestContextHolder; import org.springframework.webflow.test.MockExternalContext; import org.springframework.webflow.test.MockParameterMap; +import jakarta.faces.FacesException; +import jakarta.faces.component.UIForm; +import jakarta.faces.component.UIInput; +import jakarta.faces.component.UIViewRoot; +import jakarta.faces.component.html.HtmlForm; +import jakarta.faces.component.html.HtmlInputText; +import jakarta.faces.context.FacesContext; +import jakarta.faces.lifecycle.Lifecycle; + public class JsfViewTests { private static final String VIEW_ID = "testView.xhtml"; @@ -44,9 +45,7 @@ public class JsfViewTests { private final RequestContext context = EasyMock.createMock(RequestContext.class); private final FlowExecutionContext flowExecutionContext = EasyMock.createMock(FlowExecutionContext.class); - @SuppressWarnings("unchecked") private final MutableAttributeMap flashScope = EasyMock.createMock(MutableAttributeMap.class); - @SuppressWarnings("unchecked") private final MutableAttributeMap flowMap = EasyMock.createMock(MutableAttributeMap.class); private final FlowExecutionKey key = new FlowExecutionKey() { @@ -130,7 +129,7 @@ public class JsfViewTests { try { this.view.render(); - } catch (Exception ex) { + } catch (Exception ignored) { } } @@ -145,7 +144,7 @@ public class JsfViewTests { EasyMock.expect(this.flashScope.put(EasyMock.matches(FlowFacesContext.RENDER_RESPONSE_KEY), EasyMock.anyObject())) .andStubReturn(null); - Lifecycle lifecycle = new NoEventLifecycle(this.jsfMock.lifecycle()); + NoEventLifecycle lifecycle = new NoEventLifecycle(this.jsfMock.lifecycle()); UIViewRoot existingRoot = new UIViewRoot(); existingRoot.setViewId(VIEW_ID); @@ -157,7 +156,7 @@ public class JsfViewTests { restoredView.processUserEvent(); assertFalse(restoredView.hasFlowEvent(), "An unexpected event was signaled,"); - assertTrue(((NoEventLifecycle) lifecycle).executed, "The lifecycle should have been invoked"); + assertTrue(lifecycle.executed, "The lifecycle should have been invoked"); } /** @@ -171,7 +170,7 @@ public class JsfViewTests { EasyMock.expect(this.flashScope.put(EasyMock.matches(FlowFacesContext.RENDER_RESPONSE_KEY), EasyMock.anyObject())) .andStubReturn(null); - Lifecycle lifecycle = new EventSignalingLifecycle(this.jsfMock.lifecycle()); + EventSignalingLifecycle lifecycle = new EventSignalingLifecycle(this.jsfMock.lifecycle()); UIViewRoot existingRoot = new UIViewRoot(); existingRoot.setViewId(VIEW_ID); @@ -184,7 +183,7 @@ public class JsfViewTests { assertTrue(restoredView.hasFlowEvent(), "No event was signaled,"); assertEquals(this.event, restoredView.getFlowEvent().getId(), "Event should be " + this.event); - assertTrue(((EventSignalingLifecycle) lifecycle).executed, "The lifecycle should have been invoked"); + assertTrue(lifecycle.executed, "The lifecycle should have been invoked"); } @Test @@ -205,7 +204,7 @@ public class JsfViewTests { public final void testUserEventQueued_FormSubmitted() { this.jsfMock.request().addParameter("execution", "e1s1"); - this.jsfMock.request().addParameter("javax.faces.ViewState", "e1s1"); + this.jsfMock.request().addParameter("jakarta.faces.ViewState", "e1s1"); EasyMock.replay(this.context, this.flowExecutionContext, this.flowMap, this.flashScope); @@ -214,13 +213,13 @@ public class JsfViewTests { assertTrue(createdView.userEventQueued(), "User event should be queued"); } - private class ExceptionalViewHandler extends MockViewHandler { + private static class ExceptionalViewHandler extends MockViewHandler { public void renderView(FacesContext context, UIViewRoot viewToRender) throws IOException, FacesException { throw new IOException("Rendering blew up"); } } - private class NoEventLifecycle extends FlowLifecycle { + private static class NoEventLifecycle extends FlowLifecycle { boolean executed = false; diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/MockBaseFacesContext.java b/spring-faces/src/test/java/org/springframework/faces/webflow/MockBaseFacesContext.java index 38ad893d..aa57e3be 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/MockBaseFacesContext.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/MockBaseFacesContext.java @@ -2,14 +2,14 @@ package org.springframework.faces.webflow; import java.util.Map; -import javax.faces.FactoryFinder; -import javax.faces.application.Application; -import javax.faces.application.ApplicationFactory; -import javax.faces.context.ExternalContext; -import javax.faces.lifecycle.Lifecycle; - import org.apache.myfaces.test.mock.MockFacesContext20; +import jakarta.faces.FactoryFinder; +import jakarta.faces.application.Application; +import jakarta.faces.application.ApplicationFactory; +import jakarta.faces.context.ExternalContext; +import jakarta.faces.lifecycle.Lifecycle; + public class MockBaseFacesContext extends MockFacesContext20 { private Application application; @@ -30,6 +30,11 @@ public class MockBaseFacesContext extends MockFacesContext20 { return super.getAttributes(); } + @Override + public Lifecycle getLifecycle() { + return null; + } + public Application getApplication() { if (this.application == null) { ApplicationFactory applicationFactory = (ApplicationFactory) FactoryFinder diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/MockBaseFacesContextFactory.java b/spring-faces/src/test/java/org/springframework/faces/webflow/MockBaseFacesContextFactory.java index 2da2e12c..f309cd4d 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/MockBaseFacesContextFactory.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/MockBaseFacesContextFactory.java @@ -1,17 +1,17 @@ package org.springframework.faces.webflow; -import javax.faces.FacesException; -import javax.faces.context.ExternalContext; -import javax.faces.context.FacesContext; -import javax.faces.context.FacesContextFactory; -import javax.faces.lifecycle.Lifecycle; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.myfaces.test.mock.MockExternalContext20; +import org.apache.myfaces.test.mock.MockExternalContext; import org.apache.myfaces.test.mock.MockHttpServletResponse; +import jakarta.faces.FacesException; +import jakarta.faces.context.ExternalContext; +import jakarta.faces.context.FacesContext; +import jakarta.faces.context.FacesContextFactory; +import jakarta.faces.lifecycle.Lifecycle; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + public class MockBaseFacesContextFactory extends FacesContextFactory { public FacesContext getFacesContext(Object context, Object request, Object response, Lifecycle lifecycle) @@ -22,7 +22,7 @@ public class MockBaseFacesContextFactory extends FacesContextFactory { return FacesContext.getCurrentInstance(); } else { - ExternalContext ext = new MockExternalContext20((ServletContext) context, (HttpServletRequest) request, + ExternalContext ext = new MockExternalContext((ServletContext) context, (HttpServletRequest) request, (HttpServletResponse) response) { public void setResponseBufferSize(int size) { @@ -33,6 +33,10 @@ public class MockBaseFacesContextFactory extends FacesContextFactory { ((MockHttpServletResponse) getResponse()).setContentLength(length); } + @Override + public void release() { + } + public void setResponseContentType(String contentType) { ((MockHttpServletResponse) getResponse()).setContentType(contentType); } diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/MockFacesContext.java b/spring-faces/src/test/java/org/springframework/faces/webflow/MockFacesContext.java index b2d66dc4..17e347eb 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/MockFacesContext.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/MockFacesContext.java @@ -17,15 +17,16 @@ package org.springframework.faces.webflow; import java.util.Iterator; -import javax.faces.application.Application; -import javax.faces.application.FacesMessage; -import javax.faces.application.FacesMessage.Severity; -import javax.faces.component.UIViewRoot; -import javax.faces.context.ExternalContext; -import javax.faces.context.FacesContext; -import javax.faces.context.ResponseStream; -import javax.faces.context.ResponseWriter; -import javax.faces.render.RenderKit; +import jakarta.faces.application.Application; +import jakarta.faces.application.FacesMessage; +import jakarta.faces.application.FacesMessage.Severity; +import jakarta.faces.component.UIViewRoot; +import jakarta.faces.context.ExternalContext; +import jakarta.faces.context.FacesContext; +import jakarta.faces.context.ResponseStream; +import jakarta.faces.context.ResponseWriter; +import jakarta.faces.lifecycle.Lifecycle; +import jakarta.faces.render.RenderKit; /** * Mock implementation of the FacesContext class to facilitate standalone Action unit tests. @@ -35,7 +36,7 @@ import javax.faces.render.RenderKit; * Fowler's reasoning. This class is called MockFacesContext to be consistent with the naming convention in * the rest of the Spring framework (e.g. MockHttpServletRequest, ...). * - * @see javax.faces.context.FacesContext + * @see jakarta.faces.context.FacesContext * * @author Ulrik Sandberg */ @@ -62,6 +63,11 @@ public class MockFacesContext extends FacesContext { return null; } + @Override + public Lifecycle getLifecycle() { + return null; + } + public ExternalContext getExternalContext() { return this.externalContext; } diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/MockJsfExternalContext.java b/spring-faces/src/test/java/org/springframework/faces/webflow/MockJsfExternalContext.java index f72f2ce8..e77ac2b4 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/MockJsfExternalContext.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/MockJsfExternalContext.java @@ -16,7 +16,6 @@ package org.springframework.faces.webflow; -import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.security.Principal; @@ -27,7 +26,7 @@ import java.util.Locale; import java.util.Map; import java.util.Set; -import javax.faces.context.ExternalContext; +import jakarta.faces.context.ExternalContext; public class MockJsfExternalContext extends ExternalContext { @@ -39,7 +38,7 @@ public class MockJsfExternalContext extends ExternalContext { private Map requestParameterMap = Collections.emptyMap(); - public void dispatch(String arg0) throws IOException { + public void dispatch(String arg0) { } public String encodeActionURL(String arg0) { @@ -54,6 +53,11 @@ public class MockJsfExternalContext extends ExternalContext { return null; } + @Override + public String encodeWebsocketURL(String url) { + return null; + } + public Map getApplicationMap() { return this.applicationMap; } @@ -70,7 +74,7 @@ public class MockJsfExternalContext extends ExternalContext { return null; } - public Map getInitParameterMap() { + public Map getInitParameterMap() { return null; } @@ -184,6 +188,11 @@ public class MockJsfExternalContext extends ExternalContext { public void log(String arg0, Throwable arg1) { } - public void redirect(String arg0) throws IOException { + public void redirect(String arg0) { + } + + @Override + public void release() { + } } diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/MockViewHandler.java b/spring-faces/src/test/java/org/springframework/faces/webflow/MockViewHandler.java index 2f23bc70..177229c6 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/MockViewHandler.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/MockViewHandler.java @@ -18,10 +18,10 @@ package org.springframework.faces.webflow; import java.io.IOException; import java.util.Locale; -import javax.faces.FacesException; -import javax.faces.application.ViewHandler; -import javax.faces.component.UIViewRoot; -import javax.faces.context.FacesContext; +import jakarta.faces.FacesException; +import jakarta.faces.application.ViewHandler; +import jakarta.faces.component.UIViewRoot; +import jakarta.faces.context.FacesContext; public class MockViewHandler extends ViewHandler { private UIViewRoot createViewRoot; @@ -68,6 +68,11 @@ public class MockViewHandler extends ViewHandler { return null; } + @Override + public String getWebsocketURL(FacesContext context, String channel) { + return null; + } + /** * Really simple implementation to exercise rendering and state saving */ @@ -82,4 +87,4 @@ public class MockViewHandler extends ViewHandler { public void writeState(FacesContext context) { } -} \ No newline at end of file +} diff --git a/spring-webflow/spring-webflow.gradle b/spring-webflow/spring-webflow.gradle index 95829dcf..e67b07b9 100644 --- a/spring-webflow/spring-webflow.gradle +++ b/spring-webflow/spring-webflow.gradle @@ -22,7 +22,7 @@ dependencies { testImplementation("org.springframework:spring-jdbc") testImplementation("org.springframework:spring-test") testImplementation("org.hibernate:hibernate-entitymanager") - testImplementation("org.hibernate:hibernate-validator") + testImplementation("org.hibernate.validator:hibernate-validator") testImplementation("org.hsqldb:hsqldb") testImplementation("jakarta.servlet.jsp:jakarta.servlet.jsp-api") testImplementation("jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api") diff --git a/spring-webflow/src/main/java/org/springframework/webflow/mvc/builder/FlowResourceFlowViewResolver.java b/spring-webflow/src/main/java/org/springframework/webflow/mvc/builder/FlowResourceFlowViewResolver.java index a62dcb23..1e2dbc28 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/mvc/builder/FlowResourceFlowViewResolver.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/mvc/builder/FlowResourceFlowViewResolver.java @@ -35,7 +35,7 @@ import org.springframework.webflow.mvc.view.FlowViewResolver; */ public class FlowResourceFlowViewResolver implements FlowViewResolver { - private static final boolean JSTL_PRESENT = ClassUtils.isPresent("javax.servlet.jsp.jstl.fmt.LocalizationContext", FlowResourceFlowViewResolver.class.getClassLoader()); + private static final boolean JSTL_PRESENT = ClassUtils.isPresent("jakarta.servlet.jsp.jstl.fmt.LocalizationContext", FlowResourceFlowViewResolver.class.getClassLoader()); private String defaultViewSuffix = ".jsp"; @@ -95,4 +95,4 @@ public class FlowResourceFlowViewResolver implements FlowViewResolver { + " only types supported by this FlowViewResolver implementation are [.jsp] and [.jspx]"); } } -} \ No newline at end of file +}