You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ta...@apache.org on 2020/02/27 11:59:24 UTC

[myfaces] branch 3.0.x updated: first patch to jakarta.faces

This is an automated email from the ASF dual-hosted git repository.

tandraschko pushed a commit to branch 3.0.x
in repository https://gitbox.apache.org/repos/asf/myfaces.git


The following commit(s) were added to refs/heads/3.0.x by this push:
     new 874ae09  first patch to jakarta.faces
874ae09 is described below

commit 874ae09f7669bece70f401601367615803021777
Author: Thomas Andraschko <ta...@apache.org>
AuthorDate: Thu Feb 27 12:59:07 2020 +0100

    first patch to jakarta.faces
---
 api/pom.xml                                        |   33 +-
 .../main/java/jakarta/faces/FacesException.java    |   53 +
 api/src/main/java/jakarta/faces/FacesWrapper.java  |   34 +
 api/src/main/java/jakarta/faces/FactoryFinder.java |  817 ++++++
 .../faces/_FactoryFinderProviderFactory.java       |  238 ++
 .../jakarta/faces/annotation/ApplicationMap.java   |   37 +
 .../java/jakarta/faces/annotation/FacesConfig.java |   44 +
 .../java/jakarta/faces/annotation/FlowMap.java     |   37 +
 .../java/jakarta/faces/annotation/HeaderMap.java   |   37 +
 .../jakarta/faces/annotation/HeaderValuesMap.java  |   37 +
 .../jakarta/faces/annotation/InitParameterMap.java |   37 +
 .../jakarta/faces/annotation/ManagedProperty.java  |   37 +
 .../jakarta/faces/annotation/RequestCookieMap.java |   37 +
 .../java/jakarta/faces/annotation/RequestMap.java  |   37 +
 .../faces/annotation/RequestParameterMap.java      |   37 +
 .../annotation/RequestParameterValuesMap.java      |   37 +
 .../java/jakarta/faces/annotation/SessionMap.java  |   37 +
 .../java/jakarta/faces/annotation/ViewMap.java     |   37 +
 .../jakarta/faces/application/Application.java     | 1311 ++++++++++
 .../ApplicationConfigurationPopulator.java         |   27 +
 .../faces/application/ApplicationFactory.java      |   58 +
 .../faces/application/ApplicationWrapper.java      |  492 ++++
 .../application/ConfigurableNavigationHandler.java |   73 +
 .../ConfigurableNavigationHandlerWrapper.java      |   87 +
 .../jakarta/faces/application/FacesMessage.java    |  295 +++
 .../jakarta/faces/application/NavigationCase.java  |  354 +++
 .../faces/application/NavigationCaseWrapper.java   |  137 +
 .../faces/application/NavigationHandler.java       |   46 +
 .../application/NavigationHandlerWrapper.java      |   63 +
 .../jakarta/faces/application/ProjectStage.java    |   40 +
 .../faces/application/ProtectedViewException.java  |   45 +
 .../java/jakarta/faces/application/Resource.java   |   92 +
 .../faces/application/ResourceDependencies.java    |   36 +
 .../faces/application/ResourceDependency.java      |   40 +
 .../jakarta/faces/application/ResourceHandler.java |  202 ++
 .../faces/application/ResourceHandlerWrapper.java  |  162 ++
 .../faces/application/ResourceVisitOption.java     |   28 +
 .../jakarta/faces/application/ResourceWrapper.java |  118 +
 .../jakarta/faces/application/StateManager.java    |  352 +++
 .../faces/application/StateManagerWrapper.java     |  121 +
 .../faces/application/ViewExpiredException.java    |   63 +
 .../jakarta/faces/application/ViewHandler.java     |  450 ++++
 .../faces/application/ViewHandlerWrapper.java      |  187 ++
 .../jakarta/faces/application/ViewResource.java    |   34 +
 .../jakarta/faces/application/ViewVisitOption.java |   29 +
 .../faces/application/_NavigationUtils.java        |  104 +
 .../java/jakarta/faces/bean/ApplicationScoped.java |   37 +
 .../main/java/jakarta/faces/bean/CustomScoped.java |   36 +
 .../main/java/jakarta/faces/bean/ManagedBean.java  |   45 +
 .../java/jakarta/faces/bean/ManagedProperty.java   |   42 +
 .../main/java/jakarta/faces/bean/NoneScoped.java   |   36 +
 .../java/jakarta/faces/bean/ReferencedBean.java    |   36 +
 .../java/jakarta/faces/bean/RequestScoped.java     |   36 +
 .../java/jakarta/faces/bean/SessionScoped.java     |   36 +
 .../main/java/jakarta/faces/bean/ViewScoped.java   |   36 +
 .../main/java/jakarta/faces/bean/package-info.java |   20 +
 .../java/jakarta/faces/component/ActionSource.java |   55 +
 .../jakarta/faces/component/ActionSource2.java     |   33 +
 .../jakarta/faces/component/ContextCallback.java   |   36 +
 .../faces/component/EditableValueHolder.java       |  180 ++
 .../jakarta/faces/component/FacesComponent.java    |   44 +
 .../jakarta/faces/component/NamingContainer.java   |   65 +
 .../faces/component/PartialStateHolder.java        |   31 +
 .../java/jakarta/faces/component/StateHelper.java  |   43 +
 .../java/jakarta/faces/component/StateHolder.java  |   36 +
 .../faces/component/TransientStateHelper.java      |   70 +
 .../faces/component/TransientStateHolder.java      |   64 +
 .../java/jakarta/faces/component/UIColumn.java     |   82 +
 .../java/jakarta/faces/component/UICommand.java    |  263 ++
 .../java/jakarta/faces/component/UIComponent.java  | 1837 ++++++++++++++
 .../jakarta/faces/component/UIComponentBase.java   | 2670 ++++++++++++++++++++
 .../main/java/jakarta/faces/component/UIData.java  | 2505 ++++++++++++++++++
 .../main/java/jakarta/faces/component/UIForm.java  |  480 ++++
 .../java/jakarta/faces/component/UIGraphic.java    |  150 ++
 .../jakarta/faces/component/UIImportConstants.java |   88 +
 .../main/java/jakarta/faces/component/UIInput.java | 1432 +++++++++++
 .../jakarta/faces/component/UINamingContainer.java |  208 ++
 .../jakarta/faces/component/UIOutcomeTarget.java   |  102 +
 .../java/jakarta/faces/component/UIOutput.java     |  345 +++
 .../main/java/jakarta/faces/component/UIPanel.java |   47 +
 .../jakarta/faces/component/UISelectBoolean.java   |  150 ++
 .../java/jakarta/faces/component/UISelectMany.java |  474 ++++
 .../java/jakarta/faces/component/UISelectOne.java  |  213 ++
 .../java/jakarta/faces/component/UIViewAction.java |  432 ++++
 .../jakarta/faces/component/UIViewParameter.java   |  353 +++
 .../java/jakarta/faces/component/UIViewRoot.java   | 2065 +++++++++++++++
 .../jakarta/faces/component/UniqueIdVendor.java    |   29 +
 .../faces/component/UpdateModelException.java      |   45 +
 .../java/jakarta/faces/component/ValueHolder.java  |   37 +
 .../java/jakarta/faces/component/_ArrayMap.java    |  637 +++++
 .../component/_AttachedCollectionStateWrapper.java |   46 +
 .../faces/component/_AttachedDeltaWrapper.java     |   48 +
 .../faces/component/_AttachedListStateWrapper.java |   39 +
 .../faces/component/_AttachedStateWrapper.java     |   54 +
 .../faces/component/_BeanValidationUtils.java      |   35 +
 .../java/jakarta/faces/component/_ClassUtils.java  |  415 +++
 .../faces/component/_ComponentAttributesMap.java   |  786 ++++++
 .../faces/component/_ComponentChildrenList.java    |  209 ++
 .../faces/component/_ComponentFacetMap.java        |  667 +++++
 .../jakarta/faces/component/_ComponentUtils.java   |  460 ++++
 .../java/jakarta/faces/component/_DeltaList.java   |  308 +++
 .../jakarta/faces/component/_DeltaStateHelper.java | 1118 ++++++++
 .../jakarta/faces/component/_EmptyIterator.java    |   43 +
 .../faces/component/_ExternalSpecifications.java   |   84 +
 .../component/_FacetsAndChildrenIterator.java      |   73 +
 .../faces/component/_LabeledFacesMessage.java      |   71 +
 .../java/jakarta/faces/component/_LocaleUtils.java |  346 +++
 .../jakarta/faces/component/_MessageUtils.java     |  229 ++
 .../component/_MethodBindingToActionListener.java  |   47 +
 .../faces/component/_MethodBindingToListener.java  |  121 +
 .../_MethodBindingToMethodExpression.java          |  263 ++
 .../_MethodBindingToValueChangeListener.java       |   48 +
 .../_MethodExpressionToMethodBinding.java          |  128 +
 .../component/_ParametrizableFacesMessage.java     |  157 ++
 .../faces/component/_PassThroughAttributesMap.java |  139 +
 .../faces/component/_PrimitiveArrayIterator.java   |   59 +
 .../faces/component/_PropertyDescriptorHolder.java |   79 +
 .../faces/component/_SelectItemsIterator.java      |  385 +++
 .../jakarta/faces/component/_SelectItemsUtil.java  |  170 ++
 .../faces/component/_SharedRendererUtils.java      |  494 ++++
 .../java/jakarta/faces/component/_UIMessage.java   |   84 +
 .../java/jakarta/faces/component/_UIMessages.java  |   92 +
 .../java/jakarta/faces/component/_UIParameter.java |   98 +
 .../jakarta/faces/component/_UISelectItem.java     |  138 +
 .../jakarta/faces/component/_UISelectItems.java    |  178 ++
 .../java/jakarta/faces/component/_UIWebsocket.java |   90 +
 .../jakarta/faces/component/_ValidationUtils.java  |   35 +
 .../component/_ValueBindingToValueExpression.java  |  294 +++
 .../component/_ValueExpressionToValueBinding.java  |  249 ++
 .../jakarta/faces/component/_ViewAttributeMap.java |  178 ++
 .../faces/component/behavior/AjaxBehavior.java     |  413 +++
 .../jakarta/faces/component/behavior/Behavior.java |   29 +
 .../faces/component/behavior/BehaviorBase.java     |  287 +++
 .../faces/component/behavior/ClientBehavior.java   |   36 +
 .../component/behavior/ClientBehaviorBase.java     |  150 ++
 .../component/behavior/ClientBehaviorContext.java  |  152 ++
 .../component/behavior/ClientBehaviorHint.java     |   27 +
 .../component/behavior/ClientBehaviorHolder.java   |   42 +
 .../faces/component/behavior/FacesBehavior.java    |   40 +
 .../behavior/_AjaxBehaviorDeltaStateHelper.java    |  710 ++++++
 .../component/behavior/_AttachedDeltaWrapper.java  |   48 +
 .../behavior/_AttachedListStateWrapper.java        |   39 +
 .../component/behavior/_AttachedStateWrapper.java  |   54 +
 .../faces/component/behavior/_DeltaList.java       |  311 +++
 .../component/behavior/_DeltaStateHelper.java      |  921 +++++++
 .../faces/component/html/HtmlInputHidden.java      |   63 +
 .../faces/component/html/_AccesskeyProperty.java   |   32 +
 .../jakarta/faces/component/html/_AltProperty.java |   31 +
 .../faces/component/html/_ChangeProperty.java      |   32 +
 .../jakarta/faces/component/html/_ClassUtils.java  |  415 +++
 .../component/html/_CommonEventConstants.java      |   89 +
 .../component/html/_CommonPropertyConstants.java   |  206 ++
 .../html/_DisabledClassEnabledClassProperties.java |   39 +
 .../html/_DisabledReadonlyProperties.java          |   39 +
 .../faces/component/html/_EscapeProperty.java      |   32 +
 .../faces/component/html/_EventProperties.java     |   96 +
 .../faces/component/html/_FocusBlurProperties.java |   40 +
 .../jakarta/faces/component/html/_HtmlBody.java    |   95 +
 .../jakarta/faces/component/html/_HtmlColumn.java  |   90 +
 .../faces/component/html/_HtmlCommandButton.java   |   64 +
 .../faces/component/html/_HtmlCommandLink.java     |   58 +
 .../faces/component/html/_HtmlCommandScript.java   |   65 +
 .../faces/component/html/_HtmlDataTable.java       |  193 ++
 .../jakarta/faces/component/html/_HtmlDoctype.java |   59 +
 .../jakarta/faces/component/html/_HtmlForm.java    |   90 +
 .../faces/component/html/_HtmlGraphicImage.java    |  107 +
 .../jakarta/faces/component/html/_HtmlHead.java    |   93 +
 .../faces/component/html/_HtmlInputFile.java       |  157 ++
 .../faces/component/html/_HtmlInputSecret.java     |   86 +
 .../faces/component/html/_HtmlInputText.java       |   77 +
 .../faces/component/html/_HtmlInputTextarea.java   |   65 +
 .../jakarta/faces/component/html/_HtmlMessage.java |   45 +
 .../faces/component/html/_HtmlMessages.java        |   61 +
 .../component/html/_HtmlOutcomeTargetButton.java   |   65 +
 .../component/html/_HtmlOutcomeTargetLink.java     |   46 +
 .../faces/component/html/_HtmlOutputFormat.java    |   45 +
 .../faces/component/html/_HtmlOutputLabel.java     |   54 +
 .../faces/component/html/_HtmlOutputLink.java      |   56 +
 .../faces/component/html/_HtmlOutputText.java      |   45 +
 .../faces/component/html/_HtmlPanelGrid.java       |  188 ++
 .../faces/component/html/_HtmlPanelGroup.java      |   55 +
 .../component/html/_HtmlSelectBooleanCheckbox.java |   55 +
 .../component/html/_HtmlSelectManyCheckbox.java    |  105 +
 .../component/html/_HtmlSelectManyListbox.java     |   81 +
 .../faces/component/html/_HtmlSelectManyMenu.java  |   70 +
 .../component/html/_HtmlSelectOneListbox.java      |   79 +
 .../faces/component/html/_HtmlSelectOneMenu.java   |   65 +
 .../faces/component/html/_HtmlSelectOneRadio.java  |   88 +
 .../faces/component/html/_LabelProperty.java       |   33 +
 .../faces/component/html/_LinkProperties.java      |   92 +
 .../faces/component/html/_MessageProperties.java   |   88 +
 .../faces/component/html/_MessageUtils.java        |  230 ++
 .../html/_ParametrizableFacesMessage.java          |  157 ++
 .../faces/component/html/_RoleProperty.java        |   31 +
 .../faces/component/html/_SelectProperty.java      |   32 +
 .../faces/component/html/_StyleProperties.java     |   39 +
 .../faces/component/html/_TabindexProperty.java    |   32 +
 .../faces/component/html/_TitleProperty.java       |   31 +
 .../faces/component/html/_UniversalProperties.java |   47 +
 .../search/ComponentNotFoundException.java         |   48 +
 .../component/search/SearchExpressionContext.java  |   57 +
 .../search/SearchExpressionContextFactory.java     |   47 +
 .../component/search/SearchExpressionHandler.java  |   69 +
 .../search/SearchExpressionHandlerWrapper.java     |  110 +
 .../component/search/SearchExpressionHint.java     |   42 +
 .../component/search/SearchKeywordContext.java     |   75 +
 .../component/search/SearchKeywordResolver.java    |   66 +
 .../component/search/UntargetableComponent.java    |   27 +
 .../faces/component/visit/VisitCallback.java       |   49 +
 .../faces/component/visit/VisitContext.java        |  128 +
 .../faces/component/visit/VisitContextFactory.java |   50 +
 .../faces/component/visit/VisitContextWrapper.java |   96 +
 .../jakarta/faces/component/visit/VisitHint.java   |   56 +
 .../jakarta/faces/component/visit/VisitResult.java |   49 +
 .../jakarta/faces/context/ExceptionHandler.java    |   52 +
 .../faces/context/ExceptionHandlerFactory.java     |   56 +
 .../faces/context/ExceptionHandlerWrapper.java     |   91 +
 .../jakarta/faces/context/ExternalContext.java     |  816 ++++++
 .../faces/context/ExternalContextFactory.java      |   49 +
 .../faces/context/ExternalContextWrapper.java      |  519 ++++
 .../java/jakarta/faces/context/FacesContext.java   |  478 ++++
 .../jakarta/faces/context/FacesContextFactory.java |   59 +
 .../jakarta/faces/context/FacesContextWrapper.java |  287 +++
 api/src/main/java/jakarta/faces/context/Flash.java |   49 +
 .../java/jakarta/faces/context/FlashFactory.java   |   46 +
 .../java/jakarta/faces/context/FlashWrapper.java   |  156 ++
 .../faces/context/PartialResponseWriter.java       |  269 ++
 .../jakarta/faces/context/PartialViewContext.java  |   82 +
 .../faces/context/PartialViewContextFactory.java   |   46 +
 .../faces/context/PartialViewContextWrapper.java   |  135 +
 .../jakarta/faces/context/RequestCookieMap.java    |   39 +
 .../java/jakarta/faces/context/ResponseStream.java |   29 +
 .../java/jakarta/faces/context/ResponseWriter.java |   94 +
 .../faces/context/ResponseWriterWrapper.java       |  170 ++
 .../java/jakarta/faces/context/SessionMap.java     |   39 +
 .../context/_MyFacesExternalContextHelper.java     |   54 +
 .../jakarta/faces/convert/BigDecimalConverter.java |  109 +
 .../jakarta/faces/convert/BigIntegerConverter.java |  107 +
 .../jakarta/faces/convert/BooleanConverter.java    |  104 +
 .../java/jakarta/faces/convert/ByteConverter.java  |  105 +
 .../jakarta/faces/convert/CharacterConverter.java  |  105 +
 .../main/java/jakarta/faces/convert/Converter.java |   44 +
 .../jakarta/faces/convert/ConverterException.java  |   73 +
 .../jakarta/faces/convert/DateTimeConverter.java   |  654 +++++
 .../jakarta/faces/convert/DoubleConverter.java     |  193 ++
 .../java/jakarta/faces/convert/EnumConverter.java  |  218 ++
 .../java/jakarta/faces/convert/FacesConverter.java |   51 +
 .../java/jakarta/faces/convert/FloatConverter.java |  104 +
 .../jakarta/faces/convert/IntegerConverter.java    |  104 +
 .../java/jakarta/faces/convert/LongConverter.java  |  104 +
 .../jakarta/faces/convert/NumberConverter.java     |  599 +++++
 .../java/jakarta/faces/convert/ShortConverter.java |  104 +
 .../faces/convert/_LabeledFacesMessage.java        |   73 +
 .../java/jakarta/faces/convert/_MessageUtils.java  |  231 ++
 .../faces/convert/_ParametrizableFacesMessage.java |  157 ++
 .../el/CompositeComponentExpressionHolder.java     |   30 +
 .../java/jakarta/faces/el/EvaluationException.java |   66 +
 .../main/java/jakarta/faces/el/MethodBinding.java  |   63 +
 .../jakarta/faces/el/MethodNotFoundException.java  |   64 +
 .../faces/el/PropertyNotFoundException.java        |   64 +
 .../java/jakarta/faces/el/PropertyResolver.java    |  130 +
 .../jakarta/faces/el/ReferenceSyntaxException.java |   64 +
 .../main/java/jakarta/faces/el/ValueBinding.java   |   58 +
 .../java/jakarta/faces/el/VariableResolver.java    |   45 +
 .../faces/event/AbortProcessingException.java      |   49 +
 .../main/java/jakarta/faces/event/ActionEvent.java |   61 +
 .../java/jakarta/faces/event/ActionListener.java   |   32 +
 .../jakarta/faces/event/ActionListenerWrapper.java |   32 +
 .../jakarta/faces/event/AjaxBehaviorEvent.java     |   63 +
 .../jakarta/faces/event/AjaxBehaviorListener.java  |   27 +
 .../java/jakarta/faces/event/BehaviorEvent.java    |   56 +
 .../java/jakarta/faces/event/BehaviorListener.java |   27 +
 .../jakarta/faces/event/ComponentSystemEvent.java  |   64 +
 .../faces/event/ComponentSystemEventListener.java  |   28 +
 .../jakarta/faces/event/ExceptionQueuedEvent.java  |   45 +
 .../faces/event/ExceptionQueuedEventContext.java   |  110 +
 .../main/java/jakarta/faces/event/FacesEvent.java  |   89 +
 .../java/jakarta/faces/event/FacesListener.java    |   28 +
 .../main/java/jakarta/faces/event/ListenerFor.java |   41 +
 .../java/jakarta/faces/event/ListenersFor.java     |   36 +
 .../event/MethodExpressionActionListener.java      |  185 ++
 .../event/MethodExpressionValueChangeListener.java |  185 ++
 .../main/java/jakarta/faces/event/NamedEvent.java  |   38 +
 .../main/java/jakarta/faces/event/PhaseEvent.java  |  131 +
 api/src/main/java/jakarta/faces/event/PhaseId.java |  115 +
 .../java/jakarta/faces/event/PhaseListener.java    |   31 +
 .../jakarta/faces/event/PostAddToViewEvent.java    |   53 +
 .../faces/event/PostConstructApplicationEvent.java |   52 +
 .../faces/event/PostConstructCustomScopeEvent.java |   52 +
 .../faces/event/PostConstructViewMapEvent.java     |   44 +
 .../faces/event/PostKeepFlashValueEvent.java       |   45 +
 .../faces/event/PostPutFlashValueEvent.java        |   45 +
 .../jakarta/faces/event/PostRenderViewEvent.java   |   42 +
 .../jakarta/faces/event/PostRestoreStateEvent.java |   49 +
 .../jakarta/faces/event/PostValidateEvent.java     |   44 +
 .../jakarta/faces/event/PreClearFlashEvent.java    |   39 +
 .../faces/event/PreDestroyApplicationEvent.java    |   52 +
 .../faces/event/PreDestroyCustomScopeEvent.java    |   50 +
 .../faces/event/PreDestroyViewMapEvent.java        |   44 +
 .../faces/event/PreRemoveFlashValueEvent.java      |   45 +
 .../faces/event/PreRemoveFromViewEvent.java        |   53 +
 .../faces/event/PreRenderComponentEvent.java       |   44 +
 .../jakarta/faces/event/PreRenderViewEvent.java    |   44 +
 .../java/jakarta/faces/event/PreValidateEvent.java |   44 +
 .../java/jakarta/faces/event/ScopeContext.java     |   56 +
 .../main/java/jakarta/faces/event/SystemEvent.java |   63 +
 .../jakarta/faces/event/SystemEventListener.java   |   29 +
 .../faces/event/SystemEventListenerHolder.java     |   29 +
 .../java/jakarta/faces/event/ValueChangeEvent.java |   79 +
 .../jakarta/faces/event/ValueChangeListener.java   |   27 +
 .../java/jakarta/faces/event/ViewMapListener.java  |   26 +
 .../java/jakarta/faces/event/WebsocketEvent.java   |  121 +
 api/src/main/java/jakarta/faces/flow/Flow.java     |   64 +
 .../main/java/jakarta/faces/flow/FlowCallNode.java |   35 +
 .../main/java/jakarta/faces/flow/FlowHandler.java  |   62 +
 .../jakarta/faces/flow/FlowHandlerFactory.java     |   30 +
 .../faces/flow/FlowHandlerFactoryWrapper.java      |   51 +
 api/src/main/java/jakarta/faces/flow/FlowNode.java |   28 +
 .../main/java/jakarta/faces/flow/FlowScoped.java   |   43 +
 .../java/jakarta/faces/flow/MethodCallNode.java    |   34 +
 .../main/java/jakarta/faces/flow/Parameter.java    |   31 +
 .../main/java/jakarta/faces/flow/ReturnNode.java   |   31 +
 .../main/java/jakarta/faces/flow/SwitchCase.java   |   32 +
 .../main/java/jakarta/faces/flow/SwitchNode.java   |   34 +
 api/src/main/java/jakarta/faces/flow/ViewNode.java |   28 +
 .../jakarta/faces/flow/builder/FlowBuilder.java    |   61 +
 .../faces/flow/builder/FlowBuilderParameter.java   |   39 +
 .../faces/flow/builder/FlowCallBuilder.java        |   38 +
 .../jakarta/faces/flow/builder/FlowDefinition.java |   37 +
 .../faces/flow/builder/MethodCallBuilder.java      |   46 +
 .../faces/flow/builder/NavigationCaseBuilder.java  |   52 +
 .../jakarta/faces/flow/builder/NodeBuilder.java    |   28 +
 .../jakarta/faces/flow/builder/ReturnBuilder.java  |   33 +
 .../jakarta/faces/flow/builder/SwitchBuilder.java  |   34 +
 .../faces/flow/builder/SwitchCaseBuilder.java      |   34 +
 .../jakarta/faces/flow/builder/ViewBuilder.java    |   28 +
 .../java/jakarta/faces/lifecycle/ClientWindow.java |   58 +
 .../faces/lifecycle/ClientWindowFactory.java       |   48 +
 .../faces/lifecycle/ClientWindowWrapper.java       |   79 +
 .../java/jakarta/faces/lifecycle/Lifecycle.java    |   51 +
 .../jakarta/faces/lifecycle/LifecycleFactory.java  |   66 +
 .../jakarta/faces/lifecycle/LifecycleWrapper.java  |   75 +
 .../java/jakarta/faces/model/ArrayDataModel.java   |  125 +
 .../jakarta/faces/model/CollectionDataModel.java   |  128 +
 .../main/java/jakarta/faces/model/DataModel.java   |  214 ++
 .../java/jakarta/faces/model/DataModelEvent.java   |   56 +
 .../jakarta/faces/model/DataModelListener.java     |   27 +
 .../java/jakarta/faces/model/FacesDataModel.java   |   39 +
 .../jakarta/faces/model/IterableDataModel.java     |  181 ++
 .../java/jakarta/faces/model/ListDataModel.java    |  128 +
 .../java/jakarta/faces/model/ResultDataModel.java  |  140 +
 .../jakarta/faces/model/ResultSetDataModel.java    |  773 ++++++
 .../java/jakarta/faces/model/ScalarDataModel.java  |  117 +
 .../main/java/jakarta/faces/model/SelectItem.java  |  167 ++
 .../java/jakarta/faces/model/SelectItemGroup.java  |   70 +
 api/src/main/java/jakarta/faces/push/Push.java     |   37 +
 .../main/java/jakarta/faces/push/PushContext.java  |   45 +
 .../faces/render/ClientBehaviorRenderer.java       |   54 +
 .../faces/render/FacesBehaviorRenderer.java        |   47 +
 .../java/jakarta/faces/render/FacesRenderer.java   |   51 +
 .../main/java/jakarta/faces/render/RenderKit.java  |  132 +
 .../jakarta/faces/render/RenderKitFactory.java     |   67 +
 .../jakarta/faces/render/RenderKitWrapper.java     |  126 +
 .../main/java/jakarta/faces/render/Renderer.java   |  158 ++
 .../java/jakarta/faces/render/RendererWrapper.java |   87 +
 .../jakarta/faces/render/ResponseStateManager.java |  150 ++
 .../jakarta/faces/validator/BeanValidator.java     |  685 +++++
 .../faces/validator/DoubleRangeValidator.java      |  294 +++
 .../jakarta/faces/validator/FacesValidator.java    |   52 +
 .../jakarta/faces/validator/LengthValidator.java   |  263 ++
 .../faces/validator/LongRangeValidator.java        |  290 +++
 .../faces/validator/MethodExpressionValidator.java |  131 +
 .../jakarta/faces/validator/RegexValidator.java    |  263 ++
 .../jakarta/faces/validator/RequiredValidator.java |  103 +
 .../java/jakarta/faces/validator/Validator.java    |   36 +
 .../faces/validator/ValidatorException.java        |  120 +
 .../faces/validator/_ExternalSpecifications.java   |   84 +
 .../faces/validator/_LabeledFacesMessage.java      |   72 +
 .../jakarta/faces/validator/_MessageUtils.java     |  234 ++
 .../validator/_ParametrizableFacesMessage.java     |  156 ++
 .../jakarta/faces/validator/_ValidationUtils.java  |   35 +
 .../view/ActionSource2AttachedObjectHandler.java   |   31 +
 .../view/ActionSource2AttachedObjectTarget.java    |   30 +
 .../jakarta/faces/view/AttachedObjectHandler.java  |   53 +
 .../jakarta/faces/view/AttachedObjectTarget.java   |   39 +
 .../view/BehaviorHolderAttachedObjectHandler.java  |   27 +
 .../view/BehaviorHolderAttachedObjectTarget.java   |   27 +
 .../EditableValueHolderAttachedObjectHandler.java  |   33 +
 .../EditableValueHolderAttachedObjectTarget.java   |   30 +
 api/src/main/java/jakarta/faces/view/Location.java |   58 +
 .../faces/view/StateManagementStrategy.java        |   32 +
 .../view/ValueHolderAttachedObjectHandler.java     |   31 +
 .../view/ValueHolderAttachedObjectTarget.java      |   30 +
 .../faces/view/ViewDeclarationLanguage.java        |  178 ++
 .../faces/view/ViewDeclarationLanguageFactory.java |   66 +
 .../faces/view/ViewDeclarationLanguageWrapper.java |  142 ++
 .../main/java/jakarta/faces/view/ViewMetadata.java |  204 ++
 .../main/java/jakarta/faces/view/ViewScoped.java   |   42 +
 .../faces/view/facelets/AttributeHandler.java      |   27 +
 .../faces/view/facelets/BehaviorConfig.java        |   27 +
 .../faces/view/facelets/BehaviorHandler.java       |   81 +
 .../faces/view/facelets/ComponentConfig.java       |   29 +
 .../faces/view/facelets/ComponentHandler.java      |  129 +
 .../view/facelets/CompositeFaceletHandler.java     |   54 +
 .../faces/view/facelets/ConverterConfig.java       |   27 +
 .../faces/view/facelets/ConverterHandler.java      |   64 +
 .../view/facelets/DelegatingMetaTagHandler.java    |  107 +
 .../java/jakarta/faces/view/facelets/Facelet.java  |   46 +
 .../jakarta/faces/view/facelets/FaceletCache.java  |   82 +
 .../faces/view/facelets/FaceletCacheFactory.java   |   47 +
 .../faces/view/facelets/FaceletContext.java        |  119 +
 .../faces/view/facelets/FaceletException.java      |   47 +
 .../faces/view/facelets/FaceletHandler.java        |   43 +
 .../facelets/FaceletsAttachedObjectHandler.java    |   72 +
 .../view/facelets/FaceletsResourceResolver.java    |   33 +
 .../jakarta/faces/view/facelets/FacetHandler.java  |   27 +
 .../java/jakarta/faces/view/facelets/MetaRule.java |   33 +
 .../jakarta/faces/view/facelets/MetaRuleset.java   |   61 +
 .../faces/view/facelets/MetaTagHandler.java        |   66 +
 .../java/jakarta/faces/view/facelets/Metadata.java |   31 +
 .../faces/view/facelets/MetadataTarget.java        |   63 +
 .../faces/view/facelets/ResourceResolver.java      |   36 +
 .../main/java/jakarta/faces/view/facelets/Tag.java |  111 +
 .../jakarta/faces/view/facelets/TagAttribute.java  |  182 ++
 .../faces/view/facelets/TagAttributeException.java |   89 +
 .../jakarta/faces/view/facelets/TagAttributes.java |   94 +
 .../jakarta/faces/view/facelets/TagConfig.java     |   31 +
 .../jakarta/faces/view/facelets/TagDecorator.java  |   29 +
 .../jakarta/faces/view/facelets/TagException.java  |   64 +
 .../jakarta/faces/view/facelets/TagHandler.java    |   79 +
 .../faces/view/facelets/TagHandlerDelegate.java    |   33 +
 .../view/facelets/TagHandlerDelegateFactory.java   |   56 +
 .../jakarta/faces/view/facelets/TextHandler.java   |   29 +
 .../faces/view/facelets/ValidatorConfig.java       |   27 +
 .../faces/view/facelets/ValidatorHandler.java      |   65 +
 .../java/jakarta/faces/webapp/AttributeTag.java    |  132 +
 .../java/jakarta/faces/webapp/ConverterELTag.java  |   66 +
 .../java/jakarta/faces/webapp/ConverterTag.java    |  131 +
 .../java/jakarta/faces/webapp/FacesServlet.java    |  256 ++
 .../main/java/jakarta/faces/webapp/FacetTag.java   |   67 +
 .../webapp/PreJsf2ExceptionHandlerFactory.java     |  294 +++
 .../jakarta/faces/webapp/UIComponentBodyTag.java   |   29 +
 .../faces/webapp/UIComponentClassicTagBase.java    | 1368 ++++++++++
 .../jakarta/faces/webapp/UIComponentELTag.java     |  136 +
 .../java/jakarta/faces/webapp/UIComponentTag.java  |  363 +++
 .../jakarta/faces/webapp/UIComponentTagBase.java   |  108 +
 .../java/jakarta/faces/webapp/ValidatorELTag.java  |   64 +
 .../java/jakarta/faces/webapp/ValidatorTag.java    |  131 +
 .../faces/webapp/_PageContextOutWriter.java        |   79 +
 api/src/main/java/javax/faces/FacesException.java  |   53 -
 api/src/main/java/javax/faces/FacesWrapper.java    |   34 -
 api/src/main/java/javax/faces/FactoryFinder.java   |  817 ------
 .../javax/faces/_FactoryFinderProviderFactory.java |  238 --
 .../javax/faces/annotation/ApplicationMap.java     |   37 -
 .../java/javax/faces/annotation/FacesConfig.java   |   44 -
 .../main/java/javax/faces/annotation/FlowMap.java  |   37 -
 .../java/javax/faces/annotation/HeaderMap.java     |   37 -
 .../javax/faces/annotation/HeaderValuesMap.java    |   37 -
 .../javax/faces/annotation/InitParameterMap.java   |   37 -
 .../javax/faces/annotation/ManagedProperty.java    |   37 -
 .../javax/faces/annotation/RequestCookieMap.java   |   37 -
 .../java/javax/faces/annotation/RequestMap.java    |   37 -
 .../faces/annotation/RequestParameterMap.java      |   37 -
 .../annotation/RequestParameterValuesMap.java      |   37 -
 .../java/javax/faces/annotation/SessionMap.java    |   37 -
 .../main/java/javax/faces/annotation/ViewMap.java  |   37 -
 .../java/javax/faces/application/Application.java  | 1309 ----------
 .../ApplicationConfigurationPopulator.java         |   27 -
 .../faces/application/ApplicationFactory.java      |   58 -
 .../faces/application/ApplicationWrapper.java      |  491 ----
 .../application/ConfigurableNavigationHandler.java |   73 -
 .../ConfigurableNavigationHandlerWrapper.java      |   87 -
 .../java/javax/faces/application/FacesMessage.java |  295 ---
 .../javax/faces/application/NavigationCase.java    |  354 ---
 .../faces/application/NavigationCaseWrapper.java   |  137 -
 .../javax/faces/application/NavigationHandler.java |   46 -
 .../application/NavigationHandlerWrapper.java      |   63 -
 .../java/javax/faces/application/ProjectStage.java |   40 -
 .../faces/application/ProtectedViewException.java  |   45 -
 .../java/javax/faces/application/Resource.java     |   92 -
 .../faces/application/ResourceDependencies.java    |   36 -
 .../faces/application/ResourceDependency.java      |   40 -
 .../javax/faces/application/ResourceHandler.java   |  202 --
 .../faces/application/ResourceHandlerWrapper.java  |  162 --
 .../faces/application/ResourceVisitOption.java     |   28 -
 .../javax/faces/application/ResourceWrapper.java   |  118 -
 .../java/javax/faces/application/StateManager.java |  352 ---
 .../faces/application/StateManagerWrapper.java     |  121 -
 .../faces/application/ViewExpiredException.java    |   63 -
 .../java/javax/faces/application/ViewHandler.java  |  450 ----
 .../faces/application/ViewHandlerWrapper.java      |  187 --
 .../java/javax/faces/application/ViewResource.java |   34 -
 .../javax/faces/application/ViewVisitOption.java   |   29 -
 .../javax/faces/application/_NavigationUtils.java  |  104 -
 .../java/javax/faces/bean/ApplicationScoped.java   |   37 -
 .../main/java/javax/faces/bean/CustomScoped.java   |   36 -
 .../main/java/javax/faces/bean/ManagedBean.java    |   45 -
 .../java/javax/faces/bean/ManagedProperty.java     |   42 -
 api/src/main/java/javax/faces/bean/NoneScoped.java |   36 -
 .../main/java/javax/faces/bean/ReferencedBean.java |   36 -
 .../main/java/javax/faces/bean/RequestScoped.java  |   36 -
 .../main/java/javax/faces/bean/SessionScoped.java  |   36 -
 api/src/main/java/javax/faces/bean/ViewScoped.java |   36 -
 .../main/java/javax/faces/bean/package-info.java   |   20 -
 .../java/javax/faces/component/ActionSource.java   |   52 -
 .../java/javax/faces/component/ActionSource2.java  |   33 -
 .../javax/faces/component/ContextCallback.java     |   36 -
 .../javax/faces/component/EditableValueHolder.java |  180 --
 .../java/javax/faces/component/FacesComponent.java |   44 -
 .../javax/faces/component/NamingContainer.java     |   63 -
 .../javax/faces/component/PartialStateHolder.java  |   31 -
 .../java/javax/faces/component/StateHelper.java    |   43 -
 .../java/javax/faces/component/StateHolder.java    |   34 -
 .../faces/component/TransientStateHelper.java      |   70 -
 .../faces/component/TransientStateHolder.java      |   62 -
 .../main/java/javax/faces/component/UIColumn.java  |   82 -
 .../main/java/javax/faces/component/UICommand.java |  263 --
 .../java/javax/faces/component/UIComponent.java    | 1834 --------------
 .../javax/faces/component/UIComponentBase.java     | 2668 -------------------
 .../main/java/javax/faces/component/UIData.java    | 2505 ------------------
 .../main/java/javax/faces/component/UIForm.java    |  480 ----
 .../main/java/javax/faces/component/UIGraphic.java |  150 --
 .../javax/faces/component/UIImportConstants.java   |   88 -
 .../main/java/javax/faces/component/UIInput.java   | 1430 -----------
 .../javax/faces/component/UINamingContainer.java   |  208 --
 .../javax/faces/component/UIOutcomeTarget.java     |  102 -
 .../main/java/javax/faces/component/UIOutput.java  |  345 ---
 .../main/java/javax/faces/component/UIPanel.java   |   47 -
 .../javax/faces/component/UISelectBoolean.java     |  150 --
 .../java/javax/faces/component/UISelectMany.java   |  474 ----
 .../java/javax/faces/component/UISelectOne.java    |  213 --
 .../java/javax/faces/component/UIViewAction.java   |  432 ----
 .../javax/faces/component/UIViewParameter.java     |  353 ---
 .../java/javax/faces/component/UIViewRoot.java     | 2065 ---------------
 .../java/javax/faces/component/UniqueIdVendor.java |   29 -
 .../faces/component/UpdateModelException.java      |   45 -
 .../java/javax/faces/component/ValueHolder.java    |   37 -
 .../main/java/javax/faces/component/_ArrayMap.java |  637 -----
 .../component/_AttachedCollectionStateWrapper.java |   46 -
 .../faces/component/_AttachedDeltaWrapper.java     |   48 -
 .../faces/component/_AttachedListStateWrapper.java |   39 -
 .../faces/component/_AttachedStateWrapper.java     |   54 -
 .../faces/component/_BeanValidationUtils.java      |   35 -
 .../java/javax/faces/component/_ClassUtils.java    |  414 ---
 .../faces/component/_ComponentAttributesMap.java   |  785 ------
 .../faces/component/_ComponentChildrenList.java    |  209 --
 .../javax/faces/component/_ComponentFacetMap.java  |  667 -----
 .../javax/faces/component/_ComponentUtils.java     |  459 ----
 .../java/javax/faces/component/_DeltaList.java     |  308 ---
 .../javax/faces/component/_DeltaStateHelper.java   | 1117 --------
 .../java/javax/faces/component/_EmptyIterator.java |   43 -
 .../faces/component/_ExternalSpecifications.java   |   84 -
 .../component/_FacetsAndChildrenIterator.java      |   73 -
 .../faces/component/_LabeledFacesMessage.java      |   70 -
 .../java/javax/faces/component/_LocaleUtils.java   |  346 ---
 .../java/javax/faces/component/_MessageUtils.java  |  228 --
 .../component/_MethodBindingToActionListener.java  |   47 -
 .../faces/component/_MethodBindingToListener.java  |  121 -
 .../_MethodBindingToMethodExpression.java          |  262 --
 .../_MethodBindingToValueChangeListener.java       |   48 -
 .../_MethodExpressionToMethodBinding.java          |  127 -
 .../component/_ParametrizableFacesMessage.java     |  156 --
 .../faces/component/_PassThroughAttributesMap.java |  139 -
 .../faces/component/_PrimitiveArrayIterator.java   |   59 -
 .../faces/component/_PropertyDescriptorHolder.java |   79 -
 .../faces/component/_SelectItemsIterator.java      |  384 ---
 .../javax/faces/component/_SelectItemsUtil.java    |  170 --
 .../faces/component/_SharedRendererUtils.java      |  493 ----
 .../java/javax/faces/component/_UIMessage.java     |   84 -
 .../java/javax/faces/component/_UIMessages.java    |   92 -
 .../java/javax/faces/component/_UIParameter.java   |   98 -
 .../java/javax/faces/component/_UISelectItem.java  |  138 -
 .../java/javax/faces/component/_UISelectItems.java |  178 --
 .../java/javax/faces/component/_UIWebsocket.java   |   90 -
 .../javax/faces/component/_ValidationUtils.java    |   35 -
 .../component/_ValueBindingToValueExpression.java  |  293 ---
 .../component/_ValueExpressionToValueBinding.java  |  248 --
 .../javax/faces/component/_ViewAttributeMap.java   |  179 --
 .../faces/component/behavior/AjaxBehavior.java     |  413 ---
 .../javax/faces/component/behavior/Behavior.java   |   29 -
 .../faces/component/behavior/BehaviorBase.java     |  287 ---
 .../faces/component/behavior/ClientBehavior.java   |   36 -
 .../component/behavior/ClientBehaviorBase.java     |  150 --
 .../component/behavior/ClientBehaviorContext.java  |  152 --
 .../component/behavior/ClientBehaviorHint.java     |   27 -
 .../component/behavior/ClientBehaviorHolder.java   |   42 -
 .../faces/component/behavior/FacesBehavior.java    |   40 -
 .../behavior/_AjaxBehaviorDeltaStateHelper.java    |  710 ------
 .../component/behavior/_AttachedDeltaWrapper.java  |   48 -
 .../behavior/_AttachedListStateWrapper.java        |   39 -
 .../component/behavior/_AttachedStateWrapper.java  |   54 -
 .../javax/faces/component/behavior/_DeltaList.java |  311 ---
 .../component/behavior/_DeltaStateHelper.java      |  921 -------
 .../faces/component/html/HtmlInputHidden.java      |   63 -
 .../faces/component/html/_AccesskeyProperty.java   |   32 -
 .../javax/faces/component/html/_AltProperty.java   |   31 -
 .../faces/component/html/_ChangeProperty.java      |   32 -
 .../javax/faces/component/html/_ClassUtils.java    |  414 ---
 .../component/html/_CommonEventConstants.java      |   88 -
 .../component/html/_CommonPropertyConstants.java   |  206 --
 .../html/_DisabledClassEnabledClassProperties.java |   39 -
 .../html/_DisabledReadonlyProperties.java          |   39 -
 .../faces/component/html/_EscapeProperty.java      |   32 -
 .../faces/component/html/_EventProperties.java     |   96 -
 .../faces/component/html/_FocusBlurProperties.java |   40 -
 .../java/javax/faces/component/html/_HtmlBody.java |   95 -
 .../javax/faces/component/html/_HtmlColumn.java    |   90 -
 .../faces/component/html/_HtmlCommandButton.java   |   64 -
 .../faces/component/html/_HtmlCommandLink.java     |   58 -
 .../faces/component/html/_HtmlCommandScript.java   |   65 -
 .../javax/faces/component/html/_HtmlDataTable.java |  193 --
 .../javax/faces/component/html/_HtmlDoctype.java   |   59 -
 .../java/javax/faces/component/html/_HtmlForm.java |   90 -
 .../faces/component/html/_HtmlGraphicImage.java    |  107 -
 .../java/javax/faces/component/html/_HtmlHead.java |   93 -
 .../javax/faces/component/html/_HtmlInputFile.java |  156 --
 .../faces/component/html/_HtmlInputSecret.java     |   86 -
 .../javax/faces/component/html/_HtmlInputText.java |   77 -
 .../faces/component/html/_HtmlInputTextarea.java   |   65 -
 .../javax/faces/component/html/_HtmlMessage.java   |   45 -
 .../javax/faces/component/html/_HtmlMessages.java  |   61 -
 .../component/html/_HtmlOutcomeTargetButton.java   |   65 -
 .../component/html/_HtmlOutcomeTargetLink.java     |   46 -
 .../faces/component/html/_HtmlOutputFormat.java    |   45 -
 .../faces/component/html/_HtmlOutputLabel.java     |   54 -
 .../faces/component/html/_HtmlOutputLink.java      |   56 -
 .../faces/component/html/_HtmlOutputText.java      |   45 -
 .../javax/faces/component/html/_HtmlPanelGrid.java |  188 --
 .../faces/component/html/_HtmlPanelGroup.java      |   55 -
 .../component/html/_HtmlSelectBooleanCheckbox.java |   55 -
 .../component/html/_HtmlSelectManyCheckbox.java    |  105 -
 .../component/html/_HtmlSelectManyListbox.java     |   81 -
 .../faces/component/html/_HtmlSelectManyMenu.java  |   70 -
 .../component/html/_HtmlSelectOneListbox.java      |   79 -
 .../faces/component/html/_HtmlSelectOneMenu.java   |   65 -
 .../faces/component/html/_HtmlSelectOneRadio.java  |   88 -
 .../javax/faces/component/html/_LabelProperty.java |   33 -
 .../faces/component/html/_LinkProperties.java      |   92 -
 .../faces/component/html/_MessageProperties.java   |   88 -
 .../javax/faces/component/html/_MessageUtils.java  |  229 --
 .../html/_ParametrizableFacesMessage.java          |  156 --
 .../javax/faces/component/html/_RoleProperty.java  |   31 -
 .../faces/component/html/_SelectProperty.java      |   32 -
 .../faces/component/html/_StyleProperties.java     |   39 -
 .../faces/component/html/_TabindexProperty.java    |   32 -
 .../javax/faces/component/html/_TitleProperty.java |   31 -
 .../faces/component/html/_UniversalProperties.java |   47 -
 .../search/ComponentNotFoundException.java         |   48 -
 .../component/search/SearchExpressionContext.java  |   57 -
 .../search/SearchExpressionContextFactory.java     |   47 -
 .../component/search/SearchExpressionHandler.java  |   69 -
 .../search/SearchExpressionHandlerWrapper.java     |  110 -
 .../component/search/SearchExpressionHint.java     |   42 -
 .../component/search/SearchKeywordContext.java     |   75 -
 .../component/search/SearchKeywordResolver.java    |   66 -
 .../component/search/UntargetableComponent.java    |   27 -
 .../javax/faces/component/visit/VisitCallback.java |   49 -
 .../javax/faces/component/visit/VisitContext.java  |  128 -
 .../faces/component/visit/VisitContextFactory.java |   50 -
 .../faces/component/visit/VisitContextWrapper.java |   96 -
 .../javax/faces/component/visit/VisitHint.java     |   56 -
 .../javax/faces/component/visit/VisitResult.java   |   49 -
 .../java/javax/faces/context/ExceptionHandler.java |   52 -
 .../faces/context/ExceptionHandlerFactory.java     |   56 -
 .../faces/context/ExceptionHandlerWrapper.java     |   91 -
 .../java/javax/faces/context/ExternalContext.java  |  815 ------
 .../faces/context/ExternalContextFactory.java      |   49 -
 .../faces/context/ExternalContextWrapper.java      |  519 ----
 .../java/javax/faces/context/FacesContext.java     |  476 ----
 .../javax/faces/context/FacesContextFactory.java   |   59 -
 .../javax/faces/context/FacesContextWrapper.java   |  286 ---
 api/src/main/java/javax/faces/context/Flash.java   |   49 -
 .../java/javax/faces/context/FlashFactory.java     |   46 -
 .../java/javax/faces/context/FlashWrapper.java     |  155 --
 .../javax/faces/context/PartialResponseWriter.java |  269 --
 .../javax/faces/context/PartialViewContext.java    |   82 -
 .../faces/context/PartialViewContextFactory.java   |   46 -
 .../faces/context/PartialViewContextWrapper.java   |  135 -
 .../java/javax/faces/context/RequestCookieMap.java |   39 -
 .../java/javax/faces/context/ResponseStream.java   |   29 -
 .../java/javax/faces/context/ResponseWriter.java   |   94 -
 .../javax/faces/context/ResponseWriterWrapper.java |  169 --
 .../main/java/javax/faces/context/SessionMap.java  |   39 -
 .../context/_MyFacesExternalContextHelper.java     |   54 -
 .../javax/faces/convert/BigDecimalConverter.java   |  109 -
 .../javax/faces/convert/BigIntegerConverter.java   |  107 -
 .../java/javax/faces/convert/BooleanConverter.java |  104 -
 .../java/javax/faces/convert/ByteConverter.java    |  105 -
 .../javax/faces/convert/CharacterConverter.java    |  105 -
 .../main/java/javax/faces/convert/Converter.java   |   44 -
 .../javax/faces/convert/ConverterException.java    |   73 -
 .../javax/faces/convert/DateTimeConverter.java     |  654 -----
 .../java/javax/faces/convert/DoubleConverter.java  |  193 --
 .../java/javax/faces/convert/EnumConverter.java    |  218 --
 .../java/javax/faces/convert/FacesConverter.java   |   51 -
 .../java/javax/faces/convert/FloatConverter.java   |  104 -
 .../java/javax/faces/convert/IntegerConverter.java |  104 -
 .../java/javax/faces/convert/LongConverter.java    |  104 -
 .../java/javax/faces/convert/NumberConverter.java  |  599 -----
 .../java/javax/faces/convert/ShortConverter.java   |  104 -
 .../javax/faces/convert/_LabeledFacesMessage.java  |   72 -
 .../java/javax/faces/convert/_MessageUtils.java    |  229 --
 .../faces/convert/_ParametrizableFacesMessage.java |  156 --
 .../el/CompositeComponentExpressionHolder.java     |   30 -
 .../java/javax/faces/el/EvaluationException.java   |   66 -
 .../main/java/javax/faces/el/MethodBinding.java    |   63 -
 .../javax/faces/el/MethodNotFoundException.java    |   64 -
 .../javax/faces/el/PropertyNotFoundException.java  |   64 -
 .../main/java/javax/faces/el/PropertyResolver.java |  130 -
 .../javax/faces/el/ReferenceSyntaxException.java   |   64 -
 api/src/main/java/javax/faces/el/ValueBinding.java |   58 -
 .../main/java/javax/faces/el/VariableResolver.java |   45 -
 .../faces/event/AbortProcessingException.java      |   49 -
 .../main/java/javax/faces/event/ActionEvent.java   |   61 -
 .../java/javax/faces/event/ActionListener.java     |   32 -
 .../javax/faces/event/ActionListenerWrapper.java   |   32 -
 .../java/javax/faces/event/AjaxBehaviorEvent.java  |   63 -
 .../javax/faces/event/AjaxBehaviorListener.java    |   27 -
 .../main/java/javax/faces/event/BehaviorEvent.java |   56 -
 .../java/javax/faces/event/BehaviorListener.java   |   27 -
 .../javax/faces/event/ComponentSystemEvent.java    |   64 -
 .../faces/event/ComponentSystemEventListener.java  |   28 -
 .../javax/faces/event/ExceptionQueuedEvent.java    |   45 -
 .../faces/event/ExceptionQueuedEventContext.java   |  110 -
 .../main/java/javax/faces/event/FacesEvent.java    |   89 -
 .../main/java/javax/faces/event/FacesListener.java |   28 -
 .../main/java/javax/faces/event/ListenerFor.java   |   41 -
 .../main/java/javax/faces/event/ListenersFor.java  |   36 -
 .../event/MethodExpressionActionListener.java      |  185 --
 .../event/MethodExpressionValueChangeListener.java |  185 --
 .../main/java/javax/faces/event/NamedEvent.java    |   38 -
 .../main/java/javax/faces/event/PhaseEvent.java    |  130 -
 api/src/main/java/javax/faces/event/PhaseId.java   |  114 -
 .../main/java/javax/faces/event/PhaseListener.java |   31 -
 .../java/javax/faces/event/PostAddToViewEvent.java |   53 -
 .../faces/event/PostConstructApplicationEvent.java |   52 -
 .../faces/event/PostConstructCustomScopeEvent.java |   52 -
 .../faces/event/PostConstructViewMapEvent.java     |   44 -
 .../javax/faces/event/PostKeepFlashValueEvent.java |   45 -
 .../javax/faces/event/PostPutFlashValueEvent.java  |   45 -
 .../javax/faces/event/PostRenderViewEvent.java     |   42 -
 .../javax/faces/event/PostRestoreStateEvent.java   |   49 -
 .../java/javax/faces/event/PostValidateEvent.java  |   44 -
 .../java/javax/faces/event/PreClearFlashEvent.java |   39 -
 .../faces/event/PreDestroyApplicationEvent.java    |   52 -
 .../faces/event/PreDestroyCustomScopeEvent.java    |   50 -
 .../javax/faces/event/PreDestroyViewMapEvent.java  |   44 -
 .../faces/event/PreRemoveFlashValueEvent.java      |   45 -
 .../javax/faces/event/PreRemoveFromViewEvent.java  |   53 -
 .../javax/faces/event/PreRenderComponentEvent.java |   44 -
 .../java/javax/faces/event/PreRenderViewEvent.java |   44 -
 .../java/javax/faces/event/PreValidateEvent.java   |   44 -
 .../main/java/javax/faces/event/ScopeContext.java  |   56 -
 .../main/java/javax/faces/event/SystemEvent.java   |   63 -
 .../javax/faces/event/SystemEventListener.java     |   29 -
 .../faces/event/SystemEventListenerHolder.java     |   29 -
 .../java/javax/faces/event/ValueChangeEvent.java   |   79 -
 .../javax/faces/event/ValueChangeListener.java     |   27 -
 .../java/javax/faces/event/ViewMapListener.java    |   26 -
 .../java/javax/faces/event/WebsocketEvent.java     |  121 -
 api/src/main/java/javax/faces/flow/Flow.java       |   63 -
 .../main/java/javax/faces/flow/FlowCallNode.java   |   35 -
 .../main/java/javax/faces/flow/FlowHandler.java    |   62 -
 .../java/javax/faces/flow/FlowHandlerFactory.java  |   30 -
 .../faces/flow/FlowHandlerFactoryWrapper.java      |   51 -
 api/src/main/java/javax/faces/flow/FlowNode.java   |   28 -
 api/src/main/java/javax/faces/flow/FlowScoped.java |   43 -
 .../main/java/javax/faces/flow/MethodCallNode.java |   34 -
 api/src/main/java/javax/faces/flow/Parameter.java  |   31 -
 api/src/main/java/javax/faces/flow/ReturnNode.java |   31 -
 api/src/main/java/javax/faces/flow/SwitchCase.java |   32 -
 api/src/main/java/javax/faces/flow/SwitchNode.java |   34 -
 api/src/main/java/javax/faces/flow/ViewNode.java   |   28 -
 .../java/javax/faces/flow/builder/FlowBuilder.java |   61 -
 .../faces/flow/builder/FlowBuilderParameter.java   |   39 -
 .../javax/faces/flow/builder/FlowCallBuilder.java  |   38 -
 .../javax/faces/flow/builder/FlowDefinition.java   |   37 -
 .../faces/flow/builder/MethodCallBuilder.java      |   45 -
 .../faces/flow/builder/NavigationCaseBuilder.java  |   52 -
 .../java/javax/faces/flow/builder/NodeBuilder.java |   28 -
 .../javax/faces/flow/builder/ReturnBuilder.java    |   33 -
 .../javax/faces/flow/builder/SwitchBuilder.java    |   34 -
 .../faces/flow/builder/SwitchCaseBuilder.java      |   34 -
 .../java/javax/faces/flow/builder/ViewBuilder.java |   28 -
 .../java/javax/faces/lifecycle/ClientWindow.java   |   58 -
 .../javax/faces/lifecycle/ClientWindowFactory.java |   48 -
 .../javax/faces/lifecycle/ClientWindowWrapper.java |   79 -
 .../main/java/javax/faces/lifecycle/Lifecycle.java |   50 -
 .../javax/faces/lifecycle/LifecycleFactory.java    |   66 -
 .../javax/faces/lifecycle/LifecycleWrapper.java    |   75 -
 .../java/javax/faces/model/ArrayDataModel.java     |  125 -
 .../javax/faces/model/CollectionDataModel.java     |  128 -
 api/src/main/java/javax/faces/model/DataModel.java |  214 --
 .../java/javax/faces/model/DataModelEvent.java     |   56 -
 .../java/javax/faces/model/DataModelListener.java  |   27 -
 .../java/javax/faces/model/FacesDataModel.java     |   39 -
 .../java/javax/faces/model/IterableDataModel.java  |  181 --
 .../main/java/javax/faces/model/ListDataModel.java |  128 -
 .../java/javax/faces/model/ResultDataModel.java    |  140 -
 .../java/javax/faces/model/ResultSetDataModel.java |  772 ------
 .../java/javax/faces/model/ScalarDataModel.java    |  117 -
 .../main/java/javax/faces/model/SelectItem.java    |  167 --
 .../java/javax/faces/model/SelectItemGroup.java    |   70 -
 api/src/main/java/javax/faces/push/Push.java       |   37 -
 .../main/java/javax/faces/push/PushContext.java    |   45 -
 .../javax/faces/render/ClientBehaviorRenderer.java |   54 -
 .../javax/faces/render/FacesBehaviorRenderer.java  |   47 -
 .../java/javax/faces/render/FacesRenderer.java     |   51 -
 .../main/java/javax/faces/render/RenderKit.java    |  132 -
 .../java/javax/faces/render/RenderKitFactory.java  |   67 -
 .../java/javax/faces/render/RenderKitWrapper.java  |  126 -
 api/src/main/java/javax/faces/render/Renderer.java |  158 --
 .../java/javax/faces/render/RendererWrapper.java   |   85 -
 .../javax/faces/render/ResponseStateManager.java   |  151 --
 .../java/javax/faces/validator/BeanValidator.java  |  685 -----
 .../faces/validator/DoubleRangeValidator.java      |  294 ---
 .../java/javax/faces/validator/FacesValidator.java |   52 -
 .../javax/faces/validator/LengthValidator.java     |  263 --
 .../javax/faces/validator/LongRangeValidator.java  |  290 ---
 .../faces/validator/MethodExpressionValidator.java |  131 -
 .../java/javax/faces/validator/RegexValidator.java |  263 --
 .../javax/faces/validator/RequiredValidator.java   |  103 -
 .../main/java/javax/faces/validator/Validator.java |   36 -
 .../javax/faces/validator/ValidatorException.java  |  120 -
 .../faces/validator/_ExternalSpecifications.java   |   84 -
 .../faces/validator/_LabeledFacesMessage.java      |   72 -
 .../java/javax/faces/validator/_MessageUtils.java  |  234 --
 .../validator/_ParametrizableFacesMessage.java     |  156 --
 .../javax/faces/validator/_ValidationUtils.java    |   35 -
 .../view/ActionSource2AttachedObjectHandler.java   |   31 -
 .../view/ActionSource2AttachedObjectTarget.java    |   30 -
 .../javax/faces/view/AttachedObjectHandler.java    |   53 -
 .../javax/faces/view/AttachedObjectTarget.java     |   39 -
 .../view/BehaviorHolderAttachedObjectHandler.java  |   27 -
 .../view/BehaviorHolderAttachedObjectTarget.java   |   27 -
 .../EditableValueHolderAttachedObjectHandler.java  |   33 -
 .../EditableValueHolderAttachedObjectTarget.java   |   30 -
 api/src/main/java/javax/faces/view/Location.java   |   58 -
 .../javax/faces/view/StateManagementStrategy.java  |   32 -
 .../view/ValueHolderAttachedObjectHandler.java     |   31 -
 .../view/ValueHolderAttachedObjectTarget.java      |   30 -
 .../javax/faces/view/ViewDeclarationLanguage.java  |  177 --
 .../faces/view/ViewDeclarationLanguageFactory.java |   65 -
 .../faces/view/ViewDeclarationLanguageWrapper.java |  140 -
 .../main/java/javax/faces/view/ViewMetadata.java   |  204 --
 api/src/main/java/javax/faces/view/ViewScoped.java |   42 -
 .../faces/view/facelets/AttributeHandler.java      |   27 -
 .../javax/faces/view/facelets/BehaviorConfig.java  |   27 -
 .../javax/faces/view/facelets/BehaviorHandler.java |   81 -
 .../javax/faces/view/facelets/ComponentConfig.java |   29 -
 .../faces/view/facelets/ComponentHandler.java      |  129 -
 .../view/facelets/CompositeFaceletHandler.java     |   54 -
 .../javax/faces/view/facelets/ConverterConfig.java |   27 -
 .../faces/view/facelets/ConverterHandler.java      |   64 -
 .../view/facelets/DelegatingMetaTagHandler.java    |  105 -
 .../java/javax/faces/view/facelets/Facelet.java    |   46 -
 .../javax/faces/view/facelets/FaceletCache.java    |   82 -
 .../faces/view/facelets/FaceletCacheFactory.java   |   47 -
 .../javax/faces/view/facelets/FaceletContext.java  |  119 -
 .../faces/view/facelets/FaceletException.java      |   47 -
 .../javax/faces/view/facelets/FaceletHandler.java  |   43 -
 .../facelets/FaceletsAttachedObjectHandler.java    |   72 -
 .../view/facelets/FaceletsResourceResolver.java    |   33 -
 .../javax/faces/view/facelets/FacetHandler.java    |   27 -
 .../java/javax/faces/view/facelets/MetaRule.java   |   33 -
 .../javax/faces/view/facelets/MetaRuleset.java     |   61 -
 .../javax/faces/view/facelets/MetaTagHandler.java  |   66 -
 .../java/javax/faces/view/facelets/Metadata.java   |   31 -
 .../javax/faces/view/facelets/MetadataTarget.java  |   63 -
 .../faces/view/facelets/ResourceResolver.java      |   36 -
 .../main/java/javax/faces/view/facelets/Tag.java   |  111 -
 .../javax/faces/view/facelets/TagAttribute.java    |  181 --
 .../faces/view/facelets/TagAttributeException.java |   89 -
 .../javax/faces/view/facelets/TagAttributes.java   |   94 -
 .../java/javax/faces/view/facelets/TagConfig.java  |   31 -
 .../javax/faces/view/facelets/TagDecorator.java    |   29 -
 .../javax/faces/view/facelets/TagException.java    |   64 -
 .../java/javax/faces/view/facelets/TagHandler.java |   79 -
 .../faces/view/facelets/TagHandlerDelegate.java    |   33 -
 .../view/facelets/TagHandlerDelegateFactory.java   |   56 -
 .../javax/faces/view/facelets/TextHandler.java     |   29 -
 .../javax/faces/view/facelets/ValidatorConfig.java |   27 -
 .../faces/view/facelets/ValidatorHandler.java      |   65 -
 .../main/java/javax/faces/webapp/AttributeTag.java |  131 -
 .../java/javax/faces/webapp/ConverterELTag.java    |   66 -
 .../main/java/javax/faces/webapp/ConverterTag.java |  130 -
 .../main/java/javax/faces/webapp/FacesServlet.java |  256 --
 api/src/main/java/javax/faces/webapp/FacetTag.java |   67 -
 .../webapp/PreJsf2ExceptionHandlerFactory.java     |  292 ---
 .../javax/faces/webapp/UIComponentBodyTag.java     |   29 -
 .../faces/webapp/UIComponentClassicTagBase.java    | 1366 ----------
 .../java/javax/faces/webapp/UIComponentELTag.java  |  134 -
 .../java/javax/faces/webapp/UIComponentTag.java    |  362 ---
 .../javax/faces/webapp/UIComponentTagBase.java     |  108 -
 .../java/javax/faces/webapp/ValidatorELTag.java    |   63 -
 .../main/java/javax/faces/webapp/ValidatorTag.java |  130 -
 .../javax/faces/webapp/_PageContextOutWriter.java  |   79 -
 .../META-INF/resources/myfaces/_impl/_util/_Dom.js |    2 +-
 .../META-INF/resources/myfaces/_impl/core/Impl.js  |   26 +-
 .../myfaces/_impl/xhrCore/_AjaxRequest.js          |    8 +-
 .../myfaces/_impl/xhrCore/_AjaxResponse.js         |   16 +-
 .../myfaces/_impl/xhrCore/_ExtAjaxRequest.js       |    2 +-
 .../myfaces/_impl/xhrCore/_IFrameRequest.js        |    6 +-
 .../META-INF/resources/myfaces/api/jsf.js          |    4 +-
 .../main/resources/META-INF/componentClass20.vm    |   18 +-
 .../resources/jakarta/faces/Messages.properties    |  131 +
 .../resources/jakarta/faces/Messages_ar.properties |  145 ++
 .../resources/jakarta/faces/Messages_ca.properties |  134 +
 .../resources/jakarta/faces/Messages_cs.properties |  129 +
 .../resources/jakarta/faces/Messages_de.properties |  130 +
 .../resources/jakarta/faces/Messages_en.properties |  131 +
 .../resources/jakarta/faces/Messages_es.properties |  138 +
 .../resources/jakarta/faces/Messages_fr.properties |  134 +
 .../resources/jakarta/faces/Messages_it.properties |  137 +
 .../resources/jakarta/faces/Messages_ja.properties |  128 +
 .../resources/jakarta/faces/Messages_mt.properties |  125 +
 .../resources/jakarta/faces/Messages_nl.properties |  118 +
 .../resources/jakarta/faces/Messages_pl.properties |  116 +
 .../jakarta/faces/Messages_pt_BR.properties        |  133 +
 .../resources/jakarta/faces/Messages_ru.properties |  116 +
 .../resources/jakarta/faces/Messages_sk.properties |  129 +
 .../jakarta/faces/Messages_zh_CN.properties        |  131 +
 .../jakarta/faces/Messages_zh_HK.properties        |  131 +
 .../jakarta/faces/Messages_zh_TW.properties        |  131 +
 .../main/resources/javax/faces/Messages.properties |  131 -
 .../resources/javax/faces/Messages_ar.properties   |  145 --
 .../resources/javax/faces/Messages_ca.properties   |  134 -
 .../resources/javax/faces/Messages_cs.properties   |  129 -
 .../resources/javax/faces/Messages_de.properties   |  130 -
 .../resources/javax/faces/Messages_en.properties   |  131 -
 .../resources/javax/faces/Messages_es.properties   |  138 -
 .../resources/javax/faces/Messages_fr.properties   |  134 -
 .../resources/javax/faces/Messages_it.properties   |  137 -
 .../resources/javax/faces/Messages_ja.properties   |  128 -
 .../resources/javax/faces/Messages_mt.properties   |  125 -
 .../resources/javax/faces/Messages_nl.properties   |  118 -
 .../resources/javax/faces/Messages_pl.properties   |  116 -
 .../javax/faces/Messages_pt_BR.properties          |  133 -
 .../resources/javax/faces/Messages_ru.properties   |  116 -
 .../resources/javax/faces/Messages_sk.properties   |  129 -
 .../javax/faces/Messages_zh_CN.properties          |  131 -
 .../javax/faces/Messages_zh_HK.properties          |  131 -
 .../javax/faces/Messages_zh_TW.properties          |  131 -
 .../test/java/javax/faces/FacesExceptionTest.java  |   99 -
 .../test/java/javax/faces/FactoryFinderTest.java   |  287 ---
 .../javax/faces/application/ApplicationTest.java   |  141 --
 .../javax/faces/application/FacesMessageTest.java  |  244 --
 .../javax/faces/application/MockApplication.java   |  236 --
 .../javax/faces/application/StateManagerTest.java  |  162 --
 .../javax/faces/application/ViewHandlerTest.java   |  233 --
 .../faces/component/AbstractComponentTest.java     |   50 -
 .../component/AbstractUIComponentBaseTest.java     |   82 -
 .../component/AbstractUIComponentPropertyTest.java |  130 -
 .../faces/component/InvokeOnComponentTest.java     |  283 ---
 .../faces/component/UIComponentAttributesTest.java |   67 -
 .../UIComponentBaseFacesListenerTest.java          |  117 -
 .../component/UIComponentBaseGetChildrenTest.java  |  191 --
 .../component/UIComponentBaseGetClientIdTest.java  |  178 --
 ...UIComponentBaseProcessSaveRestoreStateTest.java |  183 --
 .../javax/faces/component/UIComponentBaseTest.java |  427 ----
 .../component/UIComponentBaseValueBindingTest.java |  121 -
 .../faces/component/UIComponentEncodeAllTest.java  |  127 -
 .../UIComponentEventListenerWrapperTest.java       |  662 -----
 .../component/UIComponentFindComponentTest.java    |  202 --
 .../UIComponentInvokeOnComponentTest.java          |  155 --
 .../javax/faces/component/UIComponentMock.java     |   28 -
 .../javax/faces/component/UIComponentTest.java     |   90 -
 .../javax/faces/component/UIComponentTestBase.java |   46 -
 .../component/UIComponentValueExpressionTest.java  |  144 --
 .../javax/faces/component/UIDataRowStateTest.java  |  278 --
 .../java/javax/faces/component/UIDataTest.java     | 1148 ---------
 .../java/javax/faces/component/UIGraphicTest.java  |   67 -
 .../java/javax/faces/component/UIInputTest.java    |  496 ----
 .../javax/faces/component/UIOutputPSSTest.java     |  562 ----
 .../javax/faces/component/UISelectItemsTest.java   |   92 -
 .../javax/faces/component/UISelectManyTest.java    |  181 --
 .../javax/faces/component/UISelectOneTest.java     |  185 --
 .../javax/faces/component/UIViewParameterTest.java |   86 -
 .../java/javax/faces/component/UIViewRootTest.java |  637 -----
 .../component/_AttachedListStateWrapperTest.java   |   86 -
 .../faces/component/_AttachedStateWrapperTest.java |   98 -
 .../javax/faces/component/_ComponentUtilsTest.java |   49 -
 .../faces/component/_Delta2StateHelperTest.java    |  605 -----
 .../component/_DeltaFacesListenerListTest.java     |  520 ----
 .../java/javax/faces/component/_DeltaListTest.java |  774 ------
 .../faces/component/_DeltaStateHelperTest.java     |  304 ---
 .../_MethodBindingToMethodExpressionTest.java      |  209 --
 .../faces/component/_SelectItemsUtilTest.java      |  164 --
 .../faces/component/_SharedRendererUtilsTest.java  |  346 ---
 .../_ValueBindingToValueExpressionTest.java        |  274 --
 .../_ValueExpressionToValueBindingTest.java        |  297 ---
 .../faces/component/html/HtmlOutputLinkTest.java   |   37 -
 .../java/javax/faces/context/MockFacesContext.java |   39 -
 .../javax/faces/convert/DateTimeConverterTest.java |  111 -
 .../javax/faces/convert/DoubleConverterTest.java   |  157 --
 .../javax/faces/convert/EnumConverterTest.java     |  184 --
 .../java/javax/faces/convert/MessageUtilsTest.java |   73 -
 .../javax/faces/convert/NumberConverterTest.java   |  206 --
 .../event/MethodExpressionActionListenerTest.java  |  160 --
 .../MethodExpressionValueChangeListenerTest.java   |  160 --
 .../javax/faces/validator/_MessageUtilsTest.java   |   74 -
 .../myfaces/mock/MockRenderedValueExpression.java  |   69 -
 .../myfaces/mock/api/Mock2ApplicationFactory.java  |   54 -
 .../myfaces/mock/api/MockApplicationFactory.java   |   51 -
 .../org/apache/myfaces/ajax/AjaxTests.js           |   14 +-
 bundle/pom.xml                                     |    2 +-
 impl-test/pom.xml                                  |    5 +-
 .../core/AbstractMyFacesCDIRequestTestCase.java    |    4 +-
 .../test/core/AbstractMyFacesFaceletsTestCase.java |    8 +-
 .../test/core/AbstractMyFacesRequestTestCase.java  |    6 +-
 .../mc/test/core/AbstractMyFacesTestCase.java      |   50 +-
 .../test/core/annotation/DeclareFacesConfig.java   |    2 +-
 .../mock/MockDefaultViewDeclarationLanguage.java   |   28 +-
 ...MockDefaultViewDeclarationLanguageStrategy.java |    2 +-
 .../mc/test/core/mock/MockMyFacesClient.java       |   36 +-
 .../MockMyFacesFaceletViewDeclarationLanguage.java |   10 +-
 ...acesFaceletViewDeclarationLanguageStrategy.java |    8 +-
 .../MockMyFacesViewDeclarationLanguageFactory.java |    6 +-
 .../mc/test/core/mock/ServletMockContainer.java    |    2 +-
 .../runner/AbstractJsfRequestTestContainer.java    |    8 +-
 .../test/core/runner/AbstractJsfTestContainer.java |   53 +-
 .../mc/test/core/runner/MyFacesTestRunner.java     |    2 +-
 impl/pom.xml                                       |   17 +-
 .../conf/META-INF/standard-faces-config-base.xml   |   26 +-
 .../myfaces/application/ActionListenerImpl.java    |   28 +-
 .../application/ApplicationFactoryImpl.java        |   10 +-
 .../myfaces/application/ApplicationImpl.java       |  127 +-
 ...ackwardsCompatibleNavigationHandlerWrapper.java |    8 +-
 .../DefaultNavigationHandlerSupport.java           |    2 +-
 .../application/DefaultResourceHandlerSupport.java |    8 +-
 .../myfaces/application/FlowNavigationCase.java    |    4 +-
 .../myfaces/application/NavigationHandlerImpl.java |   58 +-
 .../application/NavigationHandlerSupport.java      |    2 +-
 .../myfaces/application/ResourceHandlerImpl.java   |   20 +-
 .../org/apache/myfaces/application/StateCache.java |    4 +-
 .../myfaces/application/StateCacheFactory.java     |    4 +-
 .../myfaces/application/StateManagerImpl.java      |   24 +-
 .../myfaces/application/TreeStructureManager.java  |    6 +-
 .../myfaces/application/ViewHandlerImpl.java       |   32 +-
 .../myfaces/application/ViewResourceIterator.java  |    4 +-
 .../myfaces/application/_ApplicationUtils.java     |   21 +-
 .../application/_FlowNavigationStructure.java      |    2 +-
 .../viewstate/ClientSideStateCacheImpl.java        |    4 +-
 .../viewstate/CsrfSessionTokenFactory.java         |    2 +-
 .../myfaces/application/viewstate/KeyFactory.java  |    2 +-
 .../viewstate/RandomCsrfSessionTokenFactory.java   |    4 +-
 .../application/viewstate/RandomKeyFactory.java    |    4 +-
 .../viewstate/RandomSessionViewStorageFactory.java |    2 +-
 .../SecureRandomCsrfSessionTokenFactory.java       |    2 +-
 .../viewstate/SecureRandomKeyFactory.java          |    4 +-
 .../viewstate/SerializedViewCollection.java        |    2 +-
 .../viewstate/ServerSideStateCacheImpl.java        |   12 +-
 .../viewstate/SessionViewStorageFactory.java       |    2 +-
 .../viewstate/StateCacheFactoryImpl.java           |    2 +-
 .../application/viewstate/StateCacheUtils.java     |    4 +-
 .../token/ClientSideStateTokenProcessor.java       |    2 +-
 .../token/ServiceSideStateTokenProcessor.java      |    4 +-
 .../viewstate/token/StateTokenProcessor.java       |    2 +-
 .../myfaces/cdi/JsfArtifactFlowMapProducer.java    |    6 +-
 .../apache/myfaces/cdi/JsfArtifactProducer.java    |   32 +-
 .../myfaces/cdi/JsfArtifactProducerExtension.java  |    2 +-
 .../behavior/FacesBehaviorAnnotationLiteral.java   |    2 +-
 .../cdi/behavior/FacesBehaviorCDIWrapper.java      |   10 +-
 .../cdi/behavior/FacesBehaviorExtension.java       |    2 +-
 .../cdi/behavior/FacesBehaviorProducer.java        |    4 +-
 .../behavior/FacesClientBehaviorCDIWrapper.java    |   16 +-
 .../myfaces/cdi/config/FacesConfigBeanHolder.java  |    2 +-
 .../myfaces/cdi/config/FacesConfigExtension.java   |    2 +-
 .../converter/FacesConverterAnnotationLiteral.java |    2 +-
 .../cdi/converter/FacesConverterCDIWrapper.java    |   12 +-
 .../cdi/converter/FacesConverterExtension.java     |    2 +-
 .../cdi/converter/FacesConverterProducer.java      |    4 +-
 .../cdi/impl/CDIAnnotationInjectionProvider.java   |    2 +-
 .../cdi/impl/CDIManagedBeanHandlerImpl.java        |    4 +-
 .../managedproperty/ManagedPropertyExtension.java  |    2 +-
 .../managedproperty/ManagedPropertyProducer.java   |    6 +-
 .../apache/myfaces/cdi/model/DataModelBuilder.java |    4 +-
 .../myfaces/cdi/model/DataModelBuilderProxy.java   |    4 +-
 .../cdi/model/DynamicDataModelProducer.java        |    2 +-
 .../cdi/model/FacesDataModelAnnotationLiteral.java |    2 +-
 .../cdi/model/FacesDataModelClassBeanHolder.java   |    6 +-
 .../myfaces/cdi/model/FacesDataModelExtension.java |    4 +-
 .../myfaces/cdi/scope/FacesScopeBeanHolder.java    |    2 +-
 .../myfaces/cdi/scope/FacesScopeProvider.java      |    2 +-
 .../myfaces/cdi/scope/FacesScopedContextImpl.java  |    2 +-
 .../cdi/scope/ViewTransientScopeBeanHolder.java    |    2 +-
 .../cdi/scope/ViewTransientScopedContextImpl.java  |    2 +-
 .../java/org/apache/myfaces/cdi/util/CDIUtils.java |    4 +-
 .../validator/FacesValidatorAnnotationLiteral.java |    2 +-
 .../cdi/validator/FacesValidatorCDIWrapper.java    |   12 +-
 .../cdi/validator/FacesValidatorExtension.java     |    2 +-
 .../cdi/validator/FacesValidatorProducer.java      |    4 +-
 .../myfaces/cdi/view/ViewScopeBeanHolder.java      |    6 +-
 .../apache/myfaces/cdi/view/ViewScopeCDIMap.java   |    2 +-
 .../cdi/view/ViewScopeContextExtension.java        |    2 +-
 .../myfaces/cdi/view/ViewScopeContextImpl.java     |    6 +-
 .../cdi/view/ViewScopeContextualStorage.java       |    2 +-
 .../component/ComponentResourceContainer.java      |    8 +-
 .../component/search/AllSearchKeywordResolver.java |   10 +-
 .../search/ChildSearchKeywordResolver.java         |   12 +-
 ...positeComponentParentSearchKeywordResolver.java |    8 +-
 .../search/CompositeSearchKeywordResolver.java     |    8 +-
 .../search/FormSearchKeywordResolver.java          |   12 +-
 .../component/search/IdSearchKeywordResolver.java  |   22 +-
 .../NamingContainerSearchKeywordResolver.java      |   10 +-
 .../search/NextSearchKeywordResolver.java          |   10 +-
 .../search/NoneSearchKeywordResolver.java          |   10 +-
 .../search/ParentSearchKeywordResolver.java        |    8 +-
 .../search/PreviousSearchKeywordResolver.java      |   10 +-
 .../search/RootSearchKeywordResolver.java          |    8 +-
 .../component/search/SearchComponentUtils.java     |    2 +-
 .../search/SearchExpressionContextFactoryImpl.java |   12 +-
 .../search/SearchExpressionContextImpl.java        |   10 +-
 .../search/SearchExpressionHandlerImpl.java        |   22 +-
 .../search/ThisSearchKeywordResolver.java          |    8 +-
 .../validate/ValidateWholeBeanComponent.java       |   12 +-
 .../component/validate/WholeBeanValidator.java     |   28 +-
 .../validate/_ValueReferenceResolver.java          |    2 +-
 .../myfaces/component/visit/FullVisitContext.java  |   14 +-
 .../component/visit/PartialVisitContext.java       |   14 +-
 .../component/visit/VisitContextFactoryImpl.java   |    8 +-
 .../config/ConfigFilesXmlValidationUtils.java      |    2 +-
 .../config/DefaultFacesConfigResourceProvider.java |    2 +-
 .../config/DefaultFacesConfigurationMerger.java    |    6 +-
 .../config/DefaultFacesConfigurationProvider.java  |   12 +-
 .../myfaces/config/FacesConfigValidator.java       |    2 +-
 .../apache/myfaces/config/FacesConfigurator.java   |   76 +-
 .../org/apache/myfaces/config/LogMetaInfUtils.java |    2 +-
 .../apache/myfaces/config/ManagedBeanBuilder.java  |   10 +-
 .../myfaces/config/ManagedBeanDestroyer.java       |   12 +-
 .../apache/myfaces/config/NamedEventManager.java   |   14 +-
 .../org/apache/myfaces/config/RuntimeConfig.java   |    8 +-
 .../config/annotation/AnnotationConfigurator.java  |   72 +-
 .../annotation/CdiAnnotationProviderExtension.java |   16 +-
 .../annotation/DefaultAnnotationProvider.java      |   22 +-
 .../DefaultLifecycleProviderFactory.java           |    4 +-
 .../annotation/LifecycleProviderFactory.java       |    6 +-
 .../Tomcat7AnnotationLifecycleProvider.java        |    6 +-
 .../myfaces/config/element/FacesConfigData.java    |    3 +-
 .../apache/myfaces/config/element/ManagedBean.java |    2 +-
 .../myfaces/config/element/ManagedProperty.java    |    4 +-
 .../config/impl/FacesConfigEntityResolver.java     |    2 +-
 .../digester/DigesterFacesConfigDispenserImpl.java |    4 +-
 .../DigesterFacesConfigUnmarshallerImpl.java       |    2 +-
 .../impl/digester/elements/ManagedBeanImpl.java    |    2 +-
 .../digester/elements/ManagedPropertyImpl.java     |    4 +-
 .../org/apache/myfaces/config/util/GAEUtils.java   |    2 +-
 .../context/ExceptionHandlerFactoryImpl.java       |    4 +-
 .../context/ExternalContextFactoryImpl.java        |   10 +-
 .../myfaces/context/FacesContextFactoryImpl.java   |   26 +-
 .../myfaces/context/FacesContextWrapper.java       |   24 +-
 .../MyFacesExceptionHandlerWrapperImpl.java        |   22 +-
 .../myfaces/context/PartialResponseWriterImpl.java |    6 +-
 .../context/PartialViewContextFactoryImpl.java     |   10 +-
 .../apache/myfaces/context/RequestViewContext.java |   18 +-
 .../myfaces/context/RequestViewMetadata.java       |    4 +-
 .../myfaces/context/servlet/FacesContextImpl.java  |   26 +-
 .../context/servlet/FacesContextImplBase.java      |   24 +-
 .../context/servlet/PartialViewContextImpl.java    |   54 +-
 .../servlet/ServletExternalContextImpl.java        |   18 +-
 .../servlet/ServletExternalContextImplBase.java    |    4 +-
 .../context/servlet/ServletFlashFactoryImpl.java   |    6 +-
 .../context/servlet/StartupFacesContextImpl.java   |   14 +-
 .../servlet/StartupServletExternalContextImpl.java |    2 +-
 .../myfaces/ee/MyFacesContainerInitializer.java    |   60 +-
 .../apache/myfaces/el/DefaultPropertyResolver.java |    8 +-
 .../org/apache/myfaces/el/FlashELResolver.java     |    6 +-
 .../apache/myfaces/el/NullPropertyResolver.java    |    8 +-
 .../apache/myfaces/el/NullVariableResolver.java    |    6 +-
 .../apache/myfaces/el/PropertyResolverImpl.java    |    8 +-
 .../myfaces/el/ResolverForJSPInitializer.java      |   12 +-
 .../apache/myfaces/el/VariableResolverImpl.java    |    8 +-
 ...ableResolverToApplicationELResolverAdapter.java |    6 +-
 .../el/convert/ELResolverToPropertyResolver.java   |   24 +-
 .../el/convert/ELResolverToVariableResolver.java   |    6 +-
 .../convert/MethodExpressionToMethodBinding.java   |   18 +-
 .../el/convert/PropertyResolverToELResolver.java   |   18 +-
 .../el/convert/ValueBindingToValueExpression.java  |   12 +-
 .../el/convert/ValueExpressionToValueBinding.java  |   21 +-
 .../el/convert/VariableResolverToELResolver.java   |    8 +-
 .../unified/CustomFirstELResolverComparator.java   |    4 +-
 .../myfaces/el/unified/ELResolverBuilder.java      |    4 +-
 .../apache/myfaces/el/unified/FacesELContext.java  |    2 +-
 .../myfaces/el/unified/ResolverBuilderBase.java    |   10 +-
 .../el/unified/ResolverBuilderForFaces.java        |    2 +-
 .../myfaces/el/unified/ResolverBuilderForJSP.java  |    2 +-
 .../resolver/CompositeComponentELResolver.java     |    6 +-
 .../unified/resolver/FacesCompositeELResolver.java |    4 +-
 .../myfaces/el/unified/resolver/GuiceResolver.java |    6 +-
 .../resolver/ImportConstantsELResolver.java        |    8 +-
 .../el/unified/resolver/ManagedBeanResolver.java   |   10 +-
 .../unified/resolver/ResourceBundleResolver.java   |    4 +-
 .../el/unified/resolver/ResourceResolver.java      |   10 +-
 .../unified/resolver/ScopedAttributeResolver.java  |    6 +-
 .../implicitobject/ComponentImplicitObject.java    |    2 +-
 .../CompositeComponentImplicitObject.java          |    4 +-
 .../implicitobject/FacesContextImplicitObject.java |    2 +-
 .../implicitobject/FlowScopeImplicitObject.java    |    2 +-
 .../resolver/implicitobject/ImplicitObject.java    |    4 +-
 .../implicitobject/ViewImplicitObject.java         |    2 +-
 .../PostClientWindowAndViewInitializedEvent.java   |    2 +-
 .../myfaces/event/SetPropertyActionListener.java   |   10 +-
 .../org/apache/myfaces/flow/FlowCallNodeImpl.java  |    6 +-
 .../myfaces/flow/FlowHandlerFactoryImpl.java       |    6 +-
 .../org/apache/myfaces/flow/FlowHandlerImpl.java   |   30 +-
 .../java/org/apache/myfaces/flow/FlowImpl.java     |   22 +-
 .../java/org/apache/myfaces/flow/FlowNodeImpl.java |    2 +-
 .../apache/myfaces/flow/MethodCallNodeImpl.java    |    4 +-
 .../apache/myfaces/flow/NavigationCaseImpl.java    |    4 +-
 .../org/apache/myfaces/flow/ParameterImpl.java     |    2 +-
 .../org/apache/myfaces/flow/ReturnNodeImpl.java    |    4 +-
 .../org/apache/myfaces/flow/SwitchCaseImpl.java    |    4 +-
 .../org/apache/myfaces/flow/SwitchNodeImpl.java    |    6 +-
 .../java/org/apache/myfaces/flow/ViewNodeImpl.java |    2 +-
 .../myfaces/flow/builder/FlowBuilderImpl.java      |   18 +-
 .../myfaces/flow/builder/FlowCallBuilderImpl.java  |    2 +-
 .../flow/builder/MethodCallBuilderImpl.java        |    4 +-
 .../flow/builder/NavigationCaseBuilderImpl.java    |    2 +-
 .../myfaces/flow/builder/ReturnBuilderImpl.java    |    2 +-
 .../myfaces/flow/builder/SwitchBuilderImpl.java    |    4 +-
 .../flow/builder/SwitchCaseBuilderImpl.java        |    2 +-
 .../myfaces/flow/builder/ViewBuilderImpl.java      |    2 +-
 .../flow/cdi/DefaultCDIFacesFlowProvider.java      |    4 +-
 .../myfaces/flow/cdi/FlowBuilderCDIExtension.java  |    4 +-
 .../myfaces/flow/cdi/FlowBuilderFactoryBean.java   |    8 +-
 .../myfaces/flow/cdi/FlowScopeBeanHolder.java      |   12 +-
 .../myfaces/flow/cdi/FlowScopeCDIExtension.java    |    2 +-
 .../myfaces/flow/cdi/FlowScopedContextImpl.java    |    8 +-
 .../flow/impl/AnnotatedFlowConfigurator.java       |    4 +-
 .../flow/impl/DefaultFacesFlowProvider.java        |    6 +-
 .../org/apache/myfaces/flow/impl/FlowScopeMap.java |    2 +-
 .../org/apache/myfaces/flow/util/FlowUtils.java    |    4 +-
 .../lifecycle/ApplyRequestValuesExecutor.java      |    4 +-
 .../myfaces/lifecycle/CODIClientSideWindow.java    |   12 +-
 .../org/apache/myfaces/lifecycle/ClientConfig.java |    6 +-
 .../myfaces/lifecycle/ClientWindowFactoryImpl.java |    6 +-
 .../lifecycle/DefaultRestoreViewSupport.java       |   32 +-
 .../lifecycle/InvokeApplicationExecutor.java       |    4 +-
 .../myfaces/lifecycle/LifecycleFactoryImpl.java    |    6 +-
 .../apache/myfaces/lifecycle/LifecycleImpl.java    |   24 +-
 .../apache/myfaces/lifecycle/PhaseExecutor.java    |    4 +-
 .../myfaces/lifecycle/PhaseListenerManager.java    |   14 +-
 .../lifecycle/ProcessValidationsExecutor.java      |    4 +-
 .../myfaces/lifecycle/RenderResponseExecutor.java  |   22 +-
 .../myfaces/lifecycle/RestoreViewExecutor.java     |   46 +-
 .../myfaces/lifecycle/RestoreViewSupport.java      |   10 +-
 .../lifecycle/UpdateModelValuesExecutor.java       |    4 +-
 .../apache/myfaces/lifecycle/UrlClientWindow.java  |    6 +-
 .../myfaces/lifecycle/ViewNotFoundException.java   |    2 +-
 .../myfaces/push/AbstractWebsocketComponent.java   |    6 +-
 .../java/org/apache/myfaces/push/EndpointImpl.java |    8 +-
 .../push/HtmlBufferResponseWriterWrapper.java      |    2 +-
 .../myfaces/push/WebsocketComponentRenderer.java   |   28 +-
 .../apache/myfaces/push/WebsocketConfigurator.java |    2 +-
 .../apache/myfaces/push/WebsocketFacesInit.java    |    2 +-
 .../apache/myfaces/push/WebsocketInitRenderer.java |   10 +-
 .../org/apache/myfaces/push/_WebsocketInit.java    |    4 +-
 .../myfaces/push/cdi/CsrfSessionTokenFactory.java  |    2 +-
 .../myfaces/push/cdi/PushContextCDIExtension.java  |    4 +-
 .../myfaces/push/cdi/PushContextFactoryBean.java   |    4 +-
 .../apache/myfaces/push/cdi/PushContextImpl.java   |    6 +-
 .../push/cdi/RandomCsrfSessionTokenFactory.java    |    4 +-
 .../cdi/SecureRandomCsrfSessionTokenFactory.java   |    2 +-
 .../cdi/WebsocketApplicationSessionHolder.java     |    4 +-
 .../push/cdi/WebsocketChannelTokenBuilderBean.java |    2 +-
 .../apache/myfaces/push/cdi/WebsocketViewBean.java |    2 +-
 .../apache/myfaces/renderkit/ErrorPageWriter.java  |   42 +-
 .../renderkit/MyfacesResponseStateManager.java     |    4 +-
 .../myfaces/renderkit/RenderKitFactoryImpl.java    |    8 +-
 .../html/EarlyFlushHtmlResponseWriterImpl.java     |    8 +-
 .../renderkit/html/HtmlAjaxBehaviorRenderer.java   |   32 +-
 .../myfaces/renderkit/html/HtmlBodyRenderer.java   |    4 +-
 .../myfaces/renderkit/html/HtmlButtonRenderer.java |    6 +-
 .../renderkit/html/HtmlCheckboxRenderer.java       |   10 +-
 .../renderkit/html/HtmlCommandScriptRenderer.java  |   30 +-
 .../html/HtmlCompositeComponentRenderer.java       |    6 +-
 .../renderkit/html/HtmlCompositeFacetRenderer.java |    6 +-
 .../renderkit/html/HtmlDoctypeRenderer.java        |   10 +-
 .../myfaces/renderkit/html/HtmlFormRenderer.java   |    8 +-
 .../myfaces/renderkit/html/HtmlFormatRenderer.java |   16 +-
 .../myfaces/renderkit/html/HtmlGridRenderer.java   |    6 +-
 .../myfaces/renderkit/html/HtmlGroupRenderer.java  |    6 +-
 .../myfaces/renderkit/html/HtmlHeadRenderer.java   |   14 +-
 .../myfaces/renderkit/html/HtmlHiddenRenderer.java |   14 +-
 .../myfaces/renderkit/html/HtmlImageRenderer.java  |    6 +-
 .../renderkit/html/HtmlInputFileRenderer.java      |    6 +-
 .../myfaces/renderkit/html/HtmlLabelRenderer.java  |   20 +-
 .../myfaces/renderkit/html/HtmlLinkRenderer.java   |   14 +-
 .../renderkit/html/HtmlListboxRenderer.java        |   10 +-
 .../myfaces/renderkit/html/HtmlMenuRenderer.java   |   10 +-
 .../renderkit/html/HtmlMessageRenderer.java        |   12 +-
 .../renderkit/html/HtmlMessagesRenderer.java       |   12 +-
 .../html/HtmlOutcomeTargetButtonRenderer.java      |    6 +-
 .../myfaces/renderkit/html/HtmlRadioRenderer.java  |    6 +-
 .../myfaces/renderkit/html/HtmlRenderKitImpl.java  |   18 +-
 .../renderkit/html/HtmlResponseStateManager.java   |   24 +-
 .../myfaces/renderkit/html/HtmlScriptRenderer.java |   30 +-
 .../myfaces/renderkit/html/HtmlSecretRenderer.java |    6 +-
 .../renderkit/html/HtmlStylesheetRenderer.java     |   26 +-
 .../myfaces/renderkit/html/HtmlTableRenderer.java  |    6 +-
 .../myfaces/renderkit/html/HtmlTextRenderer.java   |   10 +-
 .../renderkit/html/HtmlTextareaRenderer.java       |    6 +-
 .../ClassLoaderContractResourceLoader.java         |    4 +-
 .../DefaultResourceLibraryContractsProvider.java   |   10 +-
 .../ExternalContextContractResourceLoader.java     |    4 +-
 .../InternalClassLoaderResourceLoader.java         |    8 +-
 .../RootExternalContextResourceLoader.java         |    6 +-
 .../TempDirFileCacheContractResourceLoader.java    |    6 +-
 .../resource/TempDirFileCacheResourceLoader.java   |    6 +-
 .../myfaces/shared_impl/webapp/webxml/WebXml.java  |    4 +-
 .../shared_impl/webapp/webxml/WebXmlParser.java    |    4 +-
 .../org/apache/myfaces/spi/AnnotationProvider.java |   20 +-
 .../myfaces/spi/AnnotationProviderFactory.java     |    4 +-
 .../myfaces/spi/AnnotationProviderWrapper.java     |    4 +-
 .../myfaces/spi/FaceletConfigResourceProvider.java |    2 +-
 .../spi/FaceletConfigResourceProviderFactory.java  |    4 +-
 .../myfaces/spi/FacesConfigResourceProvider.java   |    2 +-
 .../spi/FacesConfigResourceProviderFactory.java    |    4 +-
 .../myfaces/spi/FacesConfigurationMerger.java      |    2 +-
 .../spi/FacesConfigurationMergerFactory.java       |    4 +-
 .../myfaces/spi/FacesConfigurationProvider.java    |    4 +-
 .../spi/FacesConfigurationProviderFactory.java     |    4 +-
 .../spi/FacesConfigurationProviderWrapper.java     |    4 +-
 .../org/apache/myfaces/spi/FacesFlowProvider.java  |    4 +-
 .../myfaces/spi/FacesFlowProviderFactory.java      |    4 +-
 .../apache/myfaces/spi/FactoryFinderProvider.java  |   10 +-
 .../myfaces/spi/FactoryFinderProviderFactory.java  |   12 +-
 .../myfaces/spi/InjectionProviderFactory.java      |    6 +-
 .../spi/ResourceLibraryContractsProvider.java      |    2 +-
 .../ResourceLibraryContractsProviderFactory.java   |    4 +-
 .../apache/myfaces/spi/ServiceProviderFinder.java  |    4 +-
 .../myfaces/spi/ServiceProviderFinderFactory.java  |    4 +-
 .../org/apache/myfaces/spi/StateCacheProvider.java |    4 +-
 .../myfaces/spi/StateCacheProviderFactory.java     |    6 +-
 .../myfaces/spi/StateCacheProviderWrapper.java     |    4 +-
 .../org/apache/myfaces/spi/ViewScopeProvider.java  |    2 +-
 .../myfaces/spi/ViewScopeProviderFactory.java      |    6 +-
 .../org/apache/myfaces/spi/WebConfigProvider.java  |    4 +-
 .../myfaces/spi/WebConfigProviderFactory.java      |    4 +-
 .../CDIAnnotationDelegateInjectionProvider.java    |    2 +-
 .../spi/impl/DefaultAnnotationProviderFactory.java |    4 +-
 ...efaultFaceletConfigResourceProviderFactory.java |    4 +-
 .../DefaultFacesConfigResourceProviderFactory.java |    4 +-
 .../DefaultFacesConfigurationMergerFactory.java    |    4 +-
 .../DefaultFacesConfigurationProviderFactory.java  |    4 +-
 .../spi/impl/DefaultFacesFlowProviderFactory.java  |    2 +-
 .../spi/impl/DefaultInjectionProviderFactory.java  |    6 +-
 ...ultResourceLibraryContractsProviderFactory.java |    4 +-
 .../spi/impl/DefaultServiceProviderFinder.java     |    2 +-
 .../spi/impl/DefaultStateCacheProviderFactory.java |    4 +-
 .../spi/impl/DefaultViewScopeProviderFactory.java  |    2 +-
 .../myfaces/spi/impl/DefaultWebConfigProvider.java |    2 +-
 .../spi/impl/DefaultWebConfigProviderFactory.java  |    4 +-
 .../java/org/apache/myfaces/spi/impl/SpiUtils.java |    2 +-
 .../impl/Tomcat7AnnotationInjectionProvider.java   |    4 +-
 .../myfaces/taglib/core/ActionListenerTag.java     |    8 +-
 .../apache/myfaces/taglib/core/AttributeTag.java   |    8 +-
 .../myfaces/taglib/core/ConvertDateTimeTag.java    |    8 +-
 .../myfaces/taglib/core/ConvertNumberTag.java      |    6 +-
 .../myfaces/taglib/core/ConverterImplTag.java      |    8 +-
 .../apache/myfaces/taglib/core/ConverterTag.java   |    6 +-
 .../taglib/core/DelegateActionListener.java        |   12 +-
 .../myfaces/taglib/core/DelegateConverter.java     |   10 +-
 .../myfaces/taglib/core/DelegateValidator.java     |   14 +-
 .../taglib/core/DelegateValueChangeListener.java   |   12 +-
 .../myfaces/taglib/core/GenericListenerTag.java    |    8 +-
 .../taglib/core/GenericMinMaxValidatorTag.java     |    4 +-
 .../apache/myfaces/taglib/core/LoadBundleTag.java  |    4 +-
 .../org/apache/myfaces/taglib/core/ParamTag.java   |    4 +-
 .../myfaces/taglib/core/PhaseListenerTag.java      |   20 +-
 .../taglib/core/SetPropertyActionListenerTag.java  |    8 +-
 .../org/apache/myfaces/taglib/core/SubviewTag.java |   10 +-
 .../taglib/core/ValidateDoubleRangeTag.java        |    6 +-
 .../myfaces/taglib/core/ValidateLengthTag.java     |    6 +-
 .../myfaces/taglib/core/ValidateLongRangeTag.java  |    6 +-
 .../myfaces/taglib/core/ValidateRegexTag.java      |   12 +-
 .../myfaces/taglib/core/ValidateRequiredTag.java   |   12 +-
 .../myfaces/taglib/core/ValidatorImplTag.java      |   12 +-
 .../apache/myfaces/taglib/core/ValidatorTag.java   |    8 +-
 .../taglib/core/ValueChangeListenerTag.java        |    8 +-
 .../apache/myfaces/taglib/core/VerbatimTag.java    |    8 +-
 .../org/apache/myfaces/taglib/core/ViewTag.java    |   12 +-
 .../org/apache/myfaces/util/ContainerUtils.java    |    6 +-
 .../java/org/apache/myfaces/util/DebugUtils.java   |   30 +-
 .../myfaces/util/ExternalSpecifications.java       |    2 +-
 .../org/apache/myfaces/util/NavigationUtils.java   |   12 +-
 .../view/ViewDeclarationLanguageFactoryImpl.java   |   10 +-
 .../view/ViewDeclarationLanguageStrategy.java      |    2 +-
 .../org/apache/myfaces/view/ViewMetadataBase.java  |    4 +-
 .../org/apache/myfaces/view/ViewScopeProxyMap.java |    6 +-
 .../myfaces/view/facelets/AbstractFacelet.java     |   14 +-
 .../view/facelets/AbstractFaceletCache.java        |    4 +-
 .../view/facelets/AbstractFaceletContext.java      |   10 +-
 .../DefaultFaceletsStateManagementStrategy.java    |   54 +-
 ...DynamicComponentRefreshTransientBuildEvent.java |    4 +-
 .../view/facelets/FaceletCompositionContext.java   |   18 +-
 ...DynamicComponentRefreshTransientBuildEvent.java |    4 +-
 .../myfaces/view/facelets/FaceletFactory.java      |   10 +-
 .../facelets/FaceletViewDeclarationLanguage.java   |  108 +-
 .../FaceletViewDeclarationLanguageBase.java        |   10 +-
 .../FaceletViewDeclarationLanguageStrategy.java    |    8 +-
 .../PostBuildComponentTreeOnRestoreViewEvent.java  |    8 +-
 ...amicComponentRefreshTransientBuildCallback.java |    8 +-
 .../apache/myfaces/view/facelets/StateWriter.java  |    2 +-
 .../myfaces/view/facelets/TemplateClient.java      |    8 +-
 .../myfaces/view/facelets/TemplateContext.java     |   10 +-
 .../myfaces/view/facelets/ViewPoolProcessor.java   |   22 +-
 .../view/facelets/compiler/AbstractUIHandler.java  |    8 +-
 .../compiler/AddFacesMessageInstruction.java       |    4 +-
 .../facelets/compiler/AttributeInstruction.java    |    4 +-
 .../compiler/BodyEndElementInstruction.java        |    4 +-
 .../compiler/CheckDuplicateIdFaceletUtils.java     |   10 +-
 .../view/facelets/compiler/CommentInstruction.java |    2 +-
 .../view/facelets/compiler/CompilationManager.java |   14 +-
 .../view/facelets/compiler/CompilationUnit.java    |   14 +-
 .../myfaces/view/facelets/compiler/Compiler.java   |   10 +-
 .../facelets/compiler/CompositeComponentUnit.java  |    2 +-
 .../compiler/CompositeTextInstruction.java         |    2 +-
 .../DefaultFaceletConfigResourceProvider.java      |    2 +-
 .../view/facelets/compiler/DoctypeInstruction.java |    2 +-
 .../view/facelets/compiler/DoctypeUnit.java        |    4 +-
 .../facelets/compiler/DuplicateIdException.java    |    4 +-
 .../facelets/compiler/DynamicComponentFacelet.java |    6 +-
 .../view/facelets/compiler/EncodingHandler.java    |   10 +-
 .../facelets/compiler/EndElementInstruction.java   |    2 +-
 .../facelets/compiler/FaceletsCompilerSupport.java |   14 +-
 .../facelets/compiler/FaceletsCompilerUtils.java   |    2 +-
 .../view/facelets/compiler/Instruction.java        |    2 +-
 .../compiler/LiteralAttributeInstruction.java      |    2 +-
 .../compiler/LiteralCommentInstruction.java        |    2 +-
 .../compiler/LiteralNonExcapedTextInstruction.java |    2 +-
 .../facelets/compiler/LiteralTextInstruction.java  |    2 +-
 .../facelets/compiler/LiteralXMLInstruction.java   |    4 +-
 .../view/facelets/compiler/NamespaceHandler.java   |   12 +-
 .../view/facelets/compiler/NamespaceUnit.java      |    2 +-
 .../compiler/RefreshDynamicComponentListener.java  |   14 +-
 .../myfaces/view/facelets/compiler/RemoveUnit.java |    2 +-
 .../view/facelets/compiler/SAXCompiler.java        |   14 +-
 .../facelets/compiler/StartElementInstruction.java |    2 +-
 .../view/facelets/compiler/TagLibraryConfig.java   |   24 +-
 .../compiler/TagLibraryConfigUnmarshallerImpl.java |    2 +-
 .../myfaces/view/facelets/compiler/TagUnit.java    |    6 +-
 .../view/facelets/compiler/TextInstruction.java    |    4 +-
 .../myfaces/view/facelets/compiler/TextUnit.java   |   12 +-
 .../view/facelets/compiler/TrimmedTagUnit.java     |    2 +-
 .../facelets/compiler/UIInstructionHandler.java    |   10 +-
 .../view/facelets/compiler/UIInstructions.java     |    2 +-
 .../myfaces/view/facelets/compiler/UILeaf.java     |   34 +-
 .../view/facelets/compiler/XMLInstruction.java     |    4 +-
 .../view/facelets/compiler/_ComponentUtils.java    |   26 +-
 .../facelets/component/JsfElementRenderer.java     |   16 +-
 .../view/facelets/component/RepeatRenderer.java    |    8 +-
 .../myfaces/view/facelets/component/UIRepeat.java  |   48 +-
 .../facelets/component/_CommonEventConstants.java  |    2 +-
 .../component/_CommonPropertyConstants.java        |    2 +-
 .../view/facelets/component/_JsfElement.java       |    8 +-
 .../el/CacheableValueExpressionWrapper.java        |    2 +-
 .../facelets/el/CompositeComponentELUtils.java     |    6 +-
 .../myfaces/view/facelets/el/ContextAware.java     |    4 +-
 .../view/facelets/el/ContextAwareELException.java  |    5 +-
 .../view/facelets/el/ContextAwareException.java    |    4 +-
 .../facelets/el/ContextAwareExceptionWrapper.java  |    2 +-
 .../el/ContextAwareMethodNotFoundException.java    |    5 +-
 .../el/ContextAwarePropertyNotFoundException.java  |    4 +-
 .../ContextAwarePropertyNotWritableException.java  |    4 +-
 .../el/ContextAwareTagMethodExpression.java        |    6 +-
 .../el/ContextAwareTagValueExpression.java         |    6 +-
 .../view/facelets/el/ContextAwareUtils.java        |    2 +-
 .../el/DefaultContextAwareELException.java         |    2 +-
 .../apache/myfaces/view/facelets/el/ELText.java    |    6 +-
 .../facelets/el/FaceletStateValueExpression.java   |    6 +-
 .../view/facelets/el/LegacyMethodBinding.java      |   12 +-
 .../myfaces/view/facelets/el/LocationAware.java    |    6 +-
 .../view/facelets/el/LocationMethodExpression.java |    6 +-
 .../view/facelets/el/LocationValueExpression.java  |    6 +-
 ...hodExpressionValueExpressionActionListener.java |   10 +-
 ...ctMethodExpressionValueExpressionValidator.java |   10 +-
 ...pressionValueExpressionValueChangeListener.java |   10 +-
 .../el/ResourceLocationValueExpression.java        |    6 +-
 .../view/facelets/el/TagMethodExpression.java      |    4 +-
 .../view/facelets/el/TagValueExpression.java       |    4 +-
 .../el/ValueExpressionMethodExpression.java        |    4 +-
 .../view/facelets/el/VariableMapperWrapper.java    |    2 +-
 .../facelets/impl/CacheELFaceletCacheImpl.java     |    4 +-
 .../myfaces/view/facelets/impl/DefaultFacelet.java |   26 +-
 .../view/facelets/impl/DefaultFaceletContext.java  |   12 +-
 .../view/facelets/impl/DefaultFaceletFactory.java  |   28 +-
 .../facelets/impl/DefaultResourceResolver.java     |    6 +-
 .../facelets/impl/FaceletCacheFactoryImpl.java     |   12 +-
 .../view/facelets/impl/FaceletCacheImpl.java       |    4 +-
 .../impl/FaceletCompositionContextImpl.java        |   16 +-
 .../view/facelets/impl/TemplateContextImpl.java    |   10 +-
 .../myfaces/view/facelets/pool/ViewEntry.java      |    2 +-
 .../myfaces/view/facelets/pool/ViewPool.java       |    4 +-
 .../view/facelets/pool/ViewPoolFactory.java        |    6 +-
 .../view/facelets/pool/impl/SoftViewEntry.java     |    2 +-
 .../facelets/pool/impl/ViewPoolFactoryImpl.java    |    4 +-
 .../view/facelets/pool/impl/ViewPoolImpl.java      |    4 +-
 .../view/facelets/pool/impl/WeakViewEntry.java     |    2 +-
 .../view/facelets/tag/AbstractTagLibrary.java      |   58 +-
 .../facelets/tag/BaseMultipleTagDecorator.java     |    4 +-
 .../view/facelets/tag/BaseTagDecorator.java        |    4 +-
 .../view/facelets/tag/BeanPropertyTagRule.java     |   12 +-
 .../tag/ComponentTagDeclarationLibrary.java        |   19 +-
 .../view/facelets/tag/CompositeFaceletHandler.java |   12 +-
 .../view/facelets/tag/CompositeTagDecorator.java   |    6 +-
 .../view/facelets/tag/CompositeTagLibrary.java     |    6 +-
 .../view/facelets/tag/LegacyUserTagHandler.java    |   18 +-
 .../apache/myfaces/view/facelets/tag/MetaRule.java |    8 +-
 .../myfaces/view/facelets/tag/MetaRulesetImpl.java |   16 +-
 .../view/facelets/tag/MetaTagHandlerImpl.java      |    6 +-
 .../myfaces/view/facelets/tag/MetadataImpl.java    |    4 +-
 .../view/facelets/tag/MetadataTargetImpl.java      |    2 +-
 .../myfaces/view/facelets/tag/MethodRule.java      |   12 +-
 .../view/facelets/tag/TagAttributeImpl.java        |   10 +-
 .../view/facelets/tag/TagAttributesImpl.java       |    4 +-
 .../view/facelets/tag/TagHandlerFactory.java       |    6 +-
 .../myfaces/view/facelets/tag/TagHandlerUtils.java |   20 +-
 .../myfaces/view/facelets/tag/TagLibrary.java      |    6 +-
 .../myfaces/view/facelets/tag/UserTagHandler.java  |   20 +-
 .../ActionSource2AttachedObjectTargetImpl.java     |    2 +-
 .../tag/composite/ActionSourceHandler.java         |    6 +-
 .../tag/composite/AttachedObjectTargetHandler.java |   12 +-
 .../tag/composite/AttachedObjectTargetImpl.java    |    6 +-
 .../facelets/tag/composite/AttributeHandler.java   |   16 +-
 .../ClientBehaviorAttachedObjectTarget.java        |    2 +-
 .../ClientBehaviorAttachedObjectTargetImpl.java    |    8 +-
 .../tag/composite/ClientBehaviorHandler.java       |   12 +-
 ...directBehaviorAttachedObjectHandlerWrapper.java |    8 +-
 ...lientBehaviorRedirectEventComponentWrapper.java |   36 +-
 .../tag/composite/CompositeComponentBeanInfo.java  |    2 +-
 .../CompositeComponentDefinitionTagHandler.java    |    6 +-
 .../CompositeComponentResourceTagHandler.java      |   70 +-
 .../tag/composite/CompositeComponentRule.java      |   12 +-
 .../facelets/tag/composite/CompositeLibrary.java   |    4 +-
 .../tag/composite/CompositeMetaRulesetImpl.java    |   18 +-
 .../tag/composite/CompositeMetadataTargetImpl.java |    4 +-
 .../tag/composite/CompositeResouceWrapper.java     |    6 +-
 .../tag/composite/CompositeResourceLibrary.java    |   24 +-
 .../tag/composite/CompositeTagAttributeUtils.java  |    6 +-
 .../CreateDynamicCompositeComponentListener.java   |   14 +-
 ...ditableValueHolderAttachedObjectTargetImpl.java |    2 +-
 .../tag/composite/EditableValueHolderHandler.java  |    6 +-
 .../facelets/tag/composite/ExtensionHandler.java   |    8 +-
 .../view/facelets/tag/composite/FacetHandler.java  |   16 +-
 .../tag/composite/ImplementationHandler.java       |   12 +-
 .../tag/composite/InsertChildrenHandler.java       |    8 +-
 .../facelets/tag/composite/InsertFacetHandler.java |   12 +-
 .../facelets/tag/composite/InterfaceHandler.java   |   18 +-
 .../facelets/tag/composite/RenderFacetHandler.java |   12 +-
 .../composite/RetargetMethodExpressionRule.java    |   12 +-
 .../ValueHolderAttachedObjectTargetImpl.java       |    2 +-
 .../facelets/tag/composite/ValueHolderHandler.java |    6 +-
 .../view/facelets/tag/jsf/ActionSourceRule.java    |   18 +-
 .../tag/jsf/BehaviorTagHandlerDelegate.java        |   28 +-
 .../jsf/ClearBindingValueExpressionListener.java   |    6 +-
 .../facelets/tag/jsf/ComponentBuilderHandler.java  |    4 +-
 .../view/facelets/tag/jsf/ComponentHandler.java    |   37 +-
 .../jsf/ComponentRelocatableResourceHandler.java   |    6 +-
 .../view/facelets/tag/jsf/ComponentRule.java       |   12 +-
 .../view/facelets/tag/jsf/ComponentSupport.java    |   24 +-
 .../tag/jsf/ComponentTagHandlerDelegate.java       |   65 +-
 .../view/facelets/tag/jsf/ConvertHandler.java      |   38 +-
 .../tag/jsf/ConverterTagHandlerDelegate.java       |   28 +-
 .../facelets/tag/jsf/EditableValueHolderRule.java  |   22 +-
 .../view/facelets/tag/jsf/ElementNameRule.java     |    8 +-
 .../view/facelets/tag/jsf/FaceletState.java        |    8 +-
 .../view/facelets/tag/jsf/JsfElementHandler.java   |    7 +-
 .../myfaces/view/facelets/tag/jsf/JsfLibrary.java  |    2 +-
 .../jsf/PartialMethodExpressionActionListener.java |    6 +-
 .../tag/jsf/PartialMethodExpressionValidator.java  |    6 +-
 ...PartialMethodExpressionValueChangeListener.java |    6 +-
 .../view/facelets/tag/jsf/PassthroughRuleImpl.java |   12 +-
 .../view/facelets/tag/jsf/PreDisposeViewEvent.java |    8 +-
 .../tag/jsf/RelocatableResourceHandler.java        |    4 +-
 .../tag/jsf/TagHandlerDelegateFactoryImpl.java     |   12 +-
 .../view/facelets/tag/jsf/ValidateHandler.java     |   28 +-
 .../tag/jsf/ValidatorTagHandlerDelegate.java       |   26 +-
 .../view/facelets/tag/jsf/ValueHolderRule.java     |   16 +-
 .../tag/jsf/core/ActionListenerHandler.java        |   40 +-
 .../view/facelets/tag/jsf/core/AjaxHandler.java    |   48 +-
 .../facelets/tag/jsf/core/AttributeHandler.java    |   26 +-
 .../facelets/tag/jsf/core/AttributesHandler.java   |   12 +-
 .../tag/jsf/core/ConvertDateTimeHandler.java       |   26 +-
 .../tag/jsf/core/ConvertDelegateHandler.java       |   20 +-
 .../tag/jsf/core/ConvertNumberHandler.java         |   24 +-
 .../view/facelets/tag/jsf/core/CoreLibrary.java    |   36 +-
 .../view/facelets/tag/jsf/core/EventHandler.java   |   40 +-
 .../view/facelets/tag/jsf/core/FacetHandler.java   |   24 +-
 .../facelets/tag/jsf/core/LoadBundleHandler.java   |   24 +-
 .../tag/jsf/core/PassThroughAttributeHandler.java  |   21 +-
 .../tag/jsf/core/PassThroughAttributesHandler.java |   12 +-
 .../tag/jsf/core/PhaseListenerHandler.java         |   32 +-
 .../jsf/core/ResetValuesActionListenerHandler.java |   40 +-
 .../facelets/tag/jsf/core/SelectItemHandler.java   |    6 +-
 .../facelets/tag/jsf/core/SelectItemsHandler.java  |    6 +-
 .../jsf/core/SetPropertyActionListenerHandler.java |   32 +-
 .../tag/jsf/core/ValidateDelegateHandler.java      |   16 +-
 .../tag/jsf/core/ValueChangeListenerHandler.java   |   36 +-
 .../facelets/tag/jsf/core/VerbatimHandler.java     |   10 +-
 .../view/facelets/tag/jsf/core/ViewHandler.java    |   22 +-
 .../facelets/tag/jsf/core/ViewMetadataHandler.java |   14 +-
 .../facelets/tag/jsf/core/WebsocketHandler.java    |   12 +-
 .../facelets/tag/jsf/html/DefaultTagDecorator.java |   14 +-
 .../tag/jsf/html/HtmlComponentHandler.java         |    6 +-
 .../view/facelets/tag/jsf/html/HtmlDecorator.java  |    8 +-
 .../view/facelets/tag/jsf/html/HtmlLibrary.java    |   69 +-
 .../tag/jsf/html/HtmlOutputScriptHandler.java      |    8 +-
 .../tag/jsf/html/HtmlOutputStylesheetHandler.java  |    8 +-
 .../facelets/tag/jsf/html/_HtmlOutputScript.java   |    6 +-
 .../tag/jsf/html/_HtmlOutputStylesheet.java        |    6 +-
 .../view/facelets/tag/jstl/core/CatchHandler.java  |   14 +-
 .../view/facelets/tag/jstl/core/ChooseHandler.java |   18 +-
 .../tag/jstl/core/ChooseOtherwiseHandler.java      |   12 +-
 .../facelets/tag/jstl/core/ChooseWhenHandler.java  |   14 +-
 .../facelets/tag/jstl/core/ForEachHandler.java     |   20 +-
 .../view/facelets/tag/jstl/core/IfHandler.java     |   16 +-
 .../tag/jstl/core/LegacyForEachHandler.java        |   16 +-
 .../facelets/tag/jstl/core/LegacySetHandler.java   |   16 +-
 .../view/facelets/tag/jstl/core/SetHandler.java    |   16 +-
 .../view/facelets/tag/jstl/fn/JstlFnLibrary.java   |    6 +-
 .../myfaces/view/facelets/tag/ui/ComponentRef.java |    2 +-
 .../view/facelets/tag/ui/ComponentRefHandler.java  |    4 +-
 .../view/facelets/tag/ui/CompositionHandler.java   |   18 +-
 .../view/facelets/tag/ui/DebugPhaseListener.java   |   22 +-
 .../view/facelets/tag/ui/DecorateHandler.java      |   22 +-
 .../view/facelets/tag/ui/DefineHandler.java        |   18 +-
 .../view/facelets/tag/ui/IncludeHandler.java       |   26 +-
 .../view/facelets/tag/ui/InsertHandler.java        |   18 +-
 .../facelets/tag/ui/LegacyCompositionHandler.java  |   18 +-
 .../facelets/tag/ui/LegacyDecorateHandler.java     |   22 +-
 .../view/facelets/tag/ui/LegacyIncludeHandler.java |   26 +-
 .../view/facelets/tag/ui/LegacyParamHandler.java   |   18 +-
 .../myfaces/view/facelets/tag/ui/ParamHandler.java |   18 +-
 .../view/facelets/tag/ui/RepeatHandler.java        |   14 +-
 .../myfaces/view/facelets/tag/ui/UIDebug.java      |    8 +-
 .../myfaces/view/facelets/tag/ui/_Component.java   |    4 +-
 .../myfaces/view/facelets/tag/ui/_Fragment.java    |    4 +-
 .../util/FaceletsViewDeclarationLanguageUtils.java |   12 +-
 .../myfaces/view/facelets/util/Resource.java       |    6 +-
 .../myfaces/view/impl/DefaultViewScopeHandler.java |    4 +-
 .../view/jsp/JspViewDeclarationLanguage.java       |   14 +-
 .../jsp/JspViewDeclarationLanguageStrategy.java    |    6 +-
 .../myfaces/webapp/AbstractFacesInitializer.java   |   26 +-
 .../myfaces/webapp/FaceletsInitilializer.java      |    4 +-
 .../myfaces/webapp/FacesELContextListener.java     |    2 +-
 .../apache/myfaces/webapp/FacesInitializer.java    |    2 +-
 .../myfaces/webapp/FacesInitializerFactory.java    |    2 +-
 .../myfaces/webapp/Jsp20FacesInitializer.java      |    4 +-
 .../myfaces/webapp/Jsp21FacesInitializer.java      |    8 +-
 .../webapp/ManagedBeanDestroyerListener.java       |    6 +-
 .../org/apache/myfaces/webapp/MyFacesServlet.java  |    4 +-
 .../webapp/StartupServletContextListener.java      |    4 +-
 .../resources/META-INF/WebConfigParamsLogger.vm    |    4 +-
 .../main/resources/META-INF/componentClass20.vm    |   54 +-
 impl/src/main/resources/META-INF/faces-config20.vm |    2 +-
 impl/src/main/resources/META-INF/myfaces_core12.vm |    2 +-
 .../resources/META-INF/myfaces_facelet_core20.vm   |    2 +-
 .../META-INF/myfaces_facelet_core20_xsd.vm         |    2 +-
 .../resources/META-INF/myfaces_facelet_html20.vm   |    2 +-
 .../META-INF/myfaces_facelet_html20_xsd.vm         |    2 +-
 impl/src/main/resources/META-INF/myfaces_html12.vm |    2 +-
 impl/src/main/resources/META-INF/tagClass12.vm     |   22 +-
 impl/src/main/resources/META-INF/xdoc-component.vm |    2 +-
 .../src/main/resources/META-INF/xdoc-web-config.vm |    2 +-
 .../java/jakarta/faces/FacesExceptionTest.java     |   99 +
 .../test/java/jakarta/faces/FactoryFinderTest.java |  287 +++
 .../jakarta/faces/application/ApplicationTest.java |  139 +
 .../faces/application/FacesMessageTest.java        |  244 ++
 .../jakarta/faces/application/MockApplication.java |  236 ++
 .../faces/application/StateManagerTest.java        |  162 ++
 .../jakarta/faces/application/ViewHandlerTest.java |  233 ++
 .../faces/component/AbstractComponentTest.java     |   50 +
 .../component/AbstractUIComponentBaseTest.java     |   82 +
 .../component/AbstractUIComponentPropertyTest.java |  130 +
 .../faces/component/InvokeOnComponentTest.java     |  283 +++
 .../faces/component/UIComponentAttributesTest.java |   67 +
 .../UIComponentBaseFacesListenerTest.java          |  117 +
 .../component/UIComponentBaseGetChildrenTest.java  |  191 ++
 .../component/UIComponentBaseGetClientIdTest.java  |  178 ++
 ...UIComponentBaseProcessSaveRestoreStateTest.java |  183 ++
 .../faces/component/UIComponentBaseTest.java       |  427 ++++
 .../component/UIComponentBaseValueBindingTest.java |  121 +
 .../faces/component/UIComponentEncodeAllTest.java  |  124 +
 .../UIComponentEventListenerWrapperTest.java       |  662 +++++
 .../component/UIComponentFindComponentTest.java    |  202 ++
 .../UIComponentInvokeOnComponentTest.java          |  152 ++
 .../jakarta/faces/component/UIComponentMock.java   |   28 +
 .../jakarta/faces/component/UIComponentTest.java   |   90 +
 .../faces/component/UIComponentTestBase.java       |   46 +
 .../component/UIComponentValueExpressionTest.java  |  144 ++
 .../faces/component/UIDataRowStateTest.java        |  278 ++
 .../java/jakarta/faces/component/UIDataTest.java   | 1149 +++++++++
 .../jakarta/faces/component/UIGraphicTest.java     |   67 +
 .../java/jakarta/faces/component/UIInputTest.java  |  496 ++++
 .../jakarta/faces/component/UIOutputPSSTest.java   |  562 ++++
 .../jakarta/faces/component/UISelectItemsTest.java |   92 +
 .../jakarta/faces/component/UISelectManyTest.java  |  181 ++
 .../jakarta/faces/component/UISelectOneTest.java   |  185 ++
 .../faces/component/UIViewParameterTest.java       |   86 +
 .../jakarta/faces/component/UIViewRootTest.java    |  634 +++++
 .../component/_AttachedListStateWrapperTest.java   |   86 +
 .../faces/component/_AttachedStateWrapperTest.java |   98 +
 .../faces/component/_ComponentUtilsTest.java       |   49 +
 .../faces/component/_Delta2StateHelperTest.java    |  606 +++++
 .../component/_DeltaFacesListenerListTest.java     |  521 ++++
 .../jakarta/faces/component/_DeltaListTest.java    |  775 ++++++
 .../faces/component/_DeltaStateHelperTest.java     |  304 +++
 .../_MethodBindingToMethodExpressionTest.java      |  210 ++
 .../faces/component/_SelectItemsUtilTest.java      |  163 ++
 .../faces/component/_SharedRendererUtilsTest.java  |  346 +++
 .../_ValueBindingToValueExpressionTest.java        |  275 ++
 .../_ValueExpressionToValueBindingTest.java        |  298 +++
 .../faces/component/html/HtmlOutputLinkTest.java   |   38 +
 .../jakarta/faces/context/MockFacesContext.java    |   39 +
 .../faces/convert/DateTimeConverterTest.java       |  111 +
 .../jakarta/faces/convert/DoubleConverterTest.java |  157 ++
 .../jakarta/faces/convert/EnumConverterTest.java   |  185 ++
 .../jakarta/faces/convert/MessageUtilsTest.java    |   73 +
 .../jakarta/faces/convert/NumberConverterTest.java |  205 ++
 .../event/MethodExpressionActionListenerTest.java  |  160 ++
 .../MethodExpressionValueChangeListenerTest.java   |  160 ++
 .../jakarta/faces/validator/_MessageUtilsTest.java |   75 +
 .../src/test/java/org/apache/myfaces/Assert.java   |    0
 .../java/org/apache/myfaces/FacesTestCase.java     |    9 +-
 .../test/java/org/apache/myfaces/TestRunner.java   |    0
 .../application/ApplicationImplAnnotationTest.java |   50 +-
 .../application/ApplicationImplJsfTest.java        |   29 +-
 .../myfaces/application/ApplicationImplTest.java   |   40 +-
 .../application/ClientBehaviorTestCase.java        |   26 +-
 .../myfaces/application/MockResourceComponent.java |    2 +-
 .../application/NavigationHandlerImplTest.java     |    4 +-
 .../application/ResourceHandlerImplTest.java       |    8 +-
 .../myfaces/application/StateManagerImplTest.java  |   10 +-
 .../myfaces/application/ViewHandlerImplTest.java   |   16 +-
 ...tractsCreateResourceMyFacesRequestTestCase.java |   12 +-
 ...faultContractsConfigMyFacesRequestTestCase.java |    4 +-
 .../SingleContractMyFacesRequestTestCase.java      |   12 +-
 .../SingleContractNoPSSMyFacesRequestTestCase.java |    2 +-
 .../apache/myfaces/application/flow/Flow1Bean.java |    2 +-
 .../myfaces/application/flow/Flow21Bean.java       |    2 +-
 .../apache/myfaces/application/flow/Flow2Bean.java |    2 +-
 .../apache/myfaces/application/flow/Flow5Bean.java |    4 +-
 .../flow/FlowMyFacesCDIRequestTestCase.java        |   16 +-
 .../flow/FlowMyFacesRequestTestCase.java           |   20 +-
 .../FlowResourceHandlerMyFacesRequestTestCase.java |    8 +-
 .../viewstate/ClientSideStateCacheTest.java        |    2 +-
 .../SerializedViewCollectionTestCase.java          |    2 +-
 .../viewstate/ServerSideStateCacheTest.java        |    4 +-
 .../cdi/bean/CDIGenericConverterValidatorTest.java |    8 +-
 .../apache/myfaces/cdi/bean/CustomConverter.java   |    8 +-
 .../apache/myfaces/cdi/bean/CustomValidator.java   |   12 +-
 .../bean/DynamicManagedPropertyProducerTest.java   |    2 +-
 .../myfaces/cdi/bean/ManagedPropertyBean.java      |    2 +-
 .../myfaces/component/search/SearchBean.java       |    4 +-
 .../component/search/SearchExpressionImplTest.java |   20 +-
 ...FacesConfiguratorDefaultValidatorsTestCase.java |   12 +-
 .../myfaces/config/ManagedBeanBuilderTest.java     |    8 +-
 .../myfaces/config/OrderingFacesConfigTest.java    |    2 +-
 .../ClassByteCodeAnnotationFilterTest.java         |    2 +-
 .../myfaces/context/ExecutePhaseClientIdsTest.java |    6 +-
 .../org/apache/myfaces/context/IsRenderedTest.java |    6 +-
 .../myfaces/context/RenderPhaseClientIdsTest.java  |    6 +-
 .../myfaces/context/ResponseWrapperSwitchTest.java |    6 +-
 .../apache/myfaces/context/TestIsAjaxRequest.java  |    6 +-
 .../context/servlet/FacesContextImplBaseTest.java  |   12 +-
 .../java/org/apache/myfaces/dummy/data/Data.java   |    0
 .../convert/ValueBindingToValueExpressionTest.java |   17 +-
 .../convert/ValueExpressionToValueBindingTest.java |   31 +-
 .../myfaces/el/unified/NoOpPropertyResolver.java   |    6 +-
 .../el/unified/ResolverBuilderBaseTest.java        |    4 +-
 .../unified/resolver/ManagedBeanResolverTest.java  |    8 +-
 .../event/PostAddToViewEventNoPssTestCase.java     |   14 +-
 .../myfaces/event/PostAddToViewEventTestCase.java  |   20 +-
 .../apache/myfaces/flow/FlowBuilderTestCase.java   |   22 +-
 .../lifecycle/DefaultRestoreViewSupportTest.java   |   18 +-
 .../myfaces/lifecycle/DummyPhaseListenerA.java     |    8 +-
 .../myfaces/lifecycle/DummyPhaseListenerB.java     |    6 +-
 .../lifecycle/InstrumentingPhaseListener.java      |    6 +-
 .../lifecycle/MyFacesRequestJUnitTestCase.java     |    1 -
 .../lifecycle/RenderResponseExecutorTest.java      |    2 +-
 .../myfaces/lifecycle/RestoreViewExecutorTest.java |   27 +-
 .../core/AbstractMyFacesCDIRequestTestCase.java    |    4 +-
 .../test/core/AbstractMyFacesFaceletsTestCase.java |    8 +-
 .../test/core/AbstractMyFacesRequestTestCase.java  |    6 +-
 .../mc/test/core/AbstractMyFacesTestCase.java      |   50 +-
 .../test/core/annotation/DeclareFacesConfig.java   |    2 +-
 .../mock/MockDefaultViewDeclarationLanguage.java   |   28 +-
 ...MockDefaultViewDeclarationLanguageStrategy.java |    2 +-
 .../mc/test/core/mock/MockMyFacesClient.java       |   36 +-
 .../MockMyFacesFaceletViewDeclarationLanguage.java |   10 +-
 ...acesFaceletViewDeclarationLanguageStrategy.java |    8 +-
 .../MockMyFacesViewDeclarationLanguageFactory.java |    6 +-
 .../mc/test/core/mock/ServletMockContainer.java    |    2 +-
 .../runner/AbstractJsfRequestTestContainer.java    |    8 +-
 .../test/core/runner/AbstractJsfTestContainer.java |   51 +-
 .../mc/test/core/runner/MyFacesTestRunner.java     |    2 +-
 .../apache/myfaces/mock/ExceptionMockRunner.java   |    0
 .../myfaces/mock/MockRenderedValueExpression.java  |   69 +
 .../java/org/apache/myfaces/mock/MockRunner.java   |    0
 .../myfaces/mock/api/Mock2ApplicationFactory.java  |   54 +
 .../myfaces/mock/api/MockApplicationFactory.java   |   51 +
 .../myfaces/renderkit/ErrorPageWriterTest.java     |    5 +-
 .../renderkit/html/HtmlBodyRendererTest.java       |    2 +-
 .../renderkit/html/HtmlButtonRendererTest.java     |   16 +-
 .../renderkit/html/HtmlCheckboxRendererTest.java   |    8 +-
 .../renderkit/html/HtmlDoctypeRendererTest.java    |    2 +-
 .../renderkit/html/HtmlEscapeRendererTest.java     |   22 +-
 .../renderkit/html/HtmlFormRendererTest.java       |    4 +-
 .../renderkit/html/HtmlFormatRendererTest.java     |    4 +-
 .../renderkit/html/HtmlGridRendererTest.java       |    8 +-
 .../renderkit/html/HtmlGroupRendererTest.java      |    6 +-
 .../renderkit/html/HtmlHeadRendererTest.java       |    2 +-
 .../renderkit/html/HtmlImageRendererTest.java      |    4 +-
 .../renderkit/html/HtmlLabelRendererTest.java      |   10 +-
 .../renderkit/html/HtmlLinkRendererTest.java       |   17 +-
 .../renderkit/html/HtmlListboxRendererTest.java    |   12 +-
 .../renderkit/html/HtmlMenuRendererTest.java       |   12 +-
 .../renderkit/html/HtmlMessageRendererTest.java    |   10 +-
 .../renderkit/html/HtmlMessagesRendererTest.java   |    6 +-
 .../html/HtmlOutcomeTargetButtonRendererTest.java  |    8 +-
 .../renderkit/html/HtmlRadioRendererTest.java      |   10 +-
 .../html/HtmlRolePassedThroughTestCase.java        |    6 +-
 .../renderkit/html/HtmlSecretRendererTest.java     |    4 +-
 .../renderkit/html/HtmlTableRendererTest.java      |   10 +-
 .../renderkit/html/HtmlTextRendererTest.java       |   18 +-
 .../renderkit/html/HtmlTextareaRendererTest.java   |    4 +-
 .../behavior/AbstractClientBehaviorTestCase.java   |   24 +-
 .../HtmlBodyClientBehaviorRendererTest.java        |    8 +-
 ...tmlCommandButtonClientBehaviorRendererTest.java |    4 +-
 .../HtmlCommandLinkClientBehaviorRendererTest.java |    6 +-
 .../HtmlDataTableClientBehaviorRendererTest.java   |    4 +-
 .../HtmlFormClientBehaviorRendererTest.java        |    4 +-
 ...HtmlGraphicImageClientBehaviorRendererTest.java |    4 +-
 ...comeTargetButtonClientBehaviorRendererTest.java |    4 +-
 ...utcomeTargetLinkClientBehaviorRendererTest.java |    4 +-
 .../HtmlOutputLabelClientBehaviorRendererTest.java |    4 +-
 .../HtmlOutputLinkClientBehaviorRendererTest.java  |    4 +-
 .../HtmlPanelGridClientBehaviorRendererTest.java   |    4 +-
 .../HtmlSecretClientBehaviorRendererTest.java      |    4 +-
 ...tBooleanCheckboxClientBehaviorRendererTest.java |    4 +-
 ...lectManyCheckboxClientBehaviorRendererTest.java |   13 +-
 ...electManyListboxClientBehaviorRendererTest.java |    6 +-
 ...mlSelectManyMenuClientBehaviorRendererTest.java |    6 +-
 ...SelectOneListboxClientBehaviorRendererTest.java |    6 +-
 ...tmlSelectOneMenuClientBehaviorRendererTest.java |    6 +-
 ...mlSelectOneRadioClientBehaviorRendererTest.java |   10 +-
 .../HtmlTextClientBehaviorRendererTest.java        |    4 +-
 .../HtmlTextareaClientBehaviorRendererTest.java    |    4 +-
 .../myfaces/renderkits/OwnRenderKitImpl.java       |   10 +-
 .../myfaces/renderkits/OwnRenderkitTest.java       |   12 +-
 .../CustomFactoryFinderProviderFactoryImpl.java    |    2 +-
 .../myfaces/spi/FactoryFinderProviderTest.java     |    2 +-
 .../myfaces/taglib/html/HtmlFormTagTest.java       |    2 +-
 .../test/utils/HtmlCheckAttributesUtil.java        |    4 +-
 .../myfaces/test/utils/MockTestViewHandler.java    |    2 +-
 .../myfaces/view/facelets/BrokenTestCase.java      |    2 +-
 ...DefaultFaceletsStateManagementStrategyTest.java |   46 +-
 .../myfaces/view/facelets/EncodingTestCase.java    |    2 +-
 .../myfaces/view/facelets/ExceptionTestCase.java   |   34 +-
 .../facelets/FaceletMultipleRequestsTestCase.java  |   24 +-
 .../myfaces/view/facelets/FaceletTestCase.java     |   24 +-
 .../FaceletViewDeclarationLanguageTest.java        |   10 +-
 .../view/facelets/InstructionsTestCase.java        |    4 +-
 .../MockFaceletViewDeclarationLanguage.java        |   10 +-
 .../StateManagerWithFaceletsClientSideTest.java    |    2 +-
 .../facelets/StateManagerWithFaceletsTest.java     |    8 +-
 .../apache/myfaces/view/facelets/TagTestCase.java  |    8 +-
 .../view/facelets/TemplateClientTestCase.java      |    2 +-
 .../myfaces/view/facelets/bean/DummyBean.java      |    9 +-
 .../myfaces/view/facelets/bean/HelloWorld.java     |   12 +-
 .../compiler/CompressSpacesTextUnitTestCase.java   |    2 +-
 .../compiler/DynamicComponentFaceletTestCase.java  |    2 +-
 .../view/facelets/compiler/ELParserTestCase.java   |   12 +-
 .../compiler/HTML5FaceletsProcessingTestCase.java  |   30 +-
 .../compiler/JSPXFaceletsProcessingTestCase.java   |   28 +-
 .../facelets/compiler/SkipNamespaceUnitTest.java   |    4 +-
 .../compiler/UniqueComponentIdTestCase.java        |   17 +-
 .../view/facelets/compiler/WhitespaceTestCase.java |   32 +-
 .../compiler/XHTMLFaceletsProcessingTestCase.java  |   28 +-
 .../compiler/XMLFaceletsProcessingTestCase.java    |   28 +-
 .../view/facelets/component/UIRepeatTest.java      |   16 +-
 .../CacheELExpressionsAlwaysRecompileTestCase.java |    4 +-
 .../facelets/el/CacheELExpressionsTestCase.java    |    4 +-
 .../el/SerializableELExpressionsTestCase.java      |    4 +-
 .../view/facelets/impl/ResourceMarkDeleteTest.java |    6 +-
 .../mock/MockViewDeclarationLanguageFactory.java   |    6 +-
 .../myfaces/view/facelets/pool/DynamicBean.java    |    4 +-
 .../view/facelets/pool/SimpleRequestBean.java      |   16 +-
 .../view/facelets/pool/StateHolderConverter.java   |   12 +-
 .../view/facelets/pool/UISimpleComponentA.java     |    6 +-
 .../myfaces/view/facelets/pool/ViewParamBean.java  |    4 +-
 .../facelets/pool/ViewPoolFaceletsTestCase.java    |   14 +-
 .../pool/ViewPoolMyFacesRequestTestCase.java       |   22 +-
 .../acid/AcidARCacheELMyFacesRequestTestCase.java  |    1 -
 .../pss/acid/AcidMyFacesRequestTestCase.java       |   20 +-
 .../pss/acid/AcidNoPssMyFacesRequestTestCase.java  |    2 +-
 .../acid/AcidPssRefreshMyFacesRequestTestCase.java |    2 +-
 ...RefreshPreserveStateMyFacesRequestTestCase.java |    2 +-
 .../pss/acid/component/UIAddComponent.java         |   18 +-
 .../pss/acid/component/UIAddSimpleCCVDL.java       |   22 +-
 .../pss/acid/component/UIAddSimpleCCVDL2.java      |   20 +-
 .../pss/acid/component/UIAddSimpleCCVDL3.java      |   22 +-
 .../pss/acid/component/UIAddSimpleCCVDL4.java      |   22 +-
 .../pss/acid/component/UIAddSimpleCCVDL5.java      |   20 +-
 .../pss/acid/component/UIAddSimpleCCVDL6.java      |   20 +-
 .../pss/acid/component/UIAddSimpleCCVDL7.java      |   22 +-
 .../acid/component/UIAddSimpleComponentVDL.java    |   22 +-
 .../pss/acid/component/UIAddSimpleIncludeVDL.java  |   20 +-
 .../pss/acid/component/UIAddSimpleIncludeVDL2.java |   20 +-
 .../pss/acid/component/UIDynamicFormComponent.java |   18 +-
 .../pss/acid/component/UIInputComponent.java       |   22 +-
 .../facelets/pss/acid/component/UIRDComponent.java |    6 +-
 .../pss/acid/component/UIRecursiveComponent.java   |   18 +-
 .../pss/acid/component/UISelfRenderComponent.java  |   16 +-
 .../pss/acid/component/UISimpleComponent1.java     |   12 +-
 .../pss/acid/component/UISimpleComponent2.java     |   14 +-
 .../pss/acid/component/UIStableComponent.java      |   18 +-
 .../pss/acid/component/UITableComponent.java       |   24 +-
 .../pss/acid/component/UIToggleComponent.java      |   20 +-
 .../pss/acid/managed/CheckActionEventBean.java     |    6 +-
 .../pss/acid/managed/ComponentBindingBean.java     |   14 +-
 .../pss/acid/managed/ComponentBindingFormBean.java |   10 +-
 .../pss/acid/managed/ComponentBindingVDLBean1.java |   16 +-
 .../pss/acid/managed/ComponentBindingVDLBean2.java |   16 +-
 .../pss/acid/managed/ComponentBindingVDLBean3.java |   16 +-
 .../pss/acid/managed/ComponentBindingVDLBean4.java |   16 +-
 .../pss/acid/managed/ComponentBindingVDLBean5.java |   16 +-
 .../pss/acid/managed/ComponentBindingVDLBean6.java |   16 +-
 .../pss/acid/managed/ComponentBindingVDLBean7.java |   16 +-
 .../pss/acid/managed/CustomSessionBean.java        |    4 +-
 .../facelets/pss/acid/managed/ForEachBean.java     |    6 +-
 .../pss/acid/managed/ProbeManagedBean.java         |    4 +-
 .../pss/acid/managed/ResourceDependencyBean.java   |    4 +-
 .../view/facelets/pss/acid/managed/TestBean.java   |    4 +-
 .../pss/acid/renderkit/ProbeComponentRenderer.java |    8 +-
 .../view/facelets/stateless/StatelessTest.java     |   10 +-
 .../view/facelets/tag/TagAttributesImplTest.java   |    2 +-
 .../CompositeComponentActionListenerTestCase.java  |   14 +-
 .../CompositeComponentAttributeTestCase.java       |   24 +-
 .../CompositeComponentBeanValidationTest.java      |    6 +-
 .../composite/CompositeComponentCCRefTestCase.java |    6 +-
 .../CompositeComponentCConIncludeTestCase.java     |    2 +-
 .../CompositeComponentClientBehaviorTestCase.java  |    8 +-
 ...ompositeComponentConditionalButtonTestCase.java |   10 +-
 ...CompositeComponentMethodExpressionTestCase.java |   12 +-
 .../CompositeComponentNestedCCTestCase.java        |    4 +-
 .../tag/composite/CompositeComponentTestCase.java  |   26 +-
 .../CompositeComponentValidatorTestCase.java       |   12 +-
 ...positeComponentValueChangeListenerTestCase.java |   14 +-
 .../tag/composite/CompositeTestComponent.java      |    4 +-
 .../facelets/tag/composite/MockAttributeBean.java  |   14 +-
 .../composite/SerializableAttributesTestCase.java  |    2 +-
 .../facelets/tag/composite/SimpleComponent.java    |    2 +-
 .../tag/composite/SimpleComponentTagHandler.java   |   16 +-
 .../facelets/tag/jsf/core/ActionListenerImpl.java  |    6 +-
 .../view/facelets/tag/jsf/core/CoreTestCase.java   |   62 +-
 .../tag/jsf/core/ValidateBeanTestCase.java         |    8 +-
 .../tag/jsf/core/ValueChangeListenerImpl.java      |    6 +-
 .../tag/jsf/core/ViewMetadataTestCase.java         |   14 +-
 .../tag/jsf/core/reset/ResetValuesBean.java        |    6 +-
 .../tag/jsf/core/reset/ResetValuesTestCase.java    |    5 +-
 .../BeanValidationCDIRequestTestCase.java          |   12 +-
 .../facelets/tag/jsf/html/DataTableTestCase.java   |   22 +-
 .../tag/jsf/html/DefaultHtmlDecoratorTestCase.java |   70 +-
 .../tag/jsf/html/HtmlOutputLabelTestCase.java      |    6 +-
 .../tag/jsf/html/HtmlOutputScriptTestCase.java     |    4 +-
 .../view/facelets/tag/jsf/html/HtmlTestCase.java   |   28 +-
 .../view/facelets/tag/jsf/html/MockNbsp.java       |    2 +-
 .../view/facelets/tag/jsf/html/SelectTestCase.java |   30 +-
 .../view/facelets/tag/jstl/core/CifTestCase.java   |    8 +-
 .../view/facelets/tag/jstl/core/CsetTestCase.java  |    6 +-
 .../facelets/tag/jstl/core/JstlCoreTestCase.java   |   25 +-
 .../facelets/tag/ui/DefineIncludeTestCase.java     |    2 +-
 .../facelets/tag/ui/ELExprTemplateTestCase.java    |    2 +-
 .../view/facelets/tag/ui/IncludeParamTestCase.java |   22 +-
 .../view/facelets/tag/ui/RemoveTestCase.java       |   24 +-
 .../view/facelets/tag/ui/RepeatTestCase.java       |   18 +-
 .../view/facelets/tag/ui/TemplateTestCase.java     |    4 +-
 .../myfaces/view/facelets/tag/ui/TestUserTags.java |   15 +-
 .../myfaces/view/facelets/tag/ui/UITestCase.java   |    2 +-
 .../tag/ui/template/CompositionTestCase.java       |    5 +-
 .../facelets/tag/ui/template/DecorateTestCase.java |    4 +-
 .../facelets/tag/ui/template/IncludeTestCase.java  |    5 +-
 .../facelets/tag/ui/template/UserTagTestCase.java  |    5 +-
 ...sComponentAnnotationMyFacesRequestTestCase.java |    6 +-
 .../test/component/InputTextWithClass.java         |    4 +-
 .../view/facelets/test/component/MyUIPanel1.java   |    4 +-
 .../view/facelets/test/component/MyUIPanel2.java   |    4 +-
 .../test/component/MyUIPanel2Renderer.java         |    4 +-
 .../view/facelets/test/component/MyUIPanel3.java   |    4 +-
 .../UpdateHeadDynamicViewTestCase.java             |   16 +-
 .../updateheadres/managed/AjaxContentBean.java     |    6 +-
 .../view/jsp/JspViewDeclarationLanguageTest.java   |    4 +-
 .../myfaces/webapp/FacesELContextListenerTest.java |    8 +-
 .../myfaces/webapp/Jsp21FacesInitializerTest.java  |    2 +-
 .../apache/myfaces/webapp/MyFacesServletTest.java  |    6 +-
 .../webapp/StartupServletContextListenerTest.java  |    6 +-
 .../resourcehandler/messages_de.properties         |    2 +-
 .../resourcehandler/messages_en.properties         |    2 +-
 .../config/testfiles/default-bean-validator.xml    |    2 +-
 .../config/testfiles/default-length-validator.xml  |    2 +-
 .../testfiles/default-required-validator.xml       |    2 +-
 .../tag/composite/localized/messages_de.properties |    2 +-
 .../tag/composite/localized/messages_en.properties |    2 +-
 .../tag/composite/localized/messages_es.properties |    2 +-
 .../simpleAttributeMethodExpression.xhtml          |    6 +-
 .../resources/testComposite/simpleFEvent.xhtml     |    2 +-
 .../tag/composite/testSimpleValueHolder.xhtml      |    2 +-
 .../view/facelets/tag/jsf/core/converter.xml       |    2 +-
 .../view/facelets/tag/jsf/core/validator.xml       |    2 +-
 .../view/facelets/tag/jsf/html/selectOne.xml       |    2 +-
 .../html/testMultipleTargetHeadOutputScript.xhtml  |   10 +-
 .../tag/jsf/html/testSimpleOutputScript.xhtml      |    2 +-
 .../html/testSimpleTargetHeadOutputScript.xhtml    |    2 +-
 .../view/facelets/updateheadres/ajaxContent.xhtml  |    2 +-
 parent/pom.xml                                     |    9 +-
 pom.xml                                            |    7 +-
 shared-public/pom.xml                              |    6 +-
 .../myfaces/shared/util/ClassLoaderUtils.java      |    2 +-
 .../org/apache/myfaces/shared/util/ClassUtils.java |    4 +-
 .../apache/myfaces/shared/util/ComponentUtils.java |    4 +-
 .../org/apache/myfaces/shared/util/DebugUtils.java |    4 +-
 .../myfaces/shared/util/ExternalContextUtils.java  |    2 +-
 .../apache/myfaces/shared/util/MessageUtils.java   |   18 +-
 .../shared/util/ParametrizableFacesMessage.java    |    6 +-
 .../apache/myfaces/shared/util/RendererUtils.java  |    4 +-
 .../myfaces/shared/util/SelectItemsIterator.java   |   14 +-
 .../org/apache/myfaces/shared/util/TagUtils.java   |    2 +-
 .../myfaces/shared/util/WebConfigParamUtils.java   |    4 +-
 .../myfaces/shared/util/MessageUtilsTest.java      |   36 +-
 .../resources/jakarta/faces/Messages.properties    |  135 +
 .../resources/jakarta/faces/Messages_ca.properties |  127 +
 .../resources/jakarta/faces/Messages_de.properties |  129 +
 .../resources/jakarta/faces/Messages_en.properties |  129 +
 .../resources/jakarta/faces/Messages_es.properties |  127 +
 .../resources/jakarta/faces/Messages_fr.properties |  127 +
 .../resources/jakarta/faces/Messages_it.properties |  128 +
 .../resources/jakarta/faces/Messages_ja.properties |  127 +
 .../resources/jakarta/faces/Messages_mt.properties |  135 +
 .../resources/jakarta/faces/Messages_nl.properties |  127 +
 .../jakarta/faces/Messages_pt_BR.properties        |  127 +
 .../resources/jakarta/faces/Messages_ru.properties |  127 +
 .../jakarta/faces/Messages_zh_CN.properties        |  127 +
 .../test/resources/javax/faces/Messages.properties |  135 -
 .../resources/javax/faces/Messages_ca.properties   |  127 -
 .../resources/javax/faces/Messages_de.properties   |  129 -
 .../resources/javax/faces/Messages_en.properties   |  129 -
 .../resources/javax/faces/Messages_es.properties   |  127 -
 .../resources/javax/faces/Messages_fr.properties   |  127 -
 .../resources/javax/faces/Messages_it.properties   |  128 -
 .../resources/javax/faces/Messages_ja.properties   |  127 -
 .../resources/javax/faces/Messages_mt.properties   |  135 -
 .../resources/javax/faces/Messages_nl.properties   |  127 -
 .../javax/faces/Messages_pt_BR.properties          |  127 -
 .../resources/javax/faces/Messages_ru.properties   |  127 -
 .../javax/faces/Messages_zh_CN.properties          |  127 -
 shared/pom.xml                                     |    6 +-
 .../shared/application/CheckedViewIdsCache.java    |    4 +-
 .../application/DefaultViewHandlerSupport.java     |   10 +-
 .../application/FacesServletMappingUtils.java      |    6 +-
 .../shared/application/NavigationUtils.java        |    2 +-
 .../shared/application/ViewHandlerSupport.java     |    2 +-
 .../shared/component/ExecuteOnCallback.java        |    4 +-
 .../myfaces/shared/config/MyfacesConfig.java       |   26 +-
 .../shared/context/AjaxExceptionHandlerImpl.java   |   26 +-
 .../shared/context/ExceptionHandlerImpl.java       |   16 +-
 .../shared/context/ResponseWriterWrapper.java      |    4 +-
 .../SwitchAjaxExceptionHandlerWrapperImpl.java     |   16 +-
 .../flash/ClientWindowFlashTokenLRUMap.java        |    6 +-
 .../myfaces/shared/context/flash/FlashImpl.java    |   22 +-
 .../context/flash/FlashScopeDisabledException.java |    2 +-
 .../shared/context/flash/ReleasableFlash.java      |    2 +-
 .../shared/el/SimpleActionMethodBinding.java       |   10 +-
 .../myfaces/shared/renderkit/ContentTypeUtils.java |    2 +-
 .../apache/myfaces/shared/renderkit/JSFAttr.java   |    2 +-
 .../myfaces/shared/renderkit/RendererUtils.java    |   60 +-
 .../shared/renderkit/_SharedRendererUtils.java     |   18 +-
 .../renderkit/html/CommonEventConstants.java       |    2 +-
 .../shared/renderkit/html/CommonEventUtils.java    |   10 +-
 .../renderkit/html/CommonPropertyConstants.java    |    4 +-
 .../shared/renderkit/html/CommonPropertyUtils.java |    6 +-
 .../renderkit/html/HtmlBodyRendererBase.java       |   16 +-
 .../renderkit/html/HtmlButtonRendererBase.java     |   24 +-
 .../renderkit/html/HtmlCheckboxRendererBase.java   |   28 +-
 .../renderkit/html/HtmlFormRendererBase.java       |   18 +-
 .../renderkit/html/HtmlGridRendererBase.java       |   16 +-
 .../renderkit/html/HtmlGroupRendererBase.java      |   12 +-
 .../renderkit/html/HtmlImageRendererBase.java      |   14 +-
 .../renderkit/html/HtmlInputFileRendererBase.java  |   26 +-
 .../shared/renderkit/html/HtmlJavaScriptUtils.java |    6 +-
 .../renderkit/html/HtmlLinkRendererBase.java       |   34 +-
 .../renderkit/html/HtmlListboxRendererBase.java    |   20 +-
 .../renderkit/html/HtmlMenuRendererBase.java       |   20 +-
 .../renderkit/html/HtmlMessageRendererBase.java    |   24 +-
 .../renderkit/html/HtmlMessagesRendererBase.java   |   24 +-
 .../html/HtmlOutcomeTargetButtonRendererBase.java  |   16 +-
 .../renderkit/html/HtmlRadioRendererBase.java      |   36 +-
 .../shared/renderkit/html/HtmlRenderer.java        |   10 +-
 .../shared/renderkit/html/HtmlRendererUtils.java   |   58 +-
 .../renderkit/html/HtmlResponseWriterImpl.java     |   10 +-
 .../renderkit/html/HtmlSecretRendererBase.java     |   18 +-
 .../renderkit/html/HtmlSelectableRendererBase.java |   16 +-
 .../renderkit/html/HtmlTableRendererBase.java      |   26 +-
 .../renderkit/html/HtmlTextRendererBase.java       |   22 +-
 .../renderkit/html/HtmlTextareaRendererBase.java   |   18 +-
 .../shared/renderkit/html/util/FormInfo.java       |    2 +-
 .../renderkit/html/util/HttpPartWrapper.java       |    6 +-
 .../renderkit/html/util/JavascriptUtils.java       |    2 +-
 .../renderkit/html/util/OutcomeTargetUtils.java    |   24 +-
 .../shared/renderkit/html/util/ResourceUtils.java  |   22 +-
 .../shared/renderkit/html/util/SelectItemInfo.java |    4 +-
 .../renderkit/html/util/SelectItemsUtils.java      |   18 +-
 .../renderkit/html/util/SharedStringBuilder.java   |    2 +-
 .../resource/BaseResourceHandlerSupport.java       |   12 +-
 .../shared/resource/ClassLoaderResourceLoader.java |    4 +-
 .../ClassLoaderResourceLoaderIterator.java         |    2 +-
 .../resource/ContractResourceLoaderWrapper.java    |    6 +-
 .../resource/ExternalContextResourceLoader.java    |    4 +-
 .../ExternalContextResourceLoaderIterator.java     |    4 +-
 .../myfaces/shared/resource/ResourceELUtils.java   |    4 +-
 .../shared/resource/ResourceHandlerCache.java      |    6 +-
 .../shared/resource/ResourceHandlerSupport.java    |    6 +-
 .../myfaces/shared/resource/ResourceImpl.java      |    8 +-
 .../myfaces/shared/resource/ResourceLoader.java    |    4 +-
 .../shared/resource/ResourceLoaderWrapper.java     |    6 +-
 .../resource/ValueExpressionFilterInputStream.java |    8 +-
 .../shared/taglib/UIComponentELTagBase.java        |    4 +-
 .../shared/taglib/UIComponentELTagUtils.java       |   26 +-
 .../myfaces/shared/taglib/UIComponentTagUtils.java |   30 +-
 .../shared/taglib/core/SelectItemTagBase.java      |    4 +-
 .../org/apache/myfaces/shared/util/StateUtils.java |    6 +-
 .../myfaces/shared/util/ViewProtectionUtils.java   |    2 +-
 .../myfaces/shared/util/_ComponentUtils.java       |    6 +-
 .../view/JspViewDeclarationLanguageBase.java       |   26 +-
 .../shared/view/ViewDeclarationLanguageBase.java   |   10 +-
 .../myfaces/shared/webapp/webxml/WebXml.java       |    4 +-
 .../myfaces/shared/webapp/webxml/WebXmlParser.java |    4 +-
 .../shared/context/flash/FlashImplTest.java        |   11 +-
 .../shared/renderkit/RendererUtilsTest.java        |   22 +-
 .../renderkit/html/HtmlRendererUtilsTest.java      |   10 +-
 .../shared/util/InitVector_CBCTestCase.java        |    3 +-
 .../myfaces/shared/util/MessageUtilsTest.java      |   36 +-
 .../resources/jakarta/faces/Messages.properties    |  135 +
 .../resources/jakarta/faces/Messages_ca.properties |  127 +
 .../resources/jakarta/faces/Messages_de.properties |  129 +
 .../resources/jakarta/faces/Messages_en.properties |  129 +
 .../resources/jakarta/faces/Messages_es.properties |  127 +
 .../resources/jakarta/faces/Messages_fr.properties |  127 +
 .../resources/jakarta/faces/Messages_it.properties |  128 +
 .../resources/jakarta/faces/Messages_ja.properties |  127 +
 .../resources/jakarta/faces/Messages_mt.properties |  135 +
 .../resources/jakarta/faces/Messages_nl.properties |  127 +
 .../jakarta/faces/Messages_pt_BR.properties        |  127 +
 .../resources/jakarta/faces/Messages_ru.properties |  127 +
 .../jakarta/faces/Messages_zh_CN.properties        |  127 +
 .../test/resources/javax/faces/Messages.properties |  135 -
 .../resources/javax/faces/Messages_ca.properties   |  127 -
 .../resources/javax/faces/Messages_de.properties   |  129 -
 .../resources/javax/faces/Messages_en.properties   |  129 -
 .../resources/javax/faces/Messages_es.properties   |  127 -
 .../resources/javax/faces/Messages_fr.properties   |  127 -
 .../resources/javax/faces/Messages_it.properties   |  128 -
 .../resources/javax/faces/Messages_ja.properties   |  127 -
 .../resources/javax/faces/Messages_mt.properties   |  135 -
 .../resources/javax/faces/Messages_nl.properties   |  127 -
 .../javax/faces/Messages_pt_BR.properties          |  127 -
 .../resources/javax/faces/Messages_ru.properties   |  127 -
 .../javax/faces/Messages_zh_CN.properties          |  127 -
 test/pom.xml                                       |  149 ++
 .../myfaces/test/base/AbstractJsfTestCase.java     |  356 +++
 .../test/base/AbstractViewControllerTestCase.java  |  101 +
 .../AbstractJsfConfigurableMockTestCase.java       |  358 +++
 ...actJsfConfigurableMultipleRequestsTestCase.java |  398 +++
 .../test/base/junit4/AbstractJsfTestCase.java      |  359 +++
 .../junit4/AbstractViewControllerTestCase.java     |  103 +
 .../apache/myfaces/test/cargo/CargoTestSetup.java  |  179 ++
 .../test/config/ResourceBundleVarNames.java        |   50 +
 .../apache/myfaces/test/el/AbstractELResolver.java |   78 +
 .../myfaces/test/el/ExpressionTokenizer.java       |  193 ++
 .../test/el/FacesImplicitObjectELResolver.java     |  317 +++
 .../test/el/FacesResourceBundleELResolver.java     |  234 ++
 .../test/el/FacesScopedAttributeELResolver.java    |  269 ++
 .../test/el/FacesVariableResolverChainWrapper.java |  143 ++
 .../test/el/MockCompositeValueExpression.java      |  180 ++
 .../org/apache/myfaces/test/el/MockELContext.java  |  122 +
 .../myfaces/test/el/MockExpressionFactory.java     |  365 +++
 .../apache/myfaces/test/el/MockFunctionMapper.java |   74 +
 .../myfaces/test/el/MockMethodExpression.java      |  267 ++
 .../myfaces/test/el/MockValueExpression.java       |  307 +++
 .../apache/myfaces/test/el/MockVariableMapper.java |   80 +
 .../test/el/MockVariableValueExpression.java       |  215 ++
 .../myfaces/test/el/ReservedWordsELResolver.java   |  122 +
 .../test/htmlunit/AbstractHtmlUnitTestCase.java    |  331 +++
 .../htmlunit/junit4/AbstractHtmlUnitTestCase.java  |  318 +++
 .../test/jmock/AbstractJmockJsfTestCase.java       |  349 +++
 .../myfaces/test/mock/MockActionListener.java      |   65 +
 .../apache/myfaces/test/mock/MockApplication.java  |   84 +
 .../myfaces/test/mock/MockApplication10.java       |  407 +++
 .../myfaces/test/mock/MockApplication12.java       |  307 +++
 .../myfaces/test/mock/MockApplication20.java       | 1192 +++++++++
 .../myfaces/test/mock/MockApplication22.java       |   62 +
 .../myfaces/test/mock/MockApplicationFactory.java  |   85 +
 .../apache/myfaces/test/mock/MockClientWindow.java |  104 +
 .../myfaces/test/mock/MockClientWindowFactory.java |   91 +
 .../apache/myfaces/test/mock/MockEnumeration.java  |   77 +
 .../myfaces/test/mock/MockExceptionHandler.java    |  220 ++
 .../test/mock/MockExceptionHandlerFactory.java     |   40 +
 .../myfaces/test/mock/MockExternalContext.java     |  110 +
 .../myfaces/test/mock/MockExternalContext10.java   |  540 ++++
 .../myfaces/test/mock/MockExternalContext12.java   |  117 +
 .../myfaces/test/mock/MockExternalContext20.java   |  358 +++
 .../apache/myfaces/test/mock/MockFacesContext.java |  121 +
 .../myfaces/test/mock/MockFacesContext10.java      |  330 +++
 .../myfaces/test/mock/MockFacesContext12.java      |  116 +
 .../myfaces/test/mock/MockFacesContext20.java      |  183 ++
 .../myfaces/test/mock/MockFacesContextFactory.java |  144 ++
 .../org/apache/myfaces/test/mock/MockFlash.java    |  821 ++++++
 .../apache/myfaces/test/mock/MockFlowHandler.java  |   90 +
 .../myfaces/test/mock/MockHttpServletRequest.java  | 1113 ++++++++
 .../myfaces/test/mock/MockHttpServletResponse.java |  480 ++++
 .../apache/myfaces/test/mock/MockHttpSession.java  |  454 ++++
 .../myfaces/test/mock/MockHttpSessionProxy.java    |  205 ++
 .../myfaces/test/mock/MockNavigationHandler.java   |  110 +
 .../myfaces/test/mock/MockPartialViewContext.java  |  375 +++
 .../test/mock/MockPartialViewContextFactory.java   |   41 +
 .../myfaces/test/mock/MockPortletContext.java      |  358 +++
 .../myfaces/test/mock/MockPortletRequest.java      |  436 ++++
 .../myfaces/test/mock/MockPortletResponse.java     |   67 +
 .../myfaces/test/mock/MockPortletSession.java      |  291 +++
 .../apache/myfaces/test/mock/MockPrincipal.java    |   79 +
 .../apache/myfaces/test/mock/MockPrintWriter.java  |   84 +
 .../myfaces/test/mock/MockPropertyResolver.java    |  293 +++
 .../apache/myfaces/test/mock/MockRenderKit.java    |  145 ++
 .../myfaces/test/mock/MockRenderKitFactory.java    |  117 +
 .../myfaces/test/mock/MockRequestDispatcher.java   |   60 +
 .../test/mock/MockResponseStateManager.java        |  396 +++
 .../myfaces/test/mock/MockResponseWriter.java      |  428 ++++
 .../org/apache/myfaces/test/mock/MockServlet.java  |  119 +
 .../myfaces/test/mock/MockServletConfig.java       |  124 +
 .../myfaces/test/mock/MockServletContext.java      |  794 ++++++
 .../myfaces/test/mock/MockServletInputStream.java  |   73 +
 .../myfaces/test/mock/MockServletOutputStream.java |  106 +
 .../myfaces/test/mock/MockServletRegistration.java |  101 +
 .../apache/myfaces/test/mock/MockStateManager.java |  112 +
 .../apache/myfaces/test/mock/MockSubKeyMap.java    |  315 +++
 .../myfaces/test/mock/MockVariableResolver.java    |  161 ++
 .../apache/myfaces/test/mock/MockViewHandler.java  |  170 ++
 .../myfaces/test/mock/MockViewHandler20.java       |   52 +
 .../apache/myfaces/test/mock/MockWebContainer.java |  299 +++
 .../myfaces/test/mock/MockedJsfTestContainer.java  |  414 +++
 .../myfaces/test/mock/_AbstractAttributeMap.java   |  448 ++++
 .../apache/myfaces/test/mock/_ApplicationMap.java  |   78 +
 .../org/apache/myfaces/test/mock/_CookieMap.java   |  167 ++
 .../java/org/apache/myfaces/test/mock/_ELText.java |  444 ++++
 .../java/org/apache/myfaces/test/mock/_Hex.java    |  341 +++
 .../myfaces/test/mock/_InitParameterMap.java       |   80 +
 .../apache/myfaces/test/mock/_NullEnumeration.java |   49 +
 .../myfaces/test/mock/_RequestHeaderMap.java       |   80 +
 .../myfaces/test/mock/_RequestHeaderValuesMap.java |   93 +
 .../org/apache/myfaces/test/mock/_RequestMap.java  |   78 +
 .../myfaces/test/mock/_RequestParameterMap.java    |   67 +
 .../test/mock/_RequestParameterValuesMap.java      |   67 +
 .../org/apache/myfaces/test/mock/_SessionMap.java  |   88 +
 .../mock/lifecycle/ApplyRequestValuesExecutor.java |   45 +
 .../mock/lifecycle/DefaultRestoreViewSupport.java  |  122 +
 .../mock/lifecycle/InvokeApplicationExecutor.java  |   45 +
 .../myfaces/test/mock/lifecycle/MockLifecycle.java |  201 ++
 .../test/mock/lifecycle/MockLifecycleFactory.java  |   87 +
 .../myfaces/test/mock/lifecycle/PhaseExecutor.java |   49 +
 .../test/mock/lifecycle/PhaseListenerManager.java  |  124 +
 .../mock/lifecycle/ProcessValidationsExecutor.java |   43 +
 .../mock/lifecycle/RenderResponseExecutor.java     |   60 +
 .../test/mock/lifecycle/RestoreViewExecutor.java   |  197 ++
 .../test/mock/lifecycle/RestoreViewSupport.java    |   74 +
 .../mock/lifecycle/UpdateModelValuesExecutor.java  |   45 +
 .../resource/MockClassLoaderResourceLoader.java    |  130 +
 .../MockExternalContextResourceLoader.java         |  223 ++
 .../myfaces/test/mock/resource/MockResource.java   |  105 +
 .../test/mock/resource/MockResourceHandler.java    |  401 +++
 .../mock/resource/MockResourceHandlerSupport.java  |  124 +
 .../test/mock/resource/MockResourceLoader.java     |  158 ++
 .../test/mock/resource/MockResourceMeta.java       |  123 +
 .../test/mock/resource/MockSimpleResource.java     |  200 ++
 .../mock/resource/MockSimpleResourceHandler.java   |  410 +++
 .../myfaces/test/mock/visit/FullVisitContext.java  |  148 ++
 .../myfaces/test/mock/visit/MockVisitCallback.java |   41 +
 .../myfaces/test/mock/visit/MockVisitContext.java  |  106 +
 .../test/mock/visit/MockVisitContextFactory.java   |   53 +
 .../test/mock/visit/PartialVisitContext.java       |  469 ++++
 .../apache/myfaces/test/runners/NamedRunner.java   |  126 +
 .../myfaces/test/runners/TestClassLoader.java      |  359 +++
 .../test/runners/TestPerClassLoaderRunner.java     |  299 +++
 .../org/apache/myfaces/test/util/Jsf11Utils.java   |   30 +
 .../org/apache/myfaces/test/util/Jsf12Utils.java   |   39 +
 .../org/apache/myfaces/test/util/JsfVersion.java   |   78 +
 2296 files changed, 115306 insertions(+), 88456 deletions(-)

diff --git a/api/pom.xml b/api/pom.xml
index c831a1c..8c1f104 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -102,7 +102,7 @@
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
                 <configuration>
-                    <excludes>javax/faces/component/**/*.java</excludes>
+                    <excludes>jakarta/faces/component/**/*.java</excludes>
                 </configuration>
             </plugin>
 
@@ -136,7 +136,7 @@
                         <phase>process-resources</phase>
                         <configuration>
                             <descriptor>${basedir}/src/assembler/jsfscripts-uncompressed-compiler.xml</descriptor>
-                            <outputDirectory>${basedir}/target/classes/META-INF/internal-resources/javax.faces/</outputDirectory>
+                            <outputDirectory>${basedir}/target/classes/META-INF/internal-resources/jakarta.faces/</outputDirectory>
                             <excludes>
                                 <exclude>**/myfaces/_impl/core/Impl.js</exclude>
                                 <exclude>**/myfaces/_impl/_util/*</exclude>
@@ -153,7 +153,7 @@
                         <phase>process-resources</phase>
                         <configuration>
                             <descriptor>${basedir}/src/assembler/jsfscripts-uncompressed-full-compiler.xml</descriptor>
-                            <outputDirectory>${basedir}/target/classes/META-INF/internal-resources/javax.faces/</outputDirectory>
+                            <outputDirectory>${basedir}/target/classes/META-INF/internal-resources/jakarta.faces/</outputDirectory>
                             <excludes>
                                 <exclude>**/myfaces/_impl/core/jsf-uncompressed.js</exclude>
                                 <exclude>**/myfaces/_impl/_util/_UnitTest.js</exclude>
@@ -168,7 +168,7 @@
                         <phase>process-resources</phase>
                         <configuration>
                             <descriptor>${basedir}/src/assembler/jsfscripts-minimal-compiler.xml</descriptor>
-                            <outputDirectory>${basedir}/target/classes/META-INF/internal-resources/javax.faces/</outputDirectory>
+                            <outputDirectory>${basedir}/target/classes/META-INF/internal-resources/jakarta.faces/</outputDirectory>
                             <excludes>
                                 <exclude>**/myfaces/_impl/core/jsf-uncompressed.js</exclude>
                                 <exclude>**/myfaces/_impl/_util/_UnitTest.js</exclude>
@@ -183,7 +183,7 @@
                         <phase>process-resources</phase>
                         <configuration>
                             <descriptor>${basedir}/src/assembler/jsfscripts-minimal-modern-compiler.xml</descriptor>
-                            <outputDirectory>${basedir}/target/classes/META-INF/internal-resources/javax.faces/</outputDirectory>
+                            <outputDirectory>${basedir}/target/classes/META-INF/internal-resources/jakarta.faces/</outputDirectory>
                             <excludes>
                                 <exclude>**/myfaces/_impl/core/jsf-uncompressed.js</exclude>
                                 <exclude>**/myfaces/_impl/_util/_UnitTest.js</exclude>
@@ -244,7 +244,7 @@
                         <phase>process-resources</phase>
 
                         <configuration>
-                            <scripts>target/classes/META-INF/resources/javax.faces/</scripts>
+                            <scripts>target/classes/META-INF/resources/jakarta.faces/</scripts>
                             <excludes>
                                 <exclude>jsf-uncompressed.js</exclude>
                                 <exclude>jsf-uncompressed-full.js</exclude>
@@ -279,7 +279,7 @@
                         <phase>process-resources</phase>
 
                         <configuration>
-                            <scripts>target/classes/META-INF/internal-resources/javax.faces/</scripts>
+                            <scripts>target/classes/META-INF/internal-resources/jakarta.faces/</scripts>
                             <excludes>
                                 <exclude>jsf-uncompressed.js</exclude>
                                 <exclude>jsf-uncompressed-full.js</exclude>
@@ -293,7 +293,7 @@
                     <optimizationLevel>0</optimizationLevel>
                     <sourceDirectory>src/main/javascript</sourceDirectory>
                     <webappDirectory>${basedir}</webappDirectory>
-                    <outputDirectory>${basedir}/target/classes/META-INF/resources/javax.faces/</outputDirectory>
+                    <outputDirectory>${basedir}/target/classes/META-INF/resources/jakarta.faces/</outputDirectory>
                 </configuration>
             </plugin>
 
@@ -339,17 +339,17 @@
                     <sources>
                         <source>../../../../test/javascript/org/apache/myfaces/mockups/BrowserMockups.js</source>
                         <!--
-                        <source>javax/faces/_util/OpenAjax.js</source>
+                        <source>jakarta/faces/_util/OpenAjax.js</source>
                         -->
-                        <source>javax/faces/_util/_JSF2Utils.js</source>
-                        <source>javax/faces/ajax/Ajax.js</source>
+                        <source>jakarta/faces/_util/_JSF2Utils.js</source>
+                        <source>jakarta/faces/ajax/Ajax.js</source>
                         <source>../../../../test/javascript/org/apache/myfaces/test/_TestScenario.js</source>
                     </sources>
                     <testSourceDirectory>src/test/javascript/org/apache/myfaces</testSourceDirectory>
                     <reportsDirectory>target/surefire-reports</reportsDirectory>
                     <testSuites>
                         <testSuite>
-                            <name>javax.faces.Ajax</name>
+                            <name>jakarta.faces.Ajax</name>
                             <type>TESTSUITES</type>
                             <includes>
                                 <include>test/MockupTest.js</include>
@@ -417,7 +417,7 @@
                                     javax.servlet.jsp.jstl.sql;version="[1.1.2, 2.0.0)",
                                     javax.servlet.jsp.tagext;version="[2.1.0, 3.2)",
                                     org.apache.commons.logging;version="[1.1.1, 2.0.0)",
-                                    javax.faces.*;version="${project.version}"
+                                    jakarta.faces.*;version="${project.version}"
                                 </Import-Package>
                                 <Require-Bundle>
                                     org.apache.myfaces.core.impl;bundle-version="${parsedVersion.osgiVersion}"
@@ -522,7 +522,7 @@
                             <comparisonArtifacts>
                                 <comparisonArtifact>
                                     <groupId>org.glassfish</groupId>
-                                    <artifactId>javax.faces</artifactId>
+                                    <artifactId>jakarta.faces</artifactId>
                                     <version>2.3.0</version>
                                 </comparisonArtifact>
                             </comparisonArtifacts>
@@ -662,11 +662,6 @@
             <artifactId>junit</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>org.apache.myfaces.test</groupId>
-            <artifactId>myfaces-test23</artifactId>
-        </dependency>
-
         <!-- easymock -->
         <dependency>
             <groupId>org.easymock</groupId>
diff --git a/api/src/main/java/jakarta/faces/FacesException.java b/api/src/main/java/jakarta/faces/FacesException.java
new file mode 100644
index 0000000..0220902
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/FacesException.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces;
+
+/**
+ * see Javadoc of <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.html">JSF Specification</a>
+ */
+public class FacesException extends RuntimeException
+{
+    private static final long serialVersionUID = 6592152487577416317L;
+
+    public FacesException()
+    {
+        super();
+    }
+
+    public FacesException(Throwable cause)
+    {
+        super(cause);
+    }
+
+    public FacesException(String message)
+    {
+        super(message);
+    }
+
+    public FacesException(String message, Throwable cause)
+    {
+        super(message, cause);
+    }
+
+    @Override
+    public Throwable getCause()
+    {
+        return super.getCause();
+    }
+}
diff --git a/api/src/main/java/jakarta/faces/FacesWrapper.java b/api/src/main/java/jakarta/faces/FacesWrapper.java
new file mode 100644
index 0000000..d479b1f
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/FacesWrapper.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces;
+
+/**
+ * Any wrapper class in JSF that must provide access to the object it wraps must implement this interface.
+ * 
+ * @since 2.0
+ */
+public interface FacesWrapper<T>
+{
+    /**
+     * A class that implements this interface uses this method to return an instance of the class being wrapped.
+     * 
+     * @return the instance of the class being wrapped
+     */
+    public T getWrapped();
+}
diff --git a/api/src/main/java/jakarta/faces/FactoryFinder.java b/api/src/main/java/jakarta/faces/FactoryFinder.java
new file mode 100644
index 0000000..ceb6af2
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/FactoryFinder.java
@@ -0,0 +1,817 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces;
+
+import jakarta.faces.application.ApplicationFactory;
+import jakarta.faces.component.search.SearchExpressionContextFactory;
+import jakarta.faces.lifecycle.ClientWindowFactory;
+import jakarta.faces.lifecycle.LifecycleFactory;
+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.FlashFactory;
+import jakarta.faces.context.PartialViewContextFactory;
+import jakarta.faces.flow.FlowHandlerFactory;
+import jakarta.faces.render.RenderKitFactory;
+import jakarta.faces.view.ViewDeclarationLanguageFactory;
+import jakarta.faces.view.facelets.FaceletCacheFactory;
+import jakarta.faces.view.facelets.TagHandlerDelegateFactory;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * see Javadoc of <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.html">JSF Specification</a>
+ */
+public final class FactoryFinder
+{
+    public static final String APPLICATION_FACTORY = "jakarta.faces.application.ApplicationFactory";
+    public static final String EXCEPTION_HANDLER_FACTORY = "jakarta.faces.context.ExceptionHandlerFactory";
+    public static final String EXTERNAL_CONTEXT_FACTORY = "jakarta.faces.context.ExternalContextFactory";
+    public static final String FACES_CONTEXT_FACTORY = "jakarta.faces.context.FacesContextFactory";
+    public static final String LIFECYCLE_FACTORY = "jakarta.faces.lifecycle.LifecycleFactory";
+    public static final String PARTIAL_VIEW_CONTEXT_FACTORY = "jakarta.faces.context.PartialViewContextFactory";
+    public static final String RENDER_KIT_FACTORY = "jakarta.faces.render.RenderKitFactory";
+    public static final String TAG_HANDLER_DELEGATE_FACTORY = "jakarta.faces.view.facelets.TagHandlerDelegateFactory";
+    public static final String VIEW_DECLARATION_LANGUAGE_FACTORY = "jakarta.faces.view.ViewDeclarationLanguageFactory";
+    public static final String VISIT_CONTEXT_FACTORY = "jakarta.faces.component.visit.VisitContextFactory";
+    public static final String FACELET_CACHE_FACTORY = "jakarta.faces.view.facelets.FaceletCacheFactory";
+    public static final String FLASH_FACTORY = "jakarta.faces.context.FlashFactory";
+    public static final String FLOW_HANDLER_FACTORY = "jakarta.faces.flow.FlowHandlerFactory";
+    public static final String CLIENT_WINDOW_FACTORY = "jakarta.faces.lifecycle.ClientWindowFactory";
+    public static final String SEARCH_EXPRESSION_CONTEXT_FACTORY = 
+            "jakarta.faces.component.search.SearchExpressionContextFactory";
+
+    /**
+     * used as a monitor for itself and _factories. Maps in this map are used as monitors for themselves and the
+     * corresponding maps in _factories.
+     */
+    private static Map<ClassLoader, Map<String, List<String>>> registeredFactoryNames
+            = new HashMap<ClassLoader, Map<String, List<String>>>();
+
+    /**
+     * Maps from classLoader to another map, the container (i.e. Tomcat) will create a class loader for each web app
+     * that it controls (typically anyway) and that class loader is used as the key.
+     * 
+     * The secondary map maps the factory name (i.e. FactoryFinder.APPLICATION_FACTORY) to actual instances that are
+     * created via getFactory. The instances will be of the class specified in the setFactory method for the factory
+     * name, i.e. FactoryFinder.setFactory(FactoryFinder.APPLICATION_FACTORY, MyFactory.class).
+     */
+    private static Map<ClassLoader, Map<String, Object>> factories
+            = new HashMap<ClassLoader, Map<String, Object>>();
+
+    private static final Set<String> VALID_FACTORY_NAMES = new HashSet<String>();
+    private static final Map<String, Class<?>> ABSTRACT_FACTORY_CLASSES = new HashMap<String, Class<?>>();
+    private static final ClassLoader MYFACES_CLASSLOADER;
+    
+    private static final String INJECTION_PROVIDER_INSTANCE = "oam.spi.INJECTION_PROVIDER_KEY";
+    private static final String INJECTED_BEAN_STORAGE_KEY = "org.apache.myfaces.spi.BEAN_ENTRY_STORAGE";
+    private static final String BEAN_ENTRY_CLASS_NAME = "org.apache.myfaces.cdi.util.BeanEntry";
+
+    private static final Logger LOGGER = Logger.getLogger(FactoryFinder.class.getName());
+
+    static
+    {
+        VALID_FACTORY_NAMES.add(APPLICATION_FACTORY);
+        VALID_FACTORY_NAMES.add(EXCEPTION_HANDLER_FACTORY);
+        VALID_FACTORY_NAMES.add(EXTERNAL_CONTEXT_FACTORY);
+        VALID_FACTORY_NAMES.add(FACES_CONTEXT_FACTORY);
+        VALID_FACTORY_NAMES.add(LIFECYCLE_FACTORY);
+        VALID_FACTORY_NAMES.add(PARTIAL_VIEW_CONTEXT_FACTORY);
+        VALID_FACTORY_NAMES.add(RENDER_KIT_FACTORY);
+        VALID_FACTORY_NAMES.add(TAG_HANDLER_DELEGATE_FACTORY);
+        VALID_FACTORY_NAMES.add(VIEW_DECLARATION_LANGUAGE_FACTORY);
+        VALID_FACTORY_NAMES.add(VISIT_CONTEXT_FACTORY);
+        VALID_FACTORY_NAMES.add(FACELET_CACHE_FACTORY);
+        VALID_FACTORY_NAMES.add(FLASH_FACTORY);
+        VALID_FACTORY_NAMES.add(FLOW_HANDLER_FACTORY);
+        VALID_FACTORY_NAMES.add(CLIENT_WINDOW_FACTORY);
+        VALID_FACTORY_NAMES.add(SEARCH_EXPRESSION_CONTEXT_FACTORY);
+        
+        ABSTRACT_FACTORY_CLASSES.put(APPLICATION_FACTORY, ApplicationFactory.class);
+        ABSTRACT_FACTORY_CLASSES.put(EXCEPTION_HANDLER_FACTORY, ExceptionHandlerFactory.class);
+        ABSTRACT_FACTORY_CLASSES.put(EXTERNAL_CONTEXT_FACTORY, ExternalContextFactory.class);
+        ABSTRACT_FACTORY_CLASSES.put(FACES_CONTEXT_FACTORY, FacesContextFactory.class);
+        ABSTRACT_FACTORY_CLASSES.put(LIFECYCLE_FACTORY, LifecycleFactory.class);
+        ABSTRACT_FACTORY_CLASSES.put(PARTIAL_VIEW_CONTEXT_FACTORY, PartialViewContextFactory.class);
+        ABSTRACT_FACTORY_CLASSES.put(RENDER_KIT_FACTORY, RenderKitFactory.class);
+        ABSTRACT_FACTORY_CLASSES.put(TAG_HANDLER_DELEGATE_FACTORY, TagHandlerDelegateFactory.class);
+        ABSTRACT_FACTORY_CLASSES.put(VIEW_DECLARATION_LANGUAGE_FACTORY, ViewDeclarationLanguageFactory.class);
+        ABSTRACT_FACTORY_CLASSES.put(VISIT_CONTEXT_FACTORY, VisitContextFactory.class);
+        ABSTRACT_FACTORY_CLASSES.put(FACELET_CACHE_FACTORY, FaceletCacheFactory.class);
+        ABSTRACT_FACTORY_CLASSES.put(FLASH_FACTORY, FlashFactory.class);
+        ABSTRACT_FACTORY_CLASSES.put(FLOW_HANDLER_FACTORY, FlowHandlerFactory.class);
+        ABSTRACT_FACTORY_CLASSES.put(CLIENT_WINDOW_FACTORY, ClientWindowFactory.class);
+        ABSTRACT_FACTORY_CLASSES.put(SEARCH_EXPRESSION_CONTEXT_FACTORY, SearchExpressionContextFactory.class);
+        try
+        {
+            ClassLoader classLoader;
+            if (System.getSecurityManager() != null)
+            {
+                classLoader = (ClassLoader) AccessController.doPrivileged(new java.security.PrivilegedExceptionAction()
+                {
+                    public Object run()
+                    {
+                        return FactoryFinder.class.getClassLoader();
+                    }
+                });
+            }
+            else
+            {
+                classLoader = FactoryFinder.class.getClassLoader();
+            }
+
+            if (classLoader == null)
+            {
+                throw new FacesException("jsf api class loader cannot be identified", null);
+            }
+            MYFACES_CLASSLOADER = classLoader;
+        }
+        catch (Exception e)
+        {
+            throw new FacesException("jsf api class loader cannot be identified", e);
+        }
+    }
+
+    // ~ Start FactoryFinderProvider Support
+    
+    private static Object factoryFinderProviderFactoryInstance;
+    
+    private static volatile boolean initialized = false;
+    
+    private static void initializeFactoryFinderProviderFactory()
+    {
+        if (!initialized)
+        {
+            factoryFinderProviderFactoryInstance = _FactoryFinderProviderFactory.getInstance();
+            initialized = true;
+        }
+    }
+
+    // ~ End FactoryFinderProvider Support
+
+    // avoid instantiation
+    FactoryFinder()
+    {
+    }
+
+    /**
+     * <p>
+     * Create (if necessary) and return a per-web-application instance of the appropriate implementation class for the
+     * specified JavaServer Faces factory class, based on the discovery algorithm described in the class description.
+     * </p>
+     * 
+     * <p>
+     * The standard factories and wrappers in JSF all implement the interface {@link FacesWrapper}. If the returned
+     * <code>Object</code> is an implementation of one of the standard factories, it must be legal to cast it to an
+     * instance of <code>FacesWrapper</code> and call {@link FacesWrapper#getWrapped()} on the instance.
+     * </p>
+     * 
+     * @param factoryName
+     *            Fully qualified name of the JavaServer Faces factory for which an implementation instance is requested
+     * 
+     * @return A per-web-application instance of the appropriate implementation class for the specified JavaServer Faces
+     *         factory class
+     * 
+     * @throws FacesException
+     *             if the web application class loader cannot be identified
+     * @throws FacesException
+     *             if an instance of the configured factory implementation class cannot be loaded
+     * @throws FacesException
+     *             if an instance of the configured factory implementation class cannot be instantiated
+     * @throws IllegalArgumentException
+     *             if <code>factoryname</code> does not identify a standard JavaServer Faces factory name
+     * @throws IllegalStateException
+     *             if there is no configured factory implementation class for the specified factory name
+     * @throws NullPointerException
+     *             if <code>factoryname</code> is null
+     */
+    public static Object getFactory(String factoryName) throws FacesException
+    {
+        if (factoryName == null)
+        {
+            throw new NullPointerException("factoryName may not be null");
+        }
+        
+        initializeFactoryFinderProviderFactory();
+        
+        if (factoryFinderProviderFactoryInstance == null)
+        {
+            // Do the typical stuff
+            return _getFactory(factoryName);
+        }
+        else
+        {
+            try
+            {
+                //Obtain the FactoryFinderProvider instance for this context.
+                Object ffp = _FactoryFinderProviderFactory
+                        .FACTORY_FINDER_PROVIDER_FACTORY_GET_FACTORY_FINDER_METHOD
+                        .invoke(factoryFinderProviderFactoryInstance, null);
+                
+                //Call getFactory method and pass the params
+                return _FactoryFinderProviderFactory
+                        .FACTORY_FINDER_PROVIDER_GET_FACTORY_METHOD.invoke(ffp, factoryName);
+            }
+            catch (InvocationTargetException e)
+            {
+                Throwable targetException = e.getCause();
+                if (targetException instanceof NullPointerException)
+                {
+                    throw (NullPointerException) targetException;
+                }
+                else if (targetException instanceof FacesException)
+                {
+                    throw (FacesException) targetException;
+                }
+                else if (targetException instanceof IllegalArgumentException)
+                {
+                    throw (IllegalArgumentException) targetException;
+                }
+                else if (targetException instanceof IllegalStateException)
+                {
+                    throw (IllegalStateException) targetException;
+                }
+                else if (targetException == null)
+                {
+                    throw new FacesException(e);
+                }
+                else
+                {
+                    throw new FacesException(targetException);
+                }
+            }
+            catch (Exception e)
+            {
+                //No Op
+                throw new FacesException(e);
+            }
+        }
+    }
+
+    private static Object _getFactory(String factoryName) throws FacesException
+    {
+        ClassLoader classLoader = getClassLoader();
+
+        // This code must be synchronized because this could cause a problem when
+        // using update feature each time of myfaces (org.apache.myfaces.CONFIG_REFRESH_PERIOD)
+        // In this moment, a concurrency problem could happen
+        Map<String, List<String>> factoryClassNames = null;
+        Map<String, Object> factoryMap = null;
+
+        synchronized (registeredFactoryNames)
+        {
+            factoryClassNames = registeredFactoryNames.get(classLoader);
+
+            if (factoryClassNames == null)
+            {
+                String message
+                        = "No Factories configured for this Application. This happens if the faces-initialization "
+                        + "does not work at all - make sure that you properly include all configuration "
+                        + "settings necessary for a basic faces application "
+                        + "and that all the necessary libs are included. Also check the logging output of your "
+                        + "web application and your container for any exceptions!"
+                        + "\nIf you did that and find nothing, the mistake might be due to the fact "
+                        + "that you use some special web-containers which "
+                        + "do not support registering context-listeners via TLD files and "
+                        + "a context listener is not setup in your web.xml.\n"
+                        + "A typical config looks like this;\n<listener>\n"
+                        + "  <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>\n"
+                        + "</listener>\n";
+                throw new IllegalStateException(message);
+            }
+
+            if (!factoryClassNames.containsKey(factoryName))
+            {
+                throw new IllegalArgumentException("no factory " + factoryName + " configured for this application.");
+            }
+
+            factoryMap = factories.get(classLoader);
+
+            if (factoryMap == null)
+            {
+                factoryMap = new HashMap<String, Object>();
+                factories.put(classLoader, factoryMap);
+            }
+        }
+
+        List beanEntryStorage;
+
+        synchronized (factoryClassNames)
+        {
+            beanEntryStorage = (List)factoryMap.get(INJECTED_BEAN_STORAGE_KEY);
+
+            if (beanEntryStorage == null)
+            {
+                beanEntryStorage = new CopyOnWriteArrayList();
+                factoryMap.put(INJECTED_BEAN_STORAGE_KEY, beanEntryStorage);
+            }
+        }
+
+        List<String> classNames;
+        Object factory;
+        Object injectionProvider;
+        synchronized (factoryClassNames)
+        {
+            factory = factoryMap.get(factoryName);
+            if (factory != null)
+            {
+                return factory;
+            }
+
+            classNames = factoryClassNames.get(factoryName);
+            
+            injectionProvider = factoryMap.get(INJECTION_PROVIDER_INSTANCE);
+        }
+
+        if (injectionProvider == null)
+        {
+            injectionProvider = getInjectionProvider();
+            synchronized (factoryClassNames)
+            {
+                factoryMap.put(INJECTION_PROVIDER_INSTANCE, injectionProvider);
+            }
+        }
+
+        // release lock while calling out
+        factory = newFactoryInstance(ABSTRACT_FACTORY_CLASSES.get(factoryName), 
+            classNames.iterator(), classLoader, injectionProvider, beanEntryStorage);
+
+        synchronized (factoryClassNames)
+        {
+            // check if someone else already installed the factory
+            if (factoryMap.get(factoryName) == null)
+            {
+                factoryMap.put(factoryName, factory);
+            }
+        }
+
+        return factory;
+    }
+    
+    private static Object getInjectionProvider()
+    {
+        try
+        {
+            // Remember the first call in a webapp over FactoryFinder.getFactory(...) comes in the 
+            // initialization block, so there is a startup FacesContext active and
+            // also a valid startup ExternalContext. Note after that, we need to cache
+            // the injection provider for the classloader, because in a normal
+            // request there is no active FacesContext in the moment and this call will
+            // surely fail.
+            FacesContext facesContext = FacesContext.getCurrentInstance();
+            if (facesContext != null)
+            {
+                Object injectionProviderFactory =
+                    _FactoryFinderProviderFactory.INJECTION_PROVIDER_FACTORY_GET_INSTANCE_METHOD
+                        .invoke(_FactoryFinderProviderFactory.INJECTION_PROVIDER_CLASS);
+                Object injectionProvider = 
+                    _FactoryFinderProviderFactory.INJECTION_PROVIDER_FACTORY_GET_INJECTION_PROVIDER_METHOD
+                        .invoke(injectionProviderFactory, facesContext.getExternalContext());
+                return injectionProvider;
+            }
+        }
+        catch (Exception e)
+        {
+        }
+        return null;
+    }
+    
+    private static void injectAndPostConstruct(Object injectionProvider, Object instance, List injectedBeanStorage)
+    {
+        if (injectionProvider != null)
+        {
+            try
+            {
+                Object creationMetaData = _FactoryFinderProviderFactory.INJECTION_PROVIDER_INJECT_METHOD.invoke(
+                    injectionProvider, instance);
+
+                addBeanEntry(instance, creationMetaData, injectedBeanStorage);
+
+                _FactoryFinderProviderFactory.INJECTION_PROVIDER_POST_CONSTRUCT_METHOD.invoke(
+                    injectionProvider, instance, creationMetaData);
+            }
+            catch (Exception ex)
+            {
+                throw new FacesException(ex);
+            }
+        }
+    }
+    
+    private static void preDestroy(Object injectionProvider, Object beanEntry)
+    {
+        if (injectionProvider != null)
+        {
+            try
+            {
+                _FactoryFinderProviderFactory.INJECTION_PROVIDER_PRE_DESTROY_METHOD.invoke(
+                    injectionProvider, getInstance(beanEntry), getCreationMetaData(beanEntry));
+            }
+            catch (Exception ex)
+            {
+                throw new FacesException(ex);
+            }
+        }
+    }
+
+    private static Object getInstance(Object beanEntry)
+    {
+        try
+        {
+            Method getterMethod = getMethod(beanEntry, "getInstance");
+            return getterMethod.invoke(beanEntry);
+        }
+        catch (Exception e)
+        {
+            throw new IllegalStateException(e);
+        }
+    }
+
+    private static Object getCreationMetaData(Object beanEntry)
+    {
+        try
+        {
+            Method getterMethod = getMethod(beanEntry, "getCreationMetaData");
+            return getterMethod.invoke(beanEntry);
+        }
+        catch (Exception e)
+        {
+            throw new IllegalStateException(e);
+        }
+    }
+
+    private static Method getMethod(Object beanEntry, String methodName) throws NoSuchMethodException
+    {
+        return beanEntry.getClass().getDeclaredMethod(methodName);
+    }
+
+    private static void addBeanEntry(Object instance, Object creationMetaData, List injectedBeanStorage)
+    {
+        try
+        {
+            Class<?> beanEntryClass = _FactoryFinderProviderFactory.classForName(BEAN_ENTRY_CLASS_NAME);
+            Constructor beanEntryConstructor = beanEntryClass.getDeclaredConstructor(Object.class, Object.class);
+
+            Object result = beanEntryConstructor.newInstance(instance, creationMetaData);
+            injectedBeanStorage.add(result);
+        }
+        catch (Exception e)
+        {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private static Object newFactoryInstance(Class<?> interfaceClass, Iterator<String> classNamesIterator,
+                                             ClassLoader classLoader, Object injectionProvider,
+                                             List injectedBeanStorage)
+    {
+        try
+        {
+            Object current = null;
+            
+            while (classNamesIterator.hasNext())
+            {
+                String implClassName = classNamesIterator.next();
+                Class<?> implClass = null;
+                try
+                {
+                    implClass = classLoader.loadClass(implClassName);
+                }
+                catch (ClassNotFoundException e)
+                {
+                    implClass = MYFACES_CLASSLOADER.loadClass(implClassName);
+                }
+
+                // check, if class is of expected interface type
+                if (!interfaceClass.isAssignableFrom(implClass))
+                {
+                    throw new IllegalArgumentException("Class " + implClassName + " is no " + interfaceClass.getName());
+                }
+
+                if (current == null)
+                {
+                    // nothing to decorate
+                    current = implClass.newInstance();
+                    injectAndPostConstruct(injectionProvider, current, injectedBeanStorage);
+                }
+                else
+                {
+                    // let's check if class supports the decorator pattern
+                    try
+                    {
+                        Constructor<?> delegationConstructor = implClass.getConstructor(new Class[] { interfaceClass });
+                        // impl class supports decorator pattern,
+                        try
+                        {
+                            // create new decorator wrapping current
+                            current = delegationConstructor.newInstance(new Object[] { current });
+                            injectAndPostConstruct(injectionProvider, current, injectedBeanStorage);
+                        }
+                        catch (InstantiationException e)
+                        {
+                            throw new FacesException(e);
+                        }
+                        catch (IllegalAccessException e)
+                        {
+                            throw new FacesException(e);
+                        }
+                        catch (InvocationTargetException e)
+                        {
+                            throw new FacesException(e);
+                        }
+                    }
+                    catch (NoSuchMethodException e)
+                    {
+                        // no decorator pattern support
+                        current = implClass.newInstance();
+                        injectAndPostConstruct(injectionProvider, current, injectedBeanStorage);
+                    }
+                }
+            }
+
+            return current;
+        }
+        catch (ClassNotFoundException e)
+        {
+            throw new FacesException(e);
+        }
+        catch (InstantiationException e)
+        {
+            throw new FacesException(e);
+        }
+        catch (IllegalAccessException e)
+        {
+            throw new FacesException(e);
+        }
+    }
+
+    public static void setFactory(String factoryName, String implName)
+    {
+        if (factoryName == null)
+        {
+            throw new NullPointerException("factoryName may not be null");
+        }
+        
+        initializeFactoryFinderProviderFactory();
+        
+        if (factoryFinderProviderFactoryInstance == null)
+        {
+            // Do the typical stuff
+            _setFactory(factoryName, implName);
+        }
+        else
+        {
+            try
+            {
+                //Obtain the FactoryFinderProvider instance for this context.
+                Object ffp = _FactoryFinderProviderFactory
+                        .FACTORY_FINDER_PROVIDER_FACTORY_GET_FACTORY_FINDER_METHOD
+                        .invoke(factoryFinderProviderFactoryInstance, null);
+                
+                //Call getFactory method and pass the params
+                _FactoryFinderProviderFactory
+                        .FACTORY_FINDER_PROVIDER_SET_FACTORY_METHOD.invoke(ffp, factoryName, implName);
+            }
+            catch (InvocationTargetException e)
+            {
+                Throwable targetException = e.getCause();
+                if (targetException instanceof NullPointerException)
+                {
+                    throw (NullPointerException) targetException;
+                }
+                else if (targetException instanceof FacesException)
+                {
+                    throw (FacesException) targetException;
+                }
+                else if (targetException instanceof IllegalArgumentException)
+                {
+                    throw (IllegalArgumentException) targetException;
+                }
+                else if (targetException == null)
+                {
+                    throw new FacesException(e);
+                }
+                else
+                {
+                    throw new FacesException(targetException);
+                }
+            }
+            catch (Exception e)
+            {
+                //No Op
+                throw new FacesException(e);
+            }
+            
+        }
+    }
+
+    private static void _setFactory(String factoryName, String implName)
+    {
+        checkFactoryName(factoryName);
+
+        ClassLoader classLoader = getClassLoader();
+        Map<String, List<String>> factoryClassNames = null;
+        synchronized (registeredFactoryNames)
+        {
+            Map<String, Object> factories = FactoryFinder.factories.get(classLoader);
+
+            if (factories != null && factories.containsKey(factoryName))
+            {
+                // Javadoc says ... This method has no effect if getFactory() has already been
+                // called looking for a factory for this factoryName.
+                return;
+            }
+
+            factoryClassNames = registeredFactoryNames.get(classLoader);
+
+            if (factoryClassNames == null)
+            {
+                factoryClassNames = new HashMap<String, List<String>>();
+                registeredFactoryNames.put(classLoader, factoryClassNames);
+            }
+        }
+
+        synchronized (factoryClassNames)
+        {
+            List<String> classNameList = factoryClassNames.get(factoryName);
+
+            if (classNameList == null)
+            {
+                classNameList = new ArrayList<String>();
+                factoryClassNames.put(factoryName, classNameList);
+            }
+
+            classNameList.add(implName);
+        }
+    }
+
+    public static void releaseFactories() throws FacesException
+    {
+        initializeFactoryFinderProviderFactory();
+        
+        if (factoryFinderProviderFactoryInstance == null)
+        {
+            // Do the typical stuff
+            _releaseFactories();
+        }
+        else
+        {
+            try
+            {
+                //Obtain the FactoryFinderProvider instance for this context.
+                Object ffp = _FactoryFinderProviderFactory
+                        .FACTORY_FINDER_PROVIDER_FACTORY_GET_FACTORY_FINDER_METHOD
+                        .invoke(factoryFinderProviderFactoryInstance, null);
+                
+                //Call getFactory method and pass the params
+                _FactoryFinderProviderFactory.FACTORY_FINDER_PROVIDER_RELEASE_FACTORIES_METHOD.invoke(ffp, null);
+            }
+            catch (InvocationTargetException e)
+            {
+                Throwable targetException = e.getCause();
+                if (targetException instanceof FacesException)
+                {
+                    throw (FacesException) targetException;
+                }
+                else if (targetException == null)
+                {
+                    throw new FacesException(e);
+                }
+                else
+                {
+                    throw new FacesException(targetException);
+                }
+            }
+            catch (Exception e)
+            {
+                //No Op
+                throw new FacesException(e);
+            }
+            
+        }
+    }
+
+    private static void _releaseFactories() throws FacesException
+    {
+        ClassLoader classLoader = getClassLoader();
+
+        Map<String, Object> factoryMap;
+        // This code must be synchronized
+        synchronized (registeredFactoryNames)
+        {
+            factoryMap = factories.remove(classLoader);
+
+            // _registeredFactoryNames has as value type Map<String,List> and this must
+            // be cleaned before release (for gc).
+            Map<String, List<String>> factoryClassNames = registeredFactoryNames.get(classLoader);
+            if (factoryClassNames != null)
+            {
+                factoryClassNames.clear();
+            }
+
+            registeredFactoryNames.remove(classLoader);
+        }
+
+        if (factoryMap != null)
+        {
+            Object injectionProvider = factoryMap.remove(INJECTION_PROVIDER_INSTANCE);
+            if (injectionProvider != null)
+            {
+                List injectedBeanStorage = (List)factoryMap.get(INJECTED_BEAN_STORAGE_KEY);
+
+                FacesException firstException = null;
+                for (Object entry : injectedBeanStorage)
+                {
+                    try
+                    {
+                        preDestroy(injectionProvider, entry);
+                    }
+                    catch (FacesException e)
+                    {
+                        LOGGER.log(Level.SEVERE, "#preDestroy failed", e);
+
+                        if (firstException == null)
+                        {
+                            firstException = e; //all preDestroy callbacks need to get invoked
+                        }
+                    }
+                }
+                injectedBeanStorage.clear();
+
+                if (firstException != null)
+                {
+                    throw firstException;
+                }
+            }
+        }
+    }
+
+    private static void checkFactoryName(String factoryName)
+    {
+        if (!VALID_FACTORY_NAMES.contains(factoryName))
+        {
+            throw new IllegalArgumentException("factoryName '" + factoryName + "'");
+        }
+    }
+
+    private static ClassLoader getClassLoader()
+    {
+        try
+        {
+            ClassLoader classLoader = null;
+            if (System.getSecurityManager() != null)
+            {
+                classLoader = (ClassLoader) AccessController.doPrivileged(new java.security.PrivilegedExceptionAction()
+                {
+                    public Object run()
+                    {
+                        return Thread.currentThread().getContextClassLoader();
+                    }
+                });
+            }
+            else
+            {
+                classLoader = Thread.currentThread().getContextClassLoader();
+            }
+            
+            if (classLoader == null)
+            {
+                throw new FacesException("web application class loader cannot be identified", null);
+            }
+            return classLoader;
+        }
+        catch (Exception e)
+        {
+            throw new FacesException("web application class loader cannot be identified", e);
+        }
+    }
+}
diff --git a/api/src/main/java/jakarta/faces/_FactoryFinderProviderFactory.java b/api/src/main/java/jakarta/faces/_FactoryFinderProviderFactory.java
new file mode 100644
index 0000000..6e4856d
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/_FactoryFinderProviderFactory.java
@@ -0,0 +1,238 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces;
+
+import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import jakarta.faces.context.ExternalContext;
+
+/**
+ * Provide utility methods used by FactoryFinder class to lookup for SPI interface FactoryFinderProvider.
+ *
+ * @since 2.0.5
+ */
+class _FactoryFinderProviderFactory
+{
+
+    public static final String FACTORY_FINDER_PROVIDER_FACTORY_CLASS_NAME = "org.apache.myfaces.spi" +
+            ".FactoryFinderProviderFactory";
+
+    public static final String FACTORY_FINDER_PROVIDER_CLASS_NAME = "org.apache.myfaces.spi.FactoryFinderProvider";
+
+    public static final String INJECTION_PROVIDER_FACTORY_CLASS_NAME = 
+        "org.apache.myfaces.spi.InjectionProviderFactory";
+
+    public static final String INJECTION_PROVIDER_CLASS_NAME = "org.apache.myfaces.spi.InjectionProvider";
+    
+    public static final Class<?> FACTORY_FINDER_PROVIDER_FACTORY_CLASS;
+
+    public static final Method FACTORY_FINDER_PROVIDER_GET_INSTANCE_METHOD;
+
+    public static final Method FACTORY_FINDER_PROVIDER_FACTORY_GET_FACTORY_FINDER_METHOD;
+    public static final Class<?> FACTORY_FINDER_PROVIDER_CLASS;
+    public static final Method FACTORY_FINDER_PROVIDER_GET_FACTORY_METHOD;
+    public static final Method FACTORY_FINDER_PROVIDER_SET_FACTORY_METHOD;
+    public static final Method FACTORY_FINDER_PROVIDER_RELEASE_FACTORIES_METHOD;
+    
+    public static final Class<?> INJECTION_PROVIDER_FACTORY_CLASS;
+    public static final Method INJECTION_PROVIDER_FACTORY_GET_INSTANCE_METHOD;
+    public static final Method INJECTION_PROVIDER_FACTORY_GET_INJECTION_PROVIDER_METHOD;
+    public static final Class<?> INJECTION_PROVIDER_CLASS;
+    public static final Method INJECTION_PROVIDER_INJECT_METHOD;
+    public static final Method INJECTION_PROVIDER_POST_CONSTRUCT_METHOD;
+    public static final Method INJECTION_PROVIDER_PRE_DESTROY_METHOD;
+
+    static
+    {
+        Class factoryFinderFactoryClass = null;
+        Method factoryFinderproviderFactoryGetMethod = null;
+        Method factoryFinderproviderFactoryGetFactoryFinderMethod = null;
+        Class<?> factoryFinderProviderClass = null;
+
+        Method factoryFinderProviderGetFactoryMethod = null;
+        Method factoryFinderProviderSetFactoryMethod = null;
+        Method factoryFinderProviderReleaseFactoriesMethod = null;
+        
+        Class injectionProviderFactoryClass = null;
+        Method injectionProviderFactoryGetInstanceMethod = null;
+        Method injectionProviderFactoryGetInjectionProviderMethod = null;
+        Class injectionProviderClass = null;
+        Method injectionProviderInjectMethod = null;
+        Method injectionProviderPostConstructMethod = null;
+        Method injectionProviderPreDestroyMethod = null;
+
+        try
+        {
+            factoryFinderFactoryClass = classForName(FACTORY_FINDER_PROVIDER_FACTORY_CLASS_NAME);
+            if (factoryFinderFactoryClass != null)
+            {
+                factoryFinderproviderFactoryGetMethod = factoryFinderFactoryClass.getMethod
+                        ("getInstance", null);
+                factoryFinderproviderFactoryGetFactoryFinderMethod = factoryFinderFactoryClass
+                        .getMethod("getFactoryFinderProvider", null);
+            }
+
+            factoryFinderProviderClass = classForName(FACTORY_FINDER_PROVIDER_CLASS_NAME);
+            if (factoryFinderProviderClass != null)
+            {
+                factoryFinderProviderGetFactoryMethod = factoryFinderProviderClass.getMethod("getFactory",
+                        new Class[]{String.class});
+                factoryFinderProviderSetFactoryMethod = factoryFinderProviderClass.getMethod("setFactory",
+                        new Class[]{String.class, String.class});
+                factoryFinderProviderReleaseFactoriesMethod = factoryFinderProviderClass.getMethod
+                        ("releaseFactories", null);
+            }
+            
+            injectionProviderFactoryClass = classForName(INJECTION_PROVIDER_FACTORY_CLASS_NAME);
+            
+            if (injectionProviderFactoryClass != null)
+            {
+                injectionProviderFactoryGetInstanceMethod = injectionProviderFactoryClass.
+                    getMethod("getInjectionProviderFactory", null);
+                injectionProviderFactoryGetInjectionProviderMethod = injectionProviderFactoryClass.
+                    getMethod("getInjectionProvider", ExternalContext.class);
+            }
+            
+            injectionProviderClass = classForName(INJECTION_PROVIDER_CLASS_NAME);
+            
+            if (injectionProviderClass != null)
+            {
+                injectionProviderInjectMethod = injectionProviderClass.
+                    getMethod("inject", Object.class);
+                injectionProviderPostConstructMethod = injectionProviderClass.
+                    getMethod("postConstruct", Object.class, Object.class);
+                injectionProviderPreDestroyMethod = injectionProviderClass.
+                    getMethod("preDestroy", Object.class, Object.class);
+            }
+        }
+        catch (Exception e)
+        {
+            // no op
+        }
+
+        FACTORY_FINDER_PROVIDER_FACTORY_CLASS = factoryFinderFactoryClass;
+        FACTORY_FINDER_PROVIDER_GET_INSTANCE_METHOD = factoryFinderproviderFactoryGetMethod;
+        FACTORY_FINDER_PROVIDER_FACTORY_GET_FACTORY_FINDER_METHOD = factoryFinderproviderFactoryGetFactoryFinderMethod;
+        FACTORY_FINDER_PROVIDER_CLASS = factoryFinderProviderClass;
+
+        FACTORY_FINDER_PROVIDER_GET_FACTORY_METHOD = factoryFinderProviderGetFactoryMethod;
+        FACTORY_FINDER_PROVIDER_SET_FACTORY_METHOD = factoryFinderProviderSetFactoryMethod;
+        FACTORY_FINDER_PROVIDER_RELEASE_FACTORIES_METHOD = factoryFinderProviderReleaseFactoriesMethod;
+        
+        INJECTION_PROVIDER_FACTORY_CLASS = injectionProviderFactoryClass;
+        INJECTION_PROVIDER_FACTORY_GET_INSTANCE_METHOD = injectionProviderFactoryGetInstanceMethod;
+        INJECTION_PROVIDER_FACTORY_GET_INJECTION_PROVIDER_METHOD = injectionProviderFactoryGetInjectionProviderMethod;
+        INJECTION_PROVIDER_CLASS = injectionProviderClass;
+        INJECTION_PROVIDER_INJECT_METHOD = injectionProviderInjectMethod;
+        INJECTION_PROVIDER_POST_CONSTRUCT_METHOD = injectionProviderPostConstructMethod;
+        INJECTION_PROVIDER_PRE_DESTROY_METHOD = injectionProviderPreDestroyMethod;
+    }
+
+    public static Object getInstance()
+    {
+        if (FACTORY_FINDER_PROVIDER_GET_INSTANCE_METHOD != null)
+        {
+            try
+            {
+                return FACTORY_FINDER_PROVIDER_GET_INSTANCE_METHOD.invoke(FACTORY_FINDER_PROVIDER_FACTORY_CLASS, null);
+            }
+            catch (Exception e)
+            {
+                //No op
+                Logger log = Logger.getLogger(_FactoryFinderProviderFactory.class.getName());
+                if (log.isLoggable(Level.WARNING))
+                {
+                    log.log(Level.WARNING, "Cannot retrieve current FactoryFinder instance from " +
+                            "FactoryFinderProviderFactory." +
+                            " Default strategy using thread context class loader will be used.", e);
+                }
+            }
+        }
+        return null;
+    }
+
+    // ~ Methods Copied from _ClassUtils
+    // ------------------------------------------------------------------------------------
+
+    /**
+     * Tries a Class.loadClass with the context class loader of the current thread first and automatically falls back
+     * to
+     * the ClassUtils class loader (i.e. the loader of the myfaces.jar lib) if necessary.
+     *
+     * @param type fully qualified name of a non-primitive non-array class
+     * @return the corresponding Class
+     * @throws NullPointerException   if type is null
+     * @throws ClassNotFoundException
+     */
+    public static Class<?> classForName(String type) throws ClassNotFoundException
+    {
+        if (type == null)
+        {
+            throw new NullPointerException("type");
+        }
+        try
+        {
+            // Try WebApp ClassLoader first
+            return Class.forName(type, false, // do not initialize for faster startup
+                    getContextClassLoader());
+        }
+        catch (ClassNotFoundException ignore)
+        {
+            // fallback: Try ClassLoader for ClassUtils (i.e. the myfaces.jar lib)
+            return Class.forName(type, false, // do not initialize for faster startup
+                    _FactoryFinderProviderFactory.class.getClassLoader());
+        }
+    }
+
+    /**
+     * Gets the ClassLoader associated with the current thread. Returns the class loader associated with the specified
+     * default object if no context loader is associated with the current thread.
+     *
+     * @return ClassLoader
+     */
+    protected static ClassLoader getContextClassLoader()
+    {
+        if (System.getSecurityManager() != null)
+        {
+            try
+            {
+                Object cl = AccessController.doPrivileged(new PrivilegedExceptionAction()
+                {
+                    public Object run() throws PrivilegedActionException
+                    {
+                        return Thread.currentThread().getContextClassLoader();
+                    }
+                });
+                return (ClassLoader) cl;
+            }
+            catch (PrivilegedActionException pae)
+            {
+                throw new FacesException(pae);
+            }
+        }
+        else
+        {
+            return Thread.currentThread().getContextClassLoader();
+        }
+    }
+}
diff --git a/api/src/main/java/jakarta/faces/annotation/ApplicationMap.java b/api/src/main/java/jakarta/faces/annotation/ApplicationMap.java
new file mode 100644
index 0000000..634ac98
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/annotation/ApplicationMap.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+
+/**
+ *
+ */
+@Qualifier
+@Retention(value=RUNTIME)
+@Target(value={ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
+public @interface ApplicationMap
+{
+    
+}
diff --git a/api/src/main/java/jakarta/faces/annotation/FacesConfig.java b/api/src/main/java/jakarta/faces/annotation/FacesConfig.java
new file mode 100644
index 0000000..729f97c
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/annotation/FacesConfig.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import javax.enterprise.util.Nonbinding;
+import javax.inject.Qualifier;
+
+/**
+ *
+ */
+@Qualifier
+@Target(value=ElementType.TYPE)
+@Retention(value=RetentionPolicy.RUNTIME)
+public @interface FacesConfig
+{
+    
+    @Nonbinding Version version() default Version.JSF_2_3;
+
+    public static enum Version 
+    {
+        JSF_2_3
+    }
+}
diff --git a/api/src/main/java/jakarta/faces/annotation/FlowMap.java b/api/src/main/java/jakarta/faces/annotation/FlowMap.java
new file mode 100644
index 0000000..464534c
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/annotation/FlowMap.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+
+/**
+ *
+ */
+@Qualifier
+@Retention(value=RUNTIME)
+@Target(value={ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
+public @interface FlowMap
+{
+    
+}
diff --git a/api/src/main/java/jakarta/faces/annotation/HeaderMap.java b/api/src/main/java/jakarta/faces/annotation/HeaderMap.java
new file mode 100644
index 0000000..486b36c
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/annotation/HeaderMap.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+
+/**
+ *
+ */
+@Qualifier
+@Retention(value=RUNTIME)
+@Target(value={ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
+public @interface HeaderMap
+{
+    
+}
diff --git a/api/src/main/java/jakarta/faces/annotation/HeaderValuesMap.java b/api/src/main/java/jakarta/faces/annotation/HeaderValuesMap.java
new file mode 100644
index 0000000..9ddfb21
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/annotation/HeaderValuesMap.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+
+/**
+ *
+ */
+@Qualifier
+@Retention(value=RUNTIME)
+@Target(value={ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
+public @interface HeaderValuesMap
+{
+    
+}
diff --git a/api/src/main/java/jakarta/faces/annotation/InitParameterMap.java b/api/src/main/java/jakarta/faces/annotation/InitParameterMap.java
new file mode 100644
index 0000000..1789117
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/annotation/InitParameterMap.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+
+/**
+ *
+ */
+@Qualifier
+@Retention(value=RUNTIME)
+@Target(value={ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
+public @interface InitParameterMap
+{
+    
+}
diff --git a/api/src/main/java/jakarta/faces/annotation/ManagedProperty.java b/api/src/main/java/jakarta/faces/annotation/ManagedProperty.java
new file mode 100644
index 0000000..0a3c4ab
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/annotation/ManagedProperty.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+
+/**
+ *
+ */
+@Qualifier
+@Target(value=ElementType.FIELD)
+@Retention(value=RetentionPolicy.RUNTIME)
+public @interface ManagedProperty
+{
+    public String value();
+}
diff --git a/api/src/main/java/jakarta/faces/annotation/RequestCookieMap.java b/api/src/main/java/jakarta/faces/annotation/RequestCookieMap.java
new file mode 100644
index 0000000..2890e4a
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/annotation/RequestCookieMap.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+
+/**
+ *
+ */
+@Qualifier
+@Retention(value=RUNTIME)
+@Target(value={ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
+public @interface RequestCookieMap
+{
+    
+}
diff --git a/api/src/main/java/jakarta/faces/annotation/RequestMap.java b/api/src/main/java/jakarta/faces/annotation/RequestMap.java
new file mode 100644
index 0000000..5de39f0
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/annotation/RequestMap.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+
+/**
+ *
+ */
+@Qualifier
+@Retention(value=RUNTIME)
+@Target(value={ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
+public @interface RequestMap
+{
+    
+}
diff --git a/api/src/main/java/jakarta/faces/annotation/RequestParameterMap.java b/api/src/main/java/jakarta/faces/annotation/RequestParameterMap.java
new file mode 100644
index 0000000..2a1291c
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/annotation/RequestParameterMap.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+
+/**
+ *
+ */
+@Qualifier
+@Retention(value=RUNTIME)
+@Target(value={ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
+public @interface RequestParameterMap
+{
+    
+}
diff --git a/api/src/main/java/jakarta/faces/annotation/RequestParameterValuesMap.java b/api/src/main/java/jakarta/faces/annotation/RequestParameterValuesMap.java
new file mode 100644
index 0000000..17116c3
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/annotation/RequestParameterValuesMap.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+
+/**
+ *
+ */
+@Qualifier
+@Retention(value=RUNTIME)
+@Target(value={ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
+public @interface RequestParameterValuesMap
+{
+    
+}
diff --git a/api/src/main/java/jakarta/faces/annotation/SessionMap.java b/api/src/main/java/jakarta/faces/annotation/SessionMap.java
new file mode 100644
index 0000000..4038700
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/annotation/SessionMap.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+
+/**
+ *
+ */
+@Qualifier
+@Retention(value=RUNTIME)
+@Target(value={ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
+public @interface SessionMap
+{
+    
+}
diff --git a/api/src/main/java/jakarta/faces/annotation/ViewMap.java b/api/src/main/java/jakarta/faces/annotation/ViewMap.java
new file mode 100644
index 0000000..830559c
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/annotation/ViewMap.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+
+/**
+ *
+ */
+@Qualifier
+@Retention(value=RUNTIME)
+@Target(value={ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
+public @interface ViewMap
+{
+    
+}
diff --git a/api/src/main/java/jakarta/faces/application/Application.java b/api/src/main/java/jakarta/faces/application/Application.java
new file mode 100644
index 0000000..0da320f
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/Application.java
@@ -0,0 +1,1311 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import jakarta.faces.component.behavior.Behavior;
+import jakarta.faces.component.search.SearchExpressionHandler;
+import jakarta.faces.component.search.SearchKeywordResolver;
+import jakarta.faces.event.ActionListener;
+import jakarta.faces.event.SystemEvent;
+import jakarta.faces.event.SystemEventListener;
+import jakarta.faces.validator.Validator;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.ResourceBundle;
+
+import javax.el.ELContextListener;
+import javax.el.ELException;
+import javax.el.ELResolver;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+import jakarta.faces.FacesException;
+import jakarta.faces.component.UIComponent;
+import jakarta.faces.context.ExternalContext;
+import jakarta.faces.context.FacesContext;
+import jakarta.faces.convert.Converter;
+import jakarta.faces.el.MethodBinding;
+import jakarta.faces.el.PropertyResolver;
+import jakarta.faces.el.ReferenceSyntaxException;
+import jakarta.faces.el.ValueBinding;
+import jakarta.faces.el.VariableResolver;
+import jakarta.faces.flow.FlowHandler;
+
+/**
+ * <p>
+ * Application represents a per-web-application singleton object where applications based on JavaServer Faces (or
+ * implementations wishing to provide extended functionality) can register application-wide singletons that provide
+ * functionality required by JavaServer Faces. Default implementations of each object are provided for cases where the
+ * application does not choose to customize the behavior.
+ * </p>
+ * 
+ * <p>
+ * The instance of {@link Application} is created by calling the <code>getApplication()</code> method of
+ * {@link ApplicationFactory}. Because this instance is shared, it must be implemented in a thread-safe manner.
+ * </p>
+ * 
+ * Holds webapp-wide resources for a JSF application. There is a single one of these for a web application, accessable
+ * via
+ * 
+ * <pre>
+ * FacesContext.getCurrentInstance().getApplication()
+ * </pre>
+ * 
+ * In particular, this provides a factory for UIComponent objects. It also provides convenience methods for creating
+ * ValueBinding objects.
+ * 
+ * See Javadoc of <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.html">JSF Specification</a>
+ */
+@SuppressWarnings("deprecation")
+public abstract class Application
+{
+
+    /**
+     * Retrieve the current Myfaces Application Instance, lookup
+     * on the application map. All methods introduced on jsf 1.2
+     * for Application interface should thrown by default
+     * UnsupportedOperationException, but the ri scan and find the
+     * original Application impl, and redirect the call to that
+     * method instead throwing it, allowing application implementations
+     * created before jsf 1.2 continue working.   
+     * 
+     * Note: every method, which uses getMyfacesApplicationInstance() to
+     *       delegate itself to the current ApplicationImpl MUST be
+     *       overriden by the current ApplicationImpl to prevent infinite loops. 
+     */
+    private Application getMyfacesApplicationInstance()
+    {
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        if (facesContext != null)
+        {
+            ExternalContext externalContext = facesContext.getExternalContext();
+            if (externalContext != null)
+            {
+                return (Application) externalContext.getApplicationMap().get(
+                                "org.apache.myfaces.application.ApplicationImpl");
+            }
+        }
+        return null;
+    }
+
+    private Application getMyfacesApplicationInstance(FacesContext facesContext)
+    {
+        if (facesContext != null)
+        {
+            ExternalContext externalContext = facesContext.getExternalContext();
+            if (externalContext != null)
+            {
+                return (Application) externalContext.getApplicationMap().get(
+                                "org.apache.myfaces.application.ApplicationImpl");
+            }
+        }
+        return null;
+    }
+
+    // The concrete methods throwing UnsupportedOperationExceptiom were added for JSF 1.2.
+    // They supply default to allows old Application implementations to still work.
+
+    /**
+     * @since 2.0
+     * 
+     * FIXME: Notify EG, this should not be abstract and throw UnsupportedOperationException
+     * 
+     * @param behaviorId
+     * @param behaviorClass 
+     */
+    public void addBehavior(String behaviorId, String behaviorClass)
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            application.addBehavior(behaviorId, behaviorClass);
+            return;
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Define a new mapping from a logical "component type" to an actual java class name. This controls what type is
+     * created when method createComponent of this class is called.
+     * <p>
+     * Param componentClass must be the fully-qualified class name of some class extending the UIComponent class. The
+     * class must have a default constructor, as instances of it will be created using Class.newInstance.
+     * <p>
+     * It is permitted to override a previously defined mapping, ie to call this method multiple times with the same
+     * componentType string. The createComponent method will simply use the last defined mapping.
+     */
+    /**
+     * Register a new mapping of component type to the name of the corresponding {@link UIComponent} class. This allows
+     * subsequent calls to <code>createComponent()</code> to serve as a factory for {@link UIComponent} instances.
+     * 
+     * @param componentType
+     *            - The component type to be registered
+     * @param componentClass
+     *            - The fully qualified class name of the corresponding {@link UIComponent} implementation
+     * 
+     * @throws NullPointerException
+     *             if <code>componentType</code> or <code>componentClass</code> is <code>null</code>
+     */
+    public abstract void addComponent(String componentType, String componentClass);
+
+    /**
+     * Register a new converter class that is capable of performing conversions for the specified target class.
+     * 
+     * @param targetClass
+     *            - The class for which this converter is registered
+     * @param converterClass
+     *            - The fully qualified class name of the corresponding {@link Converter} implementation
+     * 
+     * @throws NullPointerException
+     *             if <code>targetClass</code> or <code>converterClass</code> is <code>null</code>
+     */
+    public abstract void addConverter(Class<?> targetClass, String converterClass);
+
+    /**
+     * Register a new mapping of converter id to the name of the corresponding {@link Converter} class. This allows
+     * subsequent calls to createConverter() to serve as a factory for {@link Converter} instances.
+     * 
+     * @param converterId
+     *            - The converterId to be registered
+     * @param converterClass
+     *            - The fully qualified class name of the corresponding {@link Converter} implementation
+     * 
+     * @throws NullPointerException
+     *             if <code>componentType</code> or <code>componentClass</code> is <code>null</code>
+     */
+    public abstract void addConverter(String converterId, String converterClass);
+
+    /**
+     * 
+     * @since 2.0
+     * @param validatorId
+     */
+    public void addDefaultValidatorId(String validatorId)
+    {
+    }
+
+    /**
+     * <p>
+     * Provide a way for Faces applications to register an <code>ELContextListener</code> that will be notified on
+     * creation of <code>ELContext</code> instances.
+     * <p>
+     * 
+     * <p>
+     * An implementation is provided that throws <code>UnsupportedOperationException</code> so that users that decorate
+     * the <code>Application</code> continue to work.
+     * </p>
+     * 
+     * @since 1.2
+     */
+    public void addELContextListener(ELContextListener listener)
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            application.addELContextListener(listener);
+            return;
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <p>
+     * Cause an the argument <code>resolver</code> to be added to the resolver chain as specified in section 5.5.1 of
+     * the JavaServer Faces Specification.
+     * </p>
+     * 
+     * <p>
+     * It is not possible to remove an <code>ELResolver</code> registered with this method, once it has been registered.
+     * </p>
+     * 
+     * <p>
+     * It is illegal to register an ELResolver after the application has received any requests from the client. If an
+     * attempt is made to register a listener after that time, an IllegalStateException must be thrown. This restriction
+     * is in place to allow the JSP container to optimize for the common case where no additional
+     * <code>ELResolvers</code> are in the chain, aside from the standard ones. It is permissible to add
+     * <code>ELResolvers</code> before or after initialization to a CompositeELResolver that is already in the chain.
+     * <p>
+     * 
+     * <p>
+     * The default implementation throws <code>UnsupportedOperationException</code> and is provided for the sole purpose
+     * of not breaking existing applications that extend {@link Application}.
+     * </p>
+     * 
+     * @since 1.2
+     */
+    public void addELResolver(ELResolver resolver)
+    {
+        // The following concrete methods were added for JSF 1.2.  They supply default 
+        // implementations that throw UnsupportedOperationException.  
+        // This allows old Application implementations to still work.
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            application.addELResolver(resolver);
+            return;
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     *Register a new mapping of validator id to the name of the corresponding <code>Validator</code> class. This allows
+     * subsequent calls to <code>createValidator()</code> to serve as a factory for <code>Validator</code> instances.
+     * 
+     *@param validatorId  The validator id to be registered
+     *@param validatorClass The fully qualified class name of the corresponding Validator implementation
+     * 
+     *@throws NullPointerException
+     *             if <code>validatorId</code> or <code>validatorClass</code> is <code>null</code>
+     */
+    public abstract void addValidator(String validatorId, String validatorClass);
+
+    /**
+     * 
+     * @param behaviorId
+     * @return
+     * @throws FacesException
+     * @since 2.0
+     * 
+     * FIXME: Notify EG, this should not be abstract and throw UnsupportedOperationException
+     */
+    public Behavior createBehavior(String behaviorId) throws FacesException
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            return application.createBehavior(behaviorId);
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * ???
+     * 
+     * @param context
+     * @param componentResource
+     * @return
+     * 
+     * @since 2.0
+     */
+    public UIComponent createComponent(FacesContext context, Resource componentResource)
+    {
+        Application application = getMyfacesApplicationInstance(context);
+        if (application != null)
+        {
+            return application.createComponent(context, componentResource);
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * 
+     * @param context
+     * @param componentType
+     * @param rendererType
+     * @return
+     * 
+     * @since 2.0
+     */
+    public UIComponent createComponent(FacesContext context, String componentType, String rendererType)
+    {
+        Application application = getMyfacesApplicationInstance(context);
+        if (application != null)
+        {
+            return application.createComponent(context, componentType, rendererType);
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <p>
+     * Create a new UIComponent subclass, using the mappings defined by previous calls to the addComponent method of
+     * this class.
+     * </p>
+     * 
+     * @throws FacesException
+     *             if there is no mapping defined for the specified componentType, or if an instance of the specified
+     *             type could not be created for any reason.
+     */
+    public abstract UIComponent createComponent(String componentType) throws FacesException;
+
+    /**
+     * <p>
+     * Create an object which has an associating "binding" expression tying the component to a user property.
+     * </p>
+     * 
+     * <p>
+     * First the specified value-binding is evaluated; if it returns a non-null value then the component
+     * "already exists" and so the resulting value is simply returned.
+     * </p>
+     * 
+     * <p>
+     * Otherwise a new UIComponent instance is created using the specified componentType, and the new object stored via
+     * the provided value-binding before being returned.
+     * </p>
+     * 
+     * @deprecated
+     */
+    public abstract UIComponent createComponent(ValueBinding componentBinding, FacesContext context,
+                    String componentType) throws FacesException;
+
+    /**
+     * <p>
+     * Call the <code>getValue()</code> method on the specified <code>ValueExpression</code>. If it returns a
+     * <code>{@link UIComponent}</code> instance, return it as the value of this method. If it does not, instantiate a
+     * new <code>{@link UIComponent}</code> instance of the specified component type, pass the new component to the
+     * <code>setValue()</code> method of the specified <code>ValueExpression</code>, and return it.
+     * </p>
+     * 
+     * @param componentExpression
+     *            - <code>ValueExpression</code> representing a component value expression (typically specified by the
+     *            <code>component</code> attribute of a custom tag)
+     * @param context
+     *            - {@link FacesContext} for the current request
+     * @param componentType
+     *            - Component type to create if the ValueExpression does not return a component instance
+     * 
+     * @throws FacesException
+     *             if a <code>{@link UIComponent}</code> cannot be created
+     * @throws NullPointerException
+     *             if any parameter is null
+     *             <p>
+     *             A default implementation is provided that throws <code>UnsupportedOperationException</code> so that
+     *             users that decorate <code>Application</code> can continue to function
+     *             </p>
+     * 
+     * @since 1.2
+     */
+    public UIComponent createComponent(ValueExpression componentExpression, FacesContext context, String componentType)
+                    throws FacesException
+    {
+        Application application = getMyfacesApplicationInstance(context);
+        if (application != null)
+        {
+            return application.createComponent(componentExpression, context, componentType);
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * 
+     * @param componentExpression
+     * @param context
+     * @param componentType
+     * @param rendererType
+     * @return
+     * 
+     * @since 2.0
+     */
+    public UIComponent createComponent(ValueExpression componentExpression, FacesContext context, String componentType,
+                    String rendererType)
+    {
+        Application application = getMyfacesApplicationInstance(context);
+        if (application != null)
+        {
+            return application.createComponent(componentExpression, context, componentType, rendererType);
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <p>
+     * Instantiate and return a new <code>{@link Converter}</code> instance of the class that has registered itself as
+     * capable of performing conversions for objects of the specified type. If no such <code>{@link Converter}</code>
+     * class can be identified, return null.
+     * </p>
+     * 
+     * <p>
+     * To locate an appropriate <code>{@link Converter}</code> class, the following algorithm is performed, stopping as
+     * soon as an appropriate <code>{@link Converter}</code> class is found: Locate a <code>{@link Converter}</code>
+     * registered for the target class itself. Locate a <code>{@link Converter}</code> registered for interfaces that
+     * are implemented by the target class (directly or indirectly). Locate a <code>{@link Converter}</code> registered
+     * for the superclass (if any) of the target class, recursively working up the inheritance hierarchy.
+     * </p>
+     * 
+     * <p>
+     * If the <code>{@link Converter}</code> has a single argument constructor that accepts a Class, instantiate the
+     * <code>{@link Converter}</code> using that constructor, passing the argument <code>targetClass</code> as
+     * the sole argument. Otherwise, simply use the zero-argument constructor.
+     * 
+     * @param targetClass
+     *            - Target class for which to return a <code>{@link Converter}</code>
+     * 
+     * @throws FacesException
+     *             if the <code>{@link Converter}</code> cannot be created
+     * @throws NullPointerException
+     *             if <code>targetClass</code> is <code>null</code>
+     * 
+     */
+    public abstract Converter createConverter(Class<?> targetClass);
+
+    /**
+     * Instantiate and return a new <code>{@link Converter}</code> instance of the class specified by a previous call to
+     * <code>addConverter()</code> for the specified converter id. If there is no such registration for this converter
+     * id, return <code>null</code>.
+     * 
+     * @param converterId
+     *            - The converter id for which to create and return a new <code>{@link Converter}</code> instance
+     * 
+     * @throws FacesException
+     *             if the <code>{@link Converter}</code> cannot be created
+     * @throws NullPointerException
+     *             if converterId is <code>null</code>
+     */
+    public abstract Converter createConverter(String converterId);
+
+    /**
+     * Create an object which can be used to invoke an arbitrary method via an EL expression at a later time. This is
+     * similar to createValueBinding except that it can invoke an arbitrary method (with parameters) rather than just
+     * get/set a javabean property.
+     * <p>
+     * This is used to invoke ActionListener method, and ValueChangeListener methods.
+     * 
+     * @deprecated
+     */
+    public abstract MethodBinding createMethodBinding(String ref, Class<?>[] params) throws ReferenceSyntaxException;
+
+    /**
+     * Instantiate and return a new <code>{@link Validator}</code> instance of the class specified by a previous call to
+     * <code>addValidator()</code> for the specified validator id.
+     * 
+     * @param validatorId The <code>{@link Validator}</code> id for which to create and return a new
+     *        Validator instance
+     * 
+     * @throws FacesException
+     *             if a <code>{@link Validator}</code> of the specified id cannot be created
+     * @throws NullPointerException
+     *             if validatorId is <code>null</code>
+     */
+    public abstract Validator createValidator(String validatorId) throws FacesException;
+
+    /**
+     * <p>
+     * Create an object which can be used to invoke an arbitrary method via an EL expression at a later time. This is
+     * similar to createValueBinding except that it can invoke an arbitrary method (with parameters) rather than just
+     * get/set a javabean property.
+     * </p>
+     * This is used to invoke ActionListener method, and ValueChangeListener methods.
+     * 
+     * @deprecated
+     */
+    public abstract ValueBinding createValueBinding(String ref) throws ReferenceSyntaxException;
+
+    /**
+     * <p>
+     * Get a value by evaluating an expression.
+     * </p>
+     * 
+     * <p>
+     * Call <code>{@link #getExpressionFactory()}</code> then call
+     * <code>ExpressionFactory.createValueExpression(javax.el.ELContext, java.lang.String, java.lang.Class)</code>
+     * passing the argument <code>expression</code> and <code>expectedType</code>. Call
+     * <code>{@link FacesContext#getELContext()}</code> and pass it to
+     * <code>ValueExpression.getValue(javax.el.ELContext)</code>, returning the result.
+     * </p>
+     * 
+     * <p>
+     * An implementation is provided that throws <code>UnsupportedOperationException</code> so that users that decorate
+     * the <code>Application</code> continue to work.
+     * <p>
+     * 
+     * @throws javax.el.ELException
+     */
+    public <T> T evaluateExpressionGet(FacesContext context, String expression, Class<? extends T> expectedType)
+                    throws ELException
+    {
+        Application application = getMyfacesApplicationInstance(context);
+        if (application != null)
+        {
+            return application.evaluateExpressionGet(context, expression, expectedType);
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <p>
+     * Return the default <code>ActionListener</code> to be registered for all <code>ActionSource</code> components 
+     * in this appication. If not explicitly set, a default implementation must be provided that performs the 
+     * following functions:
+     * </p>
+     * <ul>
+     * <li>The <code>processAction()</code> method must first call <code>FacesContext.renderResponse()</code>in order to
+     * bypass any intervening lifecycle phases, once the method returns.</li>
+     * 
+     * <li>The <code>processAction()</code> method must next determine the logical 
+     * outcome of this event, as follows:</li>
+     * 
+     * <li>If the originating component has a non-<code>null action</code> property, retrieve the <code>
+     *             MethodBinding</code> from the property, and call <code>invoke()</code>
+     * on it. Convert the returned value (if any) to a String, and use it as the logical outcome.</li>
+     * <li>Otherwise, the logical outcome is null.</li>
+     * <li>The <code>processAction()</code> method must finally retrieve the <code>NavigationHandler</code> instance 
+     *         for this application and call
+     *         code>NavigationHandler.handleNavigation(jakarta.faces.context.FacesContext,
+     *                                     java.lang.String, java.lang.String)</code> passing:</li>
+     * <li>the {@link FacesContext} for the current request</li>
+     * <li>If there is a <code>MethodBinding</code> instance for the <code>action</code> property of this component, the
+     * result of calling {@link MethodBinding#getExpressionString()} on it, null otherwise</li>
+     * <li>the logical outcome as determined above</li>
+     * </ul>
+     * <p>
+     * Note that the specification for the default <code>ActionListener</code> contiues to call for the use of a
+     * deprecated property (<code>action</code>) and class (<code>MethodBinding</code>). Unfortunately, this is
+     * necessary because the default ActionListener must continue to work with components that do not implement
+     * {@link jakarta.faces.component.ActionSource2}, and only implement {@link jakarta.faces.component.ActionSource}.
+     */
+    public abstract ActionListener getActionListener();
+
+    /**
+     * 
+     * @return
+     * 
+     * @since 2.0
+     * 
+     * FIXME: Notify EG, this should not be abstract and throw UnsupportedOperationException
+     */
+    public Iterator<String> getBehaviorIds()
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            return application.getBehaviorIds();
+        }
+        // It is better to return an empty iterator,
+        // to keep compatiblity with previous jsf 2.0 Application
+        // instances
+        return Collections.EMPTY_LIST.iterator();
+    }
+
+    /**
+     * Return an <code>Iterator</code> over the set of currently defined component types for this
+     * <code>Application</code>.
+     */
+    public abstract Iterator<String> getComponentTypes();
+
+    /**
+     * Return an <code>Iterator</code> over the set of currently registered converter ids for this
+     * <code>Application</code>
+     * 
+     * @return
+     */
+    public abstract Iterator<String> getConverterIds();
+
+    /**
+     *Return an <code>Iterator</code> over the set of <code>Class</code> instances for which <code>{@link Converter}
+     * </code> <code>classes</code>have been explicitly registered.
+     * 
+     * @return
+     */
+    public abstract Iterator<Class<?>> getConverterTypes();
+
+    /**
+     *Return the default <code>Locale</code> for this application. If not explicitly set, <code>null</code> is
+     * returned.
+     * 
+     * @return
+     */
+    public abstract Locale getDefaultLocale();
+
+    /**
+     * Return the <code>renderKitId</code> to be used for rendering this application. If not explicitly set,
+     * <code>null</code> is returned.
+     * 
+     * @return
+     */
+    public abstract String getDefaultRenderKitId();
+
+    /**
+     * 
+     * @return
+     * 
+     * @since 2.0
+     */
+    public Map<String, String> getDefaultValidatorInfo()
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            return application.getDefaultValidatorInfo();
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <p>
+     * If no calls have been made to <code>addELContextListener(javax.el.ELContextListener)</code>, this method must
+     * return an empty array
+     * <p>
+     * .
+     * 
+     * <p>
+     * Otherwise, return an array representing the list of listeners added by calls to
+     * <code>addELContextListener(javax.el.ELContextListener)</code>.
+     * <p>
+     * 
+     * <p>
+     * An <code>implementation</code> is provided that throws UnsupportedOperationException so that users that decorate
+     * the <code>Application</code> continue to work.
+     * </p>
+     * 
+     * @since 1.2
+     */
+    public ELContextListener[] getELContextListeners()
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            return application.getELContextListeners();
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Return the singleton <code>ELResolver</code> instance to be used for all EL resolution. This is actually an
+     * instance of <code>CompositeELResolver</code> that must contain the following ELResolver instances in the
+     * following order:
+     * <ul>
+     * <li><code>ELResolver</code> instances declared using the &lt;el-resolver&gt; element in the application 
+     * configuration resources.</li>
+     * 
+     * <li>An <code> implementation</code> that wraps the head of the legacy VariableResolver chain, as per section
+     * <code> VariableResolver ChainWrapper</code> in Chapter 5 in the spec document.</li>
+     * 
+     * <li>An <code>implementation</code> that wraps the head of the legacy PropertyResolver chain, as per section
+     * <code>PropertyResolver ChainWrapper</code> in Chapter 5 in the spec document.</li>
+     * 
+     * <li>Any <code>ELResolver</code> instances added by calls to
+     * <code>{@link #addELResolver(javax.el.ELResolver)}</code>.</li>
+     * 
+     * <li>The default implementation throws <code>UnsupportedOperationException</code> and is provided for the sole
+     * purpose of not breaking existing applications that extend <code>{@link Application}</code>.</li>
+     * </ul>
+     * 
+     * @since 1.2
+     */
+    public ELResolver getELResolver()
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            return application.getELResolver();
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <p>
+     * Return the <code>ExpressionFactory</code> instance for this application. This instance is used by the convenience
+     * method <code>{@link #evaluateExpressionGet(FacesContext, java.lang.String, java.lang.Class)}.
+     * </code>
+     * </p>
+     * 
+     * <p>
+     * The implementation must return the <code>ExpressionFactory</code> from the JSP container by calling <code>
+     * JspFactory.getDefaultFactory().getJspApplicationContext(servletContext).getExpressionFactory()</code>.
+     * </p>
+     * 
+     * <p>
+     * An implementation is provided that throws <code>UnsupportedOperationException</code> so that users that decorate
+     * the <code>Application</code> continue to work.
+     * </p>
+     * 
+     * @since 1.2
+     * @return 
+     */
+    public ExpressionFactory getExpressionFactory()
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            return application.getExpressionFactory();
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Return the fully qualified class name of the <code>ResourceBundle</code> to be used for JavaServer Faces messages
+     * for this application. If not explicitly set, <code>null</code> is returned.
+     */
+    public abstract String getMessageBundle();
+
+    /**
+     *Return the <code>{@link NavigationHandler}</code> instance that will be passed the outcome returned by any
+     * invoked application action for this web application. If not explicitly set, a default implementation must be
+     * provided that performs the functions described in the <code>{@link NavigationHandler}</code> class description.
+     */
+    public abstract NavigationHandler getNavigationHandler();
+
+    /**
+     * <p>
+     * Return the project stage for the currently running application instance. The default value is <code>
+     * {@link ProjectStage#Production}</code>
+     * </p>
+     * 
+     * <p>
+     * The implementation of this method must perform the following algorithm or an equivalent with the same end result
+     * to determine the value to return.
+     * </p>
+     * 
+     * <ul>
+     * <li>If the value has already been determined by a previous call to this method, simply return that value.</li>
+     * <li>Look for a <code>JNDI</code> environment entry under the key given by the value of
+     * <code>{@link ProjectStage#PROJECT_STAGE_JNDI_NAME}</code> (return type of java.lang.String). If found, continue
+     * with the algorithm below, otherwise, look for an entry in the <code>initParamMap</code> of the
+     * <code>ExternalContext</code> from the current <code>FacesContext</code> with the key
+     * <code>{@link ProjectStage#PROJECT_STAGE_PARAM_NAME}</code></li>
+     * <li>If a value is found found, see if an enum constant can be obtained by calling
+     * <code>ProjectStage.valueOf()</code>, passing the value from the <code>initParamMap</code>. If this succeeds
+     * without exception, save the value and return it.</li>
+     * <li>If not found, or any of the previous attempts to discover the enum constant value have failed, log a
+     * descriptive error message, assign the value as <code>ProjectStage.Production</code> and return it.</li>
+     * </ul>
+     * 
+     * @since 2.0
+     */
+    public ProjectStage getProjectStage()
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            return application.getProjectStage();
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Get the object used by the VariableResolver to read and write named properties on java beans, Arrays, Lists and
+     * Maps. This object is used by the ValueBinding implementation, and during the process of configuring
+     * "managed bean" properties.
+     * 
+     * @deprecated
+     */
+    public abstract PropertyResolver getPropertyResolver();
+
+    /**
+     * <p>
+     * Find a <code>ResourceBundle</code> as defined in the application configuration resources under the specified
+     * name. If a <code>ResourceBundle</code> was defined for the name, return an instance that uses the locale of the
+     * current <code>{@link jakarta.faces.component.UIViewRoot}</code>.
+     * </p>
+     * 
+     * <p>
+     * The default implementation throws <code>UnsupportedOperationException</code> and is provided for the sole purpose
+     * of not breaking existing applications that extend this class.
+     * </p>
+     * 
+     * @return <code>ResourceBundle</code> for the current UIViewRoot, otherwise null
+     * 
+     * @throws FacesException
+     *             if a bundle was defined, but not resolvable
+     * @throws NullPointerException
+     *             if ctx == null || name == null
+     */
+    public ResourceBundle getResourceBundle(FacesContext ctx, String name)
+    {
+        Application application = getMyfacesApplicationInstance(ctx);
+        if (application != null)
+        {
+            return application.getResourceBundle(ctx, name);
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <p>
+     * Return the singleton, stateless, thread-safe <code>{@link ResourceHandler}</code> for this application. The JSF
+     * implementation must support the following techniques for declaring an alternate implementation of <code>
+     * ResourceHandler</code>.
+     * </p>
+     * 
+     * <ul>
+     * <li>The <code>ResourceHandler</code> implementation is declared in the application configuration resources by
+     * giving the fully qualified class name as the value of the <code>&lt;resource-handler&gt;</code> element 
+     * within the
+     * <code>application</code> element.</li>
+     * <li>RELEASE_PENDING(edburns) It can also be declared via an annotation as 
+     * specified in [287-ConfigAnnotations].</li>
+     * </ul>
+     * 
+     * <p>
+     * In all of the above cases, the runtime must employ the decorator pattern as for every other pluggable artifact in
+     * JSF.
+     * </p>
+     * 
+     * @since 2.0
+     */
+    public ResourceHandler getResourceHandler()
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            return application.getResourceHandler();
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Return the <code>StateManager</code> instance that will be utilized during the Restore View and Render Response
+     * phases of the request processing lifecycle. If not explicitly set, a default implementation must be provided that
+     * performs the functions described in the <code>StateManager</code> description in the JavaServer Faces
+     * Specification.
+     */
+    public abstract StateManager getStateManager();
+
+    /**
+     * Return an <code>Iterator</code> over the supported <code>Locales</code> for this appication.
+     */
+    public abstract Iterator<Locale> getSupportedLocales();
+
+    /**
+     *Return an <code>Iterator</code> over the set of currently registered validator ids for this
+     * <code>Application</code>.
+     */
+    public abstract Iterator<String> getValidatorIds();
+
+    /**
+     * Get the object used to resolve expressions of form "#{...}".
+     * 
+     * @deprecated
+     */
+    public abstract VariableResolver getVariableResolver();
+
+    /**
+     * Set the <code>{@link ViewHandler}</code> instance that will be utilized during the
+     * <code> Restore View and Render Response</code> phases of the request processing lifecycle.
+     * 
+     * @return
+     */
+    public abstract ViewHandler getViewHandler();
+
+    /**
+     * 
+     * @param facesContext
+     * @param systemEventClass
+     * @param sourceBaseType
+     * @param source
+     * 
+     * @since 2.0
+     */
+    public void publishEvent(FacesContext facesContext, Class<? extends SystemEvent> systemEventClass,
+                    Class<?> sourceBaseType, Object source)
+    {
+        Application application = getMyfacesApplicationInstance(facesContext);
+        if (application != null)
+        {
+            application.publishEvent(facesContext, systemEventClass, sourceBaseType, source);
+            return;
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <p>
+     * If there are one or more listeners for events of the type represented by <code>systemEventClass</code>, call
+     * those listeners,passing source as the <code>source</code> of the event. The implementation should be as fast as
+     * possible in determining whether or not a listener for the given <code>systemEventClass</code> and
+     * <code>source</code> has been installed, and should return immediately once such a determination has been made.
+     * The implementation of <code>publishEvent</code> must honor the requirements stated in
+     * <code>{@link #subscribeToEvent(java.lang.Class, java.lang.Class,
+     *                                               SystemEventListener)}</code>
+     * <p>
+     * <p>
+     * The default implementation must implement an algorithm semantically equivalent to the following to locate
+     * listener instances and to invoke them.
+     * <p>
+     * <ul>
+     * <li>If the <code>source</code> argument implements
+     * <code>{@link jakarta.faces.event.SystemEventListenerHolder}</code>, call
+     * <code>{@linkjakarta.faces.event.SystemEventListenerHolder#getListenersForEventClass(java.lang.Class)}</code>
+     * on it, passing the
+     * <code>systemEventClass</code> argument. If the list is not empty, perform algorithm
+     * <code>traverseListenerList</code> on the list.</li>
+     * 
+     * <li>If any <code>Application</code> level listeners have been installed by previous calls to <code>{@link
+     * #subscribeToEvent(java.lang.Class, java.lang.Class, SystemEventListener)}</code>, perform algorithm
+     * <code>traverseListenerList</code> on the list.</li>
+     * 
+     * <li>If any <code>Application</code> level listeners have been installed by previous calls to
+     * <code>{@link #subscribeToEvent(java.lang.Class, SystemEventListener)}</code>, perform algorithm
+     * <code>traverseListenerList</code> on the list.</li>
+     * </ul>
+     * 
+     * <p>
+     * If the act of invoking the <code>processListener</code> method causes an
+     * <code>{@link jakarta.faces.event.AbortProcessingException}</code> to be thrown,
+     * processing of the listeners must be aborted.
+     * </p>
+     * 
+     * <p>
+     * Algorithm <code>traverseListenerList</code>: For each listener in the list,
+     * </p>
+     * 
+     * <ul>
+     * <li>Call
+     * <code>{@link SystemEventListener#isListenerForSource(java.lang.Object)}</code>, passing the <code>source</code>
+     * argument. If this returns <code>false</code>, take no action on the listener.</li>
+     * 
+     * <li>Otherwise, if the event to be passed to the listener instances has not yet been constructed, construct the
+     * event, passing <code>source</code> as the argument to the one-argument constructor that takes an
+     * <code>Object</code>. This same event instance must be passed to all listener instances.</li>
+     * 
+     * <li>Call
+     * <code>{@link SystemEvent#isAppropriateListener(jakarta.faces.event.FacesListener)}</code>, passing the listener
+     *         instance as the argument. If this returns <code>false</code>, take no action on the listener.</li>
+     * 
+     * <li>Call <code>{@link SystemEvent#processListener(jakarta.faces.event.FacesListener)}</code>,
+     * passing the listener instance.</li>
+     * </ul>
+     * 
+     * @param systemEventClass
+     *            - The Class of event that is being published. Must be non-null.
+     * 
+     * @param source
+     *            - The <code>source</code> for the event of type systemEventClass. Must be non- <code>null</code>, and
+     *            must implement <code>{@link jakarta.faces.event.SystemEventListenerHolder}</code>.
+     * 
+     * @since 2.0
+     */
+    public void publishEvent(FacesContext facesContext, Class<? extends SystemEvent> systemEventClass, Object source)
+    {
+        Application application = getMyfacesApplicationInstance(facesContext);
+        if (application != null)
+        {
+            application.publishEvent(facesContext, systemEventClass, source);
+            return;
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <p>
+     * Remove the argument <code>listener</code> from the list of <code>ELContextListeners</code>. If <code>listener
+     * </code> is null, no exception is thrown and no action is performed. If <code>listener</code> is not in the list,
+     * no exception is thrown and no action is performed.
+     * <p>
+     * 
+     * <p>
+     * An implementation is provided that throws <code>UnsupportedOperationException</code> so that users that decorate
+     * the <code>Application</code> continue to work.
+     * 
+     * @param listener
+     */
+    public void removeELContextListener(ELContextListener listener)
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            application.removeELContextListener(listener);
+            return;
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Set the default <code>{@link ActionListener}</code> to be registered for all
+     * <code>{@link jakarta.faces.component.ActionSource}</code>
+     * components.
+     * 
+     * @param listener
+     *            - The new default <code>{@link ActionListener}</code>
+     * 
+     * @throws NullPointerException
+     *             if listener is null
+     */
+    public abstract void setActionListener(ActionListener listener);
+
+    /**
+     * Set the default <code>Locale</code> for this application.
+     * 
+     * @param locale
+     *            - The new default <code>Locale</code>
+     * 
+     * @throws NullPointerException
+     *             if listener is null
+     */
+    public abstract void setDefaultLocale(Locale locale);
+
+    /**
+     * Return the <code>renderKitId</code> to be used for rendering this application. If not explicitly set, <code>null
+     * </code> is returned.
+     * 
+     * @param renderKitId
+     */
+    public abstract void setDefaultRenderKitId(String renderKitId);
+
+    /**
+     * Set the fully qualified class name of the <code>ResourceBundle </code> to be used for JavaServer Faces messages
+     * for this application. See the JavaDocs for the <code>java.util.ResourceBundle </code> class for more information
+     * about the syntax for resource bundle names.
+     * 
+     * @param bundle
+     *            - Base name of the resource bundle to be used
+     * 
+     * @throws NullPointerException
+     *             if bundle is null
+     */
+    public abstract void setMessageBundle(String bundle);
+
+    /**
+     * Set the {@link NavigationHandler} instance that will be passed the outcome returned by any invoked application
+     * action for this web application.
+     * 
+     * @param handler
+     *            - The new NavigationHandler instance
+     */
+    public abstract void setNavigationHandler(NavigationHandler handler);
+
+    /**
+     * The recommended way to affect the execution of the EL is to provide an &lt;el-resolver&gt; element at the right 
+     * place in the application configuration resources which will be considered in the normal course of expression
+     * evaluation. This method now will cause the argument resolver to be wrapped inside an implementation of ELResolver
+     * and exposed to the EL resolution system as if the user had called addELResolver(javax.el.ELResolver).
+     * 
+     * @deprecated
+     */
+    public abstract void setPropertyResolver(PropertyResolver resolver);
+
+    /**
+     * 
+     * @param resourceHandler
+     * 
+     * @since 2.0
+     */
+    public void setResourceHandler(ResourceHandler resourceHandler)
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            application.setResourceHandler(resourceHandler);
+            return;
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     *Set the {@link StateManager} instance that will be utilized during the <code>Restore View and Render Response
+     * </code> phases of the request processing lifecycle.
+     * 
+     * @param manager The new {@link StateManager}instance
+     * 
+     * @throws IllegalStateException
+     *             if this method is called after at least one request has been processed by the <code>Lifecycle</code>
+     *             instance for this application.
+     * @throws NullPointerException
+     *             if manager is <code>null</code>
+     */
+    public abstract void setStateManager(StateManager manager);
+
+    /**
+     * Set the <code>Locale</code> instances representing the supported <code>Locales</code> for this application.
+     * 
+     * @param locales The set of supported <code>Locales</code> for this application
+     * 
+     * @throws NullPointerException
+     *             if the argument newLocales is <code>null</code>.
+     * 
+     */
+    public abstract void setSupportedLocales(Collection<Locale> locales);
+
+    /**
+     * The recommended way to affect the execution of the EL is to provide an &lt;el-resolver&gt; element at the right 
+     * place in the application configuration resources which will be considered in the normal course of expression
+     * evaluation. This method now will cause the argument resolver to be wrapped inside an implementation of ELResolver
+     * and exposed to the EL resolution system as if the user had called addELResolver(javax.el.ELResolver).
+     * 
+     * @deprecated
+     */
+    public abstract void setVariableResolver(VariableResolver resolver);
+
+    /**
+     * Set the {@link ViewHandler} instance that will be utilized during the <code>Restore View and Render Response
+     * </code> phases of the request processing lifecycle.
+     * 
+     * @param handler
+     *            - The new {@link ViewHandler} instance
+     * 
+     * @throws IllegalStateException
+     *             if this method is called after at least one request has been processed by the <code>Lifecycle</code>
+     *             instance for this application.
+     * @throws NullPointerException
+     *             if <code>handler</code> is <code>null</code>
+     */
+    public abstract void setViewHandler(ViewHandler handler);
+
+    /**
+     * 
+     * @param systemEventClass
+     * @param sourceClass
+     * @param listener
+     * 
+     * @since 2.0
+     */
+    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass, Class<?> sourceClass,
+                    SystemEventListener listener)
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            application.subscribeToEvent(systemEventClass, sourceClass, listener);
+            return;
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * 
+     * @param systemEventClass
+     * @param listener
+     * 
+     * @since 2.0
+     */
+    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass, SystemEventListener listener)
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            application.subscribeToEvent(systemEventClass, listener);
+            return;
+        }
+        subscribeToEvent(systemEventClass, null, listener);
+    }
+
+    /**
+     * 
+     * @param systemEventClass
+     * @param sourceClass
+     * @param listener
+     * 
+     * @since 2.0
+     */
+    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass, Class<?> sourceClass,
+                    SystemEventListener listener)
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            application.unsubscribeFromEvent(systemEventClass, sourceClass, listener);
+            return;
+        }
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * 
+     * @param systemEventClass
+     * @param listener
+     * 
+     * @since 2.0
+     */
+    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass, SystemEventListener listener)
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            application.unsubscribeFromEvent(systemEventClass, listener);
+            return;
+        }
+        unsubscribeFromEvent(systemEventClass, null, listener);
+    }
+    
+    /**
+     * @since 2.2
+     * @return 
+     */
+    public FlowHandler getFlowHandler()
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            return application.getFlowHandler();
+        }
+        throw new UnsupportedOperationException();
+    }
+    
+    /**
+     * @since 2.2
+     * @param flowHandler 
+     */
+    public void setFlowHandler(FlowHandler flowHandler)
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            application.setFlowHandler(flowHandler);
+            return;
+        }
+        throw new UnsupportedOperationException();
+
+    }
+    
+    public void addSearchKeywordResolver(SearchKeywordResolver resolver)
+    {
+        // The following concrete methods were added for JSF 1.2.  They supply default 
+        // implementations that throw UnsupportedOperationException.  
+        // This allows old Application implementations to still work.
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            application.addSearchKeywordResolver(resolver);
+            return;
+        }
+        throw new UnsupportedOperationException();
+    }
+    
+    public SearchKeywordResolver getSearchKeywordResolver()
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            return application.getSearchKeywordResolver();
+        }
+        throw new UnsupportedOperationException();
+    }
+    
+    /**
+     * @since 2.3
+     * @return 
+     */
+    public SearchExpressionHandler getSearchExpressionHandler()
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            return application.getSearchExpressionHandler();
+        }
+        throw new UnsupportedOperationException();
+    }
+    
+    /**
+     * @since 2.3
+     * @param searchExpressionHandler 
+     */
+    public void setSearchExpressionHandler(SearchExpressionHandler searchExpressionHandler)
+    {
+        Application application = getMyfacesApplicationInstance();
+        if (application != null)
+        {
+            application.setSearchExpressionHandler(searchExpressionHandler);
+            return;
+        }
+        throw new UnsupportedOperationException();
+    }
+}
diff --git a/api/src/main/java/jakarta/faces/application/ApplicationConfigurationPopulator.java b/api/src/main/java/jakarta/faces/application/ApplicationConfigurationPopulator.java
new file mode 100644
index 0000000..ad88877
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ApplicationConfigurationPopulator.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import org.w3c.dom.Document;
+
+public abstract class ApplicationConfigurationPopulator
+{
+    
+    public abstract void populateApplicationConfiguration(Document toPopulate);
+}
diff --git a/api/src/main/java/jakarta/faces/application/ApplicationFactory.java b/api/src/main/java/jakarta/faces/application/ApplicationFactory.java
new file mode 100644
index 0000000..43737b3
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ApplicationFactory.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import jakarta.faces.FacesWrapper;
+
+/**
+ * see Javadoc of <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.html">JSF Specification</a>
+ */
+public abstract class ApplicationFactory implements FacesWrapper<ApplicationFactory>
+{
+    private ApplicationFactory delegate;
+
+    @Deprecated
+    public ApplicationFactory()
+    {
+    }
+
+    public ApplicationFactory(ApplicationFactory delegate)
+    {
+        this.delegate = delegate;
+    }
+    
+    public abstract Application getApplication();
+    
+    /**
+     * If this factory has been decorated, the implementation doing the decorating may override this method to 
+     * provide access to the implementation being wrapped. A default implementation is provided that returns 
+     * <code>null</code>.
+     * 
+     * @return the decorated <code>ApplicationFactory</code> if this factory decorates another, 
+     *         or <code>null</code> otherwise
+     * 
+     * @since 2.0
+     */
+    public ApplicationFactory getWrapped()
+    {
+        return delegate;
+    }
+    
+    public abstract void setApplication(Application application);
+}
diff --git a/api/src/main/java/jakarta/faces/application/ApplicationWrapper.java b/api/src/main/java/jakarta/faces/application/ApplicationWrapper.java
new file mode 100644
index 0000000..152b495
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ApplicationWrapper.java
@@ -0,0 +1,492 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import jakarta.faces.component.behavior.Behavior;
+import jakarta.faces.component.search.SearchExpressionHandler;
+import jakarta.faces.component.search.SearchKeywordResolver;
+import jakarta.faces.validator.Validator;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.ResourceBundle;
+
+import javax.el.ELContextListener;
+import javax.el.ELException;
+import javax.el.ELResolver;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+import jakarta.faces.FacesException;
+import jakarta.faces.FacesWrapper;
+import jakarta.faces.component.UIComponent;
+import jakarta.faces.context.FacesContext;
+import jakarta.faces.convert.Converter;
+import jakarta.faces.el.MethodBinding;
+import jakarta.faces.el.PropertyResolver;
+import jakarta.faces.el.ReferenceSyntaxException;
+import jakarta.faces.el.ValueBinding;
+import jakarta.faces.el.VariableResolver;
+import jakarta.faces.event.ActionListener;
+import jakarta.faces.event.SystemEvent;
+import jakarta.faces.event.SystemEventListener;
+import jakarta.faces.flow.FlowHandler;
+
+/**
+ * @since 2.0
+ */
+@SuppressWarnings("deprecation")
+public abstract class ApplicationWrapper extends Application implements FacesWrapper<Application>
+{
+    private Application delegate;
+
+    @Deprecated
+    public ApplicationWrapper()
+    {
+        
+    }
+    
+    public ApplicationWrapper(Application delegate)
+    {
+        this.delegate = delegate;
+    }
+    
+    @Override
+    public void addBehavior(String behaviorId, String behaviorClass)
+    {
+        getWrapped().addBehavior(behaviorId, behaviorClass);
+    }
+
+    @Override
+    public void addComponent(String componentType, String componentClass)
+    {
+        getWrapped().addComponent(componentType, componentClass);
+    }
+
+    @Override
+    public void addConverter(Class<?> targetClass, String converterClass)
+    {
+        getWrapped().addConverter(targetClass, converterClass);
+    }
+
+    @Override
+    public void addConverter(String converterId, String converterClass)
+    {
+        getWrapped().addConverter(converterId, converterClass);
+    }
+
+    @Override
+    public void addDefaultValidatorId(String validatorId)
+    {
+        getWrapped().addDefaultValidatorId(validatorId);
+    }
+
+    @Override
+    public void addELContextListener(ELContextListener listener)
+    {
+        getWrapped().addELContextListener(listener);
+    }
+
+    @Override
+    public void addELResolver(ELResolver resolver)
+    {
+        getWrapped().addELResolver(resolver);
+    }
+
+    @Override
+    public void addValidator(String validatorId, String validatorClass)
+    {
+        getWrapped().addValidator(validatorId, validatorClass);
+    }
+
+    @Override
+    public Behavior createBehavior(String behaviorId) throws FacesException
+    {
+        return getWrapped().createBehavior(behaviorId);
+    }
+
+    @Override
+    public UIComponent createComponent(FacesContext context, Resource componentResource)
+    {
+        return getWrapped().createComponent(context, componentResource);
+    }
+
+    @Override
+    public UIComponent createComponent(FacesContext context, String componentType, String rendererType)
+    {
+        return getWrapped().createComponent(context, componentType, rendererType);
+    }
+
+    @Override
+    public UIComponent createComponent(String componentType) throws FacesException
+    {
+        return getWrapped().createComponent(componentType);
+    }
+
+    @Override
+    @Deprecated
+    public UIComponent createComponent(ValueBinding componentBinding, FacesContext context, String componentType)
+            throws FacesException
+    {
+        return getWrapped().createComponent(componentBinding, context, componentType);
+    }
+
+    @Override
+    public UIComponent createComponent(ValueExpression componentExpression, FacesContext context, String componentType,
+                                       String rendererType)
+    {
+        return getWrapped().createComponent(componentExpression, context, componentType, rendererType);
+    }
+
+    @Override
+    public UIComponent createComponent(ValueExpression componentExpression, FacesContext contexte, String componentType)
+            throws FacesException
+    {
+        return getWrapped().createComponent(componentExpression, contexte, componentType);
+    }
+
+    @Override
+    public Converter createConverter(Class<?> targetClass)
+    {
+        return getWrapped().createConverter(targetClass);
+    }
+
+    @Override
+    public Converter createConverter(String converterId)
+    {
+        return getWrapped().createConverter(converterId);
+    }
+
+    @Override
+    @Deprecated
+    public MethodBinding createMethodBinding(String ref, Class<?>[] params) throws ReferenceSyntaxException
+    {
+        return getWrapped().createMethodBinding(ref, params);
+    }
+
+    @Override
+    public Validator createValidator(String validatorId) throws FacesException
+    {
+        return getWrapped().createValidator(validatorId);
+    }
+
+    @Override
+    public ValueBinding createValueBinding(String ref) throws ReferenceSyntaxException
+    {
+        return getWrapped().createValueBinding(ref);
+    }
+
+    @Override
+    @Deprecated
+    public <T> T evaluateExpressionGet(FacesContext context, String expression, Class<? extends T> expectedType)
+            throws ELException
+    {
+        return getWrapped().evaluateExpressionGet(context, expression, expectedType);
+    }
+
+    @Override
+    public ActionListener getActionListener()
+    {
+        return getWrapped().getActionListener();
+    }
+
+    @Override
+    public Iterator<String> getBehaviorIds()
+    {
+        return getWrapped().getBehaviorIds();
+    }
+
+    @Override
+    public Iterator<String> getComponentTypes()
+    {
+        return getWrapped().getComponentTypes();
+    }
+
+    @Override
+    public Iterator<String> getConverterIds()
+    {
+        return getWrapped().getConverterIds();
+    }
+
+    @Override
+    public Iterator<Class<?>> getConverterTypes()
+    {
+        return getWrapped().getConverterTypes();
+    }
+
+    @Override
+    public Locale getDefaultLocale()
+    {
+        return getWrapped().getDefaultLocale();
+    }
+
+    @Override
+    public String getDefaultRenderKitId()
+    {
+        return getWrapped().getDefaultRenderKitId();
+    }
+
+    @Override
+    public Map<String, String> getDefaultValidatorInfo()
+    {
+        return getWrapped().getDefaultValidatorInfo();
+    }
+
+    @Override
+    public ELContextListener[] getELContextListeners()
+    {
+        return getWrapped().getELContextListeners();
+    }
+
+    @Override
+    public ELResolver getELResolver()
+    {
+        return getWrapped().getELResolver();
+    }
+
+    @Override
+    public ExpressionFactory getExpressionFactory()
+    {
+        return getWrapped().getExpressionFactory();
+    }
+
+    @Override
+    public String getMessageBundle()
+    {
+        return getWrapped().getMessageBundle();
+    }
+
+    @Override
+    public NavigationHandler getNavigationHandler()
+    {
+        return getWrapped().getNavigationHandler();
+    }
+
+    @Override
+    public ProjectStage getProjectStage()
+    {
+        return getWrapped().getProjectStage();
+    }
+
+    @Override
+    @Deprecated
+    public PropertyResolver getPropertyResolver()
+    {
+        return getWrapped().getPropertyResolver();
+    }
+
+    @Override
+    public ResourceBundle getResourceBundle(FacesContext ctx, String name)
+    {
+        return getWrapped().getResourceBundle(ctx, name);
+    }
+
+    @Override
+    public ResourceHandler getResourceHandler()
+    {
+        return getWrapped().getResourceHandler();
+    }
+
+    @Override
+    public StateManager getStateManager()
+    {
+        return getWrapped().getStateManager();
+    }
+
+    @Override
+    public Iterator<Locale> getSupportedLocales()
+    {
+        return getWrapped().getSupportedLocales();
+    }
+
+    @Override
+    public Iterator<String> getValidatorIds()
+    {
+        return getWrapped().getValidatorIds();
+    }
+
+    @Override
+    @Deprecated
+    public VariableResolver getVariableResolver()
+    {
+        return getWrapped().getVariableResolver();
+    }
+
+    @Override
+    public ViewHandler getViewHandler()
+    {
+        return getWrapped().getViewHandler();
+    }
+
+    public Application getWrapped()
+    {
+        return delegate;
+    }
+
+    @Override
+    public void publishEvent(FacesContext facesContext, Class<? extends SystemEvent> systemEventClass,
+                             Class<?> sourceBaseType, Object source)
+    {
+        getWrapped().publishEvent(facesContext, systemEventClass, sourceBaseType, source);
+    }
+
+    @Override
+    public void publishEvent(FacesContext facesContext, Class<? extends SystemEvent> systemEventClass, Object source)
+    {
+        getWrapped().publishEvent(facesContext, systemEventClass, source);
+    }
+
+    @Override
+    public void removeELContextListener(ELContextListener listener)
+    {
+        getWrapped().removeELContextListener(listener);
+    }
+
+    @Override
+    public void setActionListener(ActionListener listener)
+    {
+        getWrapped().setActionListener(listener);
+    }
+
+    @Override
+    public void setDefaultLocale(Locale locale)
+    {
+        getWrapped().setDefaultLocale(locale);
+    }
+
+    @Override
+    public void setDefaultRenderKitId(String renderKitId)
+    {
+        getWrapped().setDefaultRenderKitId(renderKitId);
+    }
+
+    @Override
+    public void setMessageBundle(String bundle)
+    {
+        getWrapped().setMessageBundle(bundle);
+    }
+
+    @Override
+    public void setNavigationHandler(NavigationHandler handler)
+    {
+        getWrapped().setNavigationHandler(handler);
+    }
+
+    @Override
+    @Deprecated
+    public void setPropertyResolver(PropertyResolver resolver)
+    {
+        getWrapped().setPropertyResolver(resolver);
+    }
+
+    @Override
+    public void setResourceHandler(ResourceHandler resourceHandler)
+    {
+        getWrapped().setResourceHandler(resourceHandler);
+    }
+
+    @Override
+    public void setStateManager(StateManager manager)
+    {
+        getWrapped().setStateManager(manager);
+    }
+
+    @Override
+    public void setSupportedLocales(Collection<Locale> locales)
+    {
+        getWrapped().setSupportedLocales(locales);
+    }
+
+    @Override
+    @Deprecated
+    public void setVariableResolver(VariableResolver resolver)
+    {
+        getWrapped().setVariableResolver(resolver);
+    }
+
+    @Override
+    public void setViewHandler(ViewHandler handler)
+    {
+        getWrapped().setViewHandler(handler);
+    }
+
+    @Override
+    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass, Class<?> sourceClass,
+                                 SystemEventListener listener)
+    {
+        getWrapped().subscribeToEvent(systemEventClass, sourceClass, listener);
+    }
+
+    @Override
+    public void subscribeToEvent(Class<? extends SystemEvent> systemEventClass, SystemEventListener listener)
+    {
+        getWrapped().subscribeToEvent(systemEventClass, listener);
+    }
+
+    @Override
+    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass, Class<?> sourceClass,
+                                     SystemEventListener listener)
+    {
+        getWrapped().unsubscribeFromEvent(systemEventClass, sourceClass, listener);
+    }
+
+    @Override
+    public void unsubscribeFromEvent(Class<? extends SystemEvent> systemEventClass, SystemEventListener listener)
+    {
+        getWrapped().unsubscribeFromEvent(systemEventClass, listener);
+    }
+
+    @Override
+    public void setFlowHandler(FlowHandler flowHandler)
+    {
+        getWrapped().setFlowHandler(flowHandler);
+    }
+
+    @Override
+    public FlowHandler getFlowHandler()
+    {
+        return getWrapped().getFlowHandler();
+    }
+
+    @Override
+    public void setSearchExpressionHandler(SearchExpressionHandler searchExpressionHandler)
+    {
+        getWrapped().setSearchExpressionHandler(searchExpressionHandler);
+    }
+
+    @Override
+    public SearchExpressionHandler getSearchExpressionHandler()
+    {
+        return getWrapped().getSearchExpressionHandler();
+    }
+
+    @Override
+    public SearchKeywordResolver getSearchKeywordResolver()
+    {
+        return getWrapped().getSearchKeywordResolver();
+    }
+
+    @Override
+    public void addSearchKeywordResolver(SearchKeywordResolver resolver)
+    {
+        getWrapped().addSearchKeywordResolver(resolver);
+    }
+
+}
diff --git a/api/src/main/java/jakarta/faces/application/ConfigurableNavigationHandler.java b/api/src/main/java/jakarta/faces/application/ConfigurableNavigationHandler.java
new file mode 100644
index 0000000..5a89e91
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ConfigurableNavigationHandler.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import java.util.Map;
+import java.util.Set;
+
+import jakarta.faces.context.FacesContext;
+import jakarta.faces.flow.Flow;
+
+/**
+ * @since 2.0
+ */
+public abstract class ConfigurableNavigationHandler extends NavigationHandler
+{
+
+    /**
+     * 
+     */
+    public ConfigurableNavigationHandler()
+    {
+    }
+
+    public abstract NavigationCase getNavigationCase(FacesContext context, String fromAction, String outcome);
+
+    public abstract Map<String,Set<NavigationCase>> getNavigationCases();
+
+    public void performNavigation(String outcome)
+    {
+        handleNavigation(FacesContext.getCurrentInstance(), null, outcome);
+    }
+    
+    /**
+     * @since 2.2
+     * @param context
+     * @param flow 
+     */
+    public void inspectFlow(FacesContext context, Flow flow)
+    {
+    }
+    
+    /**
+     * @since 2.2
+     * @param context
+     * @param fromAction
+     * @param outcome
+     * @param toFlowDocumentId
+     * @return 
+     */
+    public NavigationCase getNavigationCase(FacesContext context,
+                                        java.lang.String fromAction,
+                                        java.lang.String outcome,
+                                        java.lang.String toFlowDocumentId)
+    {
+        return getNavigationCase(context, fromAction, outcome);
+    }
+}
diff --git a/api/src/main/java/jakarta/faces/application/ConfigurableNavigationHandlerWrapper.java b/api/src/main/java/jakarta/faces/application/ConfigurableNavigationHandlerWrapper.java
new file mode 100644
index 0000000..b6cd180
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ConfigurableNavigationHandlerWrapper.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import java.util.Map;
+import java.util.Set;
+import jakarta.faces.FacesWrapper;
+import jakarta.faces.context.FacesContext;
+import jakarta.faces.flow.Flow;
+
+/**
+ *
+ * @since 2.2
+ */
+public abstract class ConfigurableNavigationHandlerWrapper extends ConfigurableNavigationHandler
+    implements FacesWrapper<ConfigurableNavigationHandler>
+{
+    private ConfigurableNavigationHandler delegate;
+
+    @Deprecated
+    public ConfigurableNavigationHandlerWrapper()
+    {
+    }
+
+    public ConfigurableNavigationHandlerWrapper(ConfigurableNavigationHandler delegate)
+    {
+        this.delegate = delegate;
+    }
+
+    @Override
+    public NavigationCase getNavigationCase(FacesContext context, String fromAction, String outcome)
+    {
+        return getWrapped().getNavigationCase(context, fromAction, outcome);
+    }
+
+    @Override
+    public Map<String, Set<NavigationCase>> getNavigationCases()
+    {
+        return getWrapped().getNavigationCases();
+    }
+
+    @Override
+    public void handleNavigation(FacesContext context, String fromAction, String outcome)
+    {
+        getWrapped().handleNavigation(context, fromAction, outcome);
+    }
+
+    @Override
+    public void performNavigation(String outcome)
+    {
+        getWrapped().performNavigation(outcome);
+    }
+
+    @Override
+    public void inspectFlow(FacesContext context, Flow flow)
+    {
+        getWrapped().inspectFlow(context, flow);
+    }
+
+    @Override
+    public NavigationCase getNavigationCase(FacesContext context, String fromAction, String outcome, 
+            String toFlowDocumentId)
+    {
+        return getWrapped().getNavigationCase(context, fromAction, outcome, toFlowDocumentId);
+    }
+
+    public ConfigurableNavigationHandler getWrapped()
+    {
+        return delegate;
+    }
+}
diff --git a/api/src/main/java/jakarta/faces/application/FacesMessage.java b/api/src/main/java/jakarta/faces/application/FacesMessage.java
new file mode 100644
index 0000000..66c7451
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/FacesMessage.java
@@ -0,0 +1,295 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *<p>
+ * <code>FacesMessage</code> represents a single validation (or other) message, which is typically associated with a
+ * particular component in the view. A {@link FacesMessage} instance may be created based on a specific messageId. The
+ * specification defines the set of messageIds for which there must be {@link FacesMessage} instances.
+ * </p>
+ * 
+ * The implementation must take the following steps when creating FacesMessage instances given a messageId: 
+ * <ul>
+ * <li>Call
+ * {@link Application#getMessageBundle()}. If <code>non-null</code>, locate the named <code>ResourceBundle</code>, using
+ * the <code>Locale</code> from the current {@link jakarta.faces.component.UIViewRoot} and see if it has a value for
+ * the argument
+ * <code>messageId</code>. If it does, treat the value as the <code>summary</code> of the {@link FacesMessage}. If it
+ * does not, or if {@link Application#getMessageBundle()} returned null, look in the ResourceBundle named by the value
+ * of the constant {@link #FACES_MESSAGES} and see if it has a value for the argument messageId. If it does, treat the
+ * value as the summary of the <code>FacesMessage</code>. If it does not, there is no initialization information for the
+ * <code>FacesMessage</code> instance.</li>
+ * <li>In all cases, if a <code>ResourceBundle</code> hit is found for the
+ * <code>{messageId}</code>, look for further hits under the key <code>{messageId}_detail</code>. Use this value, if
+ * present, as the <code>detail</code> for the returned <code>FacesMessage</code>.</li> 
+ * <li>Make sure to perform any
+ * parameter substitution required for the <code>summary</code> and <code>detail</code> of the <code>FacesMessage</code>
+ * .</li> 
+ * </ul>
+ * 
+ */
+public class FacesMessage implements Serializable
+{
+    private static final long serialVersionUID = 4851488727794169661L;
+
+    /**
+     * <code>ResourceBundle</code> identifier for messages whose message identifiers are defined in the JavaServer Faces
+     * specification.
+     */
+    public static final String FACES_MESSAGES = "jakarta.faces.Messages";
+
+    /**
+     * Message severity level indicating an informational message rather than an error.
+     */
+    public static final FacesMessage.Severity SEVERITY_INFO = new Severity("INFO", 0);
+
+    /**
+     * Message severity level indicating that an error might have occurred.
+     */
+    public static final FacesMessage.Severity SEVERITY_WARN = new Severity("WARN", 1);
+
+    /**
+     * Message severity level indicating that an error has occurred.
+     */
+    public static final FacesMessage.Severity SEVERITY_ERROR = new Severity("ERROR", 2);
+
+    /**
+     * Message severity level indicating that a serious error has occurred.
+     */
+    public static final FacesMessage.Severity SEVERITY_FATAL = new Severity("FATAL", 3);
+
+    /**
+     * Immutable <code>Lis</code> of valid {@link FacesMessage.Severity}instances, in ascending order of their ordinal
+     * value.
+     */
+    public static final List VALUES;
+
+    /**
+     * Immutable <code>Map</code> of valid {@link FacesMessage.Severity}instances, keyed by name.
+     */
+    public static final Map VALUES_MAP;
+
+    static
+    {
+        Map<String, FacesMessage.Severity> map = new HashMap<String, Severity>(7);
+        map.put(SEVERITY_INFO.toString(), SEVERITY_INFO);
+        map.put(SEVERITY_WARN.toString(), SEVERITY_WARN);
+        map.put(SEVERITY_ERROR.toString(), SEVERITY_ERROR);
+        map.put(SEVERITY_FATAL.toString(), SEVERITY_FATAL);
+        VALUES_MAP = Collections.unmodifiableMap(map);
+
+        List<FacesMessage.Severity> severityList = new ArrayList<Severity>(map.values());
+        Collections.sort(severityList); // the JSF spec requires it to be sorted
+        VALUES = Collections.unmodifiableList(severityList);
+    }
+
+    private transient FacesMessage.Severity _severity;  // transient, b/c FacesMessage.Severity is not Serializable
+    private String _summary;
+    private String _detail;
+    private boolean _rendered;
+
+    /**
+     *Construct a new {@link FacesMessage} with no initial values. The severity is set to Severity.INFO.
+     */
+    public FacesMessage()
+    {
+        _severity = SEVERITY_INFO;
+        _rendered = false;
+    }
+
+    /**
+     * Construct a new {@link FacesMessage} with just a summary. The detail is null, the severity is set to
+     * <code>Severity.INFO</code>.
+     */
+    public FacesMessage(String summary)
+    {
+        _summary = summary;
+        _severity = SEVERITY_INFO;
+        _rendered = false;
+    }
+
+    /**
+     * Construct a new {@link FacesMessage} with the specified initial values. The severity is set to Severity.INFO.
+     * 
+     * @param summary
+     *            - Localized summary message text
+     * @param detail
+     *            - Localized detail message text
+     */
+    public FacesMessage(String summary, String detail)
+    {
+        _summary = summary;
+        _detail = detail;
+        _severity = SEVERITY_INFO;
+        _rendered = false;
+    }
+
+    /**
+     * Construct a new {@link FacesMessage}with the specified initial values.
+     * 
+     * @param severity
+     *            - the severity
+     * @param summary
+     *            - Localized summary message text
+     * @param detail
+     *            - Localized detail message text
+     */
+    public FacesMessage(FacesMessage.Severity severity, String summary, String detail)
+    {
+        if (severity == null)
+        {
+            throw new NullPointerException("severity");
+        }
+        _severity = severity;
+        _summary = summary;
+        _detail = detail;
+        _rendered = false;
+    }
+
+    /**
+     * 
+     * @return
+     */
+    public FacesMessage.Severity getSeverity()
+    {
+        return _severity;
+    }
+
+    /**
+     * Return the severity level.
+     */
+    public void setSeverity(FacesMessage.Severity severity)
+    {
+        if (severity == null)
+        {
+            throw new NullPointerException("severity");
+        }
+        _severity = severity;
+    }
+
+    /**
+     * Return the localized summary text.
+     */
+    public String getSummary()
+    {
+        return _summary;
+    }
+
+    /**
+     * Set the localized summary text.
+     * 
+     * @param summary
+     *            - The new localized summary text
+     */
+    public void setSummary(String summary)
+    {
+        _summary = summary;
+    }
+
+    /**
+     * 
+     * @return
+     */
+    public String getDetail()
+    {
+        if (_detail == null)
+        {
+            // Javadoc:
+            // If no localized detail text has been defined for this message, return the localized summary text instead
+            return _summary;
+        }
+        return _detail;
+    }
+
+    /**
+     * Set the localized detail text.
+     * 
+     * @param detail
+     *            - The new localized detail text
+     */
+    public void setDetail(String detail)
+    {
+        _detail = detail;
+    }
+
+    public boolean isRendered()
+    {
+        return _rendered;
+    }
+
+    public void rendered()
+    {
+        this._rendered = true;
+    }
+
+    private void writeObject(ObjectOutputStream out) throws IOException
+    {
+        out.defaultWriteObject();  // write summary, detail, rendered
+        out.writeInt(_severity._ordinal);  // FacesMessage.Severity is not Serializable, write ordinal only
+    }
+
+    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
+    {
+        in.defaultReadObject();  // read summary, detail, rendered
+
+        // FacesMessage.Severity is not Serializable, read ordinal and get related FacesMessage.Severity
+        int severityOrdinal = in.readInt();
+        _severity = (Severity) VALUES.get(severityOrdinal);
+    }
+
+    public static class Severity implements Comparable
+    {
+        private String _name;
+        private int _ordinal;
+
+        private Severity(String name, int ordinal)
+        {
+            _name = name;
+            _ordinal = ordinal;
+        }
+
+        public int getOrdinal()
+        {
+            return _ordinal;
+        }
+
+        @Override
+        public String toString()
+        {
+            return _name;
+        }
+
+        public int compareTo(Object o)
+        {
+            return getOrdinal() - ((Severity)o).getOrdinal();
+        }
+    }
+
+}
diff --git a/api/src/main/java/jakarta/faces/application/NavigationCase.java b/api/src/main/java/jakarta/faces/application/NavigationCase.java
new file mode 100644
index 0000000..86b68f0
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/NavigationCase.java
@@ -0,0 +1,354 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+import java.util.Map;
+
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
+import jakarta.faces.context.ExternalContext;
+import jakarta.faces.context.FacesContext;
+
+/**
+ * @since 2.0
+ */
+public class NavigationCase
+{
+    private String _condition;
+    private String _fromAction;
+    private String _fromOutcome;
+    private String _fromViewId;
+    private String _toViewId;
+    private String _toFlowDocumentId;
+    private boolean _includeViewParams;
+    private boolean _redirect;
+    private Map<String,List<String>> _parameters;
+
+    private ValueExpression _conditionExpression;
+    private ValueExpression _toViewIdExpression;
+
+    public NavigationCase(String fromViewId, String fromAction, String fromOutcome, String condition, String toViewId,
+            Map<String,List<String>> parameters, boolean redirect, boolean includeViewParams)
+    {
+        _condition = condition;
+        _fromViewId = fromViewId;
+        _fromAction = fromAction;
+        _fromOutcome = fromOutcome;
+        _toViewId = toViewId;
+        _toFlowDocumentId = null;
+        _redirect = redirect;
+        _includeViewParams = includeViewParams;
+        _parameters = parameters;
+    }
+    
+    public NavigationCase(String fromViewId, String fromAction, String fromOutcome, String condition, String toViewId,
+                          String toFlowDocumentId, Map<String,List<String>> parameters, boolean redirect,
+                          boolean includeViewParams)
+    {
+        _condition = condition;
+        _fromViewId = fromViewId;
+        _fromAction = fromAction;
+        _fromOutcome = fromOutcome;
+        _toViewId = toViewId;
+        _toFlowDocumentId = toFlowDocumentId;
+        _redirect = redirect;
+        _includeViewParams = includeViewParams;
+        _parameters = parameters;
+
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean equals(Object o)
+    {
+        if (o == this)
+        {
+            return true;
+        }
+        else if (o instanceof NavigationCase)
+        {
+            NavigationCase c = (NavigationCase) o;
+
+            return equals(_fromViewId, c._fromViewId) && equals(_fromAction, c._fromAction)
+                    && equals(_fromOutcome, c._fromOutcome) && equals(_condition, c._condition)
+                    && equals(_toViewId, c._toViewId) && _redirect == c._redirect
+                    && _includeViewParams == c._includeViewParams;
+        }
+        else
+        {
+            return false;
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public int hashCode()
+    {
+        return hash(_fromViewId) << 4 ^ hash(_fromAction) << 8 ^ hash(_fromOutcome) << 12 ^ hash(_condition) << 16
+                ^ hash(_toViewId) << 20 ^ hash(Boolean.valueOf(_redirect)) << 24
+                ^ hash(Boolean.valueOf(_includeViewParams));
+    }
+
+    public URL getActionURL(FacesContext context) throws MalformedURLException
+    {
+        ExternalContext externalContext = context.getExternalContext();
+        return new URL(externalContext.getRequestScheme(), externalContext.getRequestServerName(),
+                externalContext.getRequestServerPort(),
+                context.getApplication().getViewHandler().getActionURL(context, getToViewId(context)));
+    }
+
+    public Boolean getCondition(FacesContext context)
+    {
+        if (_condition == null)
+        {
+            return null;
+        }
+
+        ValueExpression expression = _getConditionExpression(context);
+
+        return Boolean.TRUE.equals(expression.getValue(context.getELContext()));
+    }
+
+    public String getFromAction()
+    {
+        return _fromAction;
+    }
+
+    public String getFromOutcome()
+    {
+        return _fromOutcome;
+    }
+
+    public String getFromViewId()
+    {
+        return _fromViewId;
+    }
+    
+    public URL getBookmarkableURL(FacesContext context) throws MalformedURLException
+    {
+        ExternalContext externalContext = context.getExternalContext();
+        return new URL(externalContext.getRequestScheme(),
+                externalContext.getRequestServerName(),
+                externalContext.getRequestServerPort(),
+                context.getApplication().getViewHandler().getBookmarkableURL(context, getToViewId(context), 
+                        _NavigationUtils.getEvaluatedNavigationParameters(context,
+                             getParameters()), isIncludeViewParams()));
+    }
+
+    public URL getResourceURL(FacesContext context) throws MalformedURLException
+    {
+        ExternalContext externalContext = context.getExternalContext();
+        return new URL(externalContext.getRequestScheme(), externalContext.getRequestServerName(),
+                       externalContext.getRequestServerPort(),
+                       context.getApplication().getViewHandler().getResourceURL(context, getToViewId(context)));
+    }
+    
+    public URL getRedirectURL(FacesContext context) throws MalformedURLException
+    {
+        ExternalContext externalContext = context.getExternalContext();
+        return new URL(externalContext.getRequestScheme(),
+                externalContext.getRequestServerName(),
+                externalContext.getRequestServerPort(),
+                context.getApplication().getViewHandler().getRedirectURL(context, getToViewId(context), 
+                        _NavigationUtils.getEvaluatedNavigationParameters(context,
+                             getParameters()), isIncludeViewParams()));
+    }
+    
+    public Map<String,List<String>> getParameters()
+    {
+        return _parameters;        
+    }
+
+    public String getToViewId(FacesContext context)
+    {
+        if (_toViewId == null)
+        {
+            return null;
+        }
+
+        ValueExpression expression = _getToViewIdExpression(context);
+        
+        return (String)( (expression.isLiteralText()) ? 
+                expression.getExpressionString() : expression.getValue(context.getELContext()) );
+    }
+
+    public boolean hasCondition()
+    {
+        return _condition != null && _condition.length() > 0;
+    }
+
+    public boolean isIncludeViewParams()
+    {
+        return _includeViewParams;
+    }
+
+    public boolean isRedirect()
+    {
+        return _redirect;
+    }
+    
+    /**
+     * @since 2.2
+     * @return 
+     */
+    public String getToFlowDocumentId()
+    {
+        return _toFlowDocumentId;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder builder = new StringBuilder(128);
+        builder.append("<navigation-case>\n");
+        
+        if (_fromViewId != null)
+        {
+            builder.append("  ");
+            builder.append("<from-view-id>");
+            builder.append(_fromViewId);
+            builder.append("</from-view-id>\n");
+        }
+        
+        if (_fromAction != null)
+        {
+            builder.append("  ");
+            builder.append("<from-action>");
+            builder.append(_fromAction);
+            builder.append("</from-action>\n");
+        }
+        
+        if (_fromOutcome != null)
+        {
+            builder.append("  ");
+            builder.append("<from-outcome>");
+            builder.append(_fromOutcome);
+            builder.append("</from-outcome>\n");
+        }
+        
+        if (_condition != null)
+        {
+            builder.append("  ");
+            builder.append("<if>");
+            builder.append(_condition);
+            builder.append("</if>\n");
+        }
+        
+        builder.append("  ");
+        builder.append("<to-view-id>");
+        builder.append(_toViewId);
+        builder.append("</to-view-id>\n");
+        
+        if (_toFlowDocumentId != null)
+        {
+            builder.append("  ");
+            builder.append("<to-flow-document-id>");
+            builder.append(_toFlowDocumentId);
+            builder.append("</to-flow-document-id>\n");
+        }
+        
+        if (_redirect)
+        {
+            builder.append("  ");
+            builder.append("<redirect include-view-params=\"");
+            builder.append(_includeViewParams);
+            if (_parameters != null && !_parameters.isEmpty())
+            {
+                builder.append("\">\n");
+                for (Map.Entry<String, List<String>> entry : _parameters.entrySet())
+                {
+                    String name = entry.getKey();
+                    for (String value : entry.getValue())
+                    {
+                        builder.append("    <view-param>\n");
+                        builder.append("      <name>");
+                        builder.append(name);
+                        builder.append("</name>\n");
+                        builder.append("      <value>");
+                        builder.append(value);
+                        builder.append("</value>\n");
+                        builder.append("    </view-param>\n");
+                    }
+                }
+                builder.append("  </redirect>\n");
+            }
+            else
+            {
+                builder.append("\"/>\n");
+            }
+        }
+        
+        builder.append("</navigation-case>");
+        
+        return builder.toString();
+    }
+
+    private ValueExpression _getConditionExpression(FacesContext context)
+    {
+        assert _condition != null;
+
+        if (_conditionExpression == null)
+        {
+            ExpressionFactory factory = context.getApplication().getExpressionFactory();
+            _conditionExpression = factory.createValueExpression(context.getELContext(), _condition, Boolean.class);
+        }
+
+        return _conditionExpression;
+    }
+
+    private ValueExpression _getToViewIdExpression(FacesContext context)
+    {
+        assert _toViewId != null;
+
+        if (_toViewIdExpression == null)
+        {
+            ExpressionFactory factory = context.getApplication().getExpressionFactory();
+            _toViewIdExpression = factory.createValueExpression(context.getELContext(), _toViewId, String.class);
+        }
+
+        return _toViewIdExpression;
+    }
+
+    private boolean equals(Object o1, Object o2)
+    {
+        if (o1 == null)
+        {
+            return o2 == null;
+        }
+        else
+        {
+            return o1.equals(o2);
+        }
+    }
+
+    private int hash(Object o)
+    {
+        return o == null ? 0 : o.hashCode();
+    }
+}
diff --git a/api/src/main/java/jakarta/faces/application/NavigationCaseWrapper.java b/api/src/main/java/jakarta/faces/application/NavigationCaseWrapper.java
new file mode 100644
index 0000000..9c38e69
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/NavigationCaseWrapper.java
@@ -0,0 +1,137 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+import java.util.Map;
+import jakarta.faces.FacesWrapper;
+import jakarta.faces.context.FacesContext;
+
+/**
+ * @since 2.2
+ */
+public abstract class NavigationCaseWrapper extends NavigationCase
+    implements FacesWrapper<NavigationCase>
+{
+    private NavigationCase delegate;
+    
+    @Deprecated
+    public NavigationCaseWrapper()
+    {
+        super(null, null, null, null, null, null, false, false);
+    }
+
+    public NavigationCaseWrapper(NavigationCase delegate)
+    {
+        this();
+        this.delegate = delegate;
+    }
+
+    public boolean equals(Object o)
+    {
+        return getWrapped().equals(o);
+    }
+
+    public int hashCode()
+    {
+        return getWrapped().hashCode();
+    }
+
+    public URL getActionURL(FacesContext context) throws MalformedURLException
+    {
+        return getWrapped().getActionURL(context);
+    }
+
+    public Boolean getCondition(FacesContext context)
+    {
+        return getWrapped().getCondition(context);
+    }
+
+    public String getFromAction()
+    {
+        return getWrapped().getFromAction();
+    }
+
+    public String getFromOutcome()
+    {
+        return getWrapped().getFromOutcome();
+    }
+
+    public String getFromViewId()
+    {
+        return getWrapped().getFromViewId();
+    }
+
+    public URL getBookmarkableURL(FacesContext context) throws MalformedURLException
+    {
+        return getWrapped().getBookmarkableURL(context);
+    }
+
+    public URL getResourceURL(FacesContext context) throws MalformedURLException
+    {
+        return getWrapped().getResourceURL(context);
+    }
+
+    public URL getRedirectURL(FacesContext context) throws MalformedURLException
+    {
+        return getWrapped().getRedirectURL(context);
+    }
+
+    public Map<String, List<String>> getParameters()
+    {
+        return getWrapped().getParameters();
+    }
+
+    public String getToViewId(FacesContext context)
+    {
+        return getWrapped().getToViewId(context);
+    }
+
+    public boolean hasCondition()
+    {
+        return getWrapped().hasCondition();
+    }
+
+    public boolean isIncludeViewParams()
+    {
+        return getWrapped().isIncludeViewParams();
+    }
+
+    public boolean isRedirect()
+    {
+        return getWrapped().isRedirect();
+    }
+
+    public String getToFlowDocumentId()
+    {
+        return getWrapped().getToFlowDocumentId();
+    }
+
+    public String toString()
+    {
+        return getWrapped().toString();
+    }
+    
+    public NavigationCase getWrapped()
+    {
+        return delegate;
+    }
+}
diff --git a/api/src/main/java/jakarta/faces/application/NavigationHandler.java b/api/src/main/java/jakarta/faces/application/NavigationHandler.java
new file mode 100644
index 0000000..56fdeed
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/NavigationHandler.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import jakarta.faces.context.FacesContext;
+
+/**
+ * see Javadoc of <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.html">JSF Specification</a>
+ */
+public abstract class NavigationHandler
+{
+    public abstract void handleNavigation(FacesContext context,
+                                          String fromAction,
+                                          String outcome);
+    
+    /**
+     * @since 2.2
+     * @param context
+     * @param fromAction
+     * @param outcome
+     * @param toFlowDocumentId 
+     */
+    public void handleNavigation(FacesContext context,
+                                 String fromAction,
+                                 String outcome,
+                                 String toFlowDocumentId)
+    {
+        this.handleNavigation(context, fromAction, outcome);
+    }
+}
diff --git a/api/src/main/java/jakarta/faces/application/NavigationHandlerWrapper.java b/api/src/main/java/jakarta/faces/application/NavigationHandlerWrapper.java
new file mode 100644
index 0000000..8246566
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/NavigationHandlerWrapper.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import jakarta.faces.FacesWrapper;
+import jakarta.faces.context.FacesContext;
+
+/**
+ *
+ * @since 2.2
+ */
+public abstract class NavigationHandlerWrapper extends NavigationHandler
+    implements FacesWrapper<NavigationHandler>
+{
+
+    private NavigationHandler delegate;
+
+    @Deprecated
+    public NavigationHandlerWrapper()
+    {
+    }
+
+    public NavigationHandlerWrapper(NavigationHandler delegate)
+    {
+        this.delegate = delegate;
+    }
+    
+    @Override
+    public void handleNavigation(FacesContext context, String fromAction, String outcome)
+    {
+        getWrapped().handleNavigation(context, fromAction, outcome);
+    }
+    
+    @Override
+    public void handleNavigation(FacesContext context,
+                                 String fromAction,
+                                 String outcome,
+                                 String toFlowDocumentId)
+    {
+        getWrapped().handleNavigation(context, fromAction, outcome, toFlowDocumentId);
+    }
+    
+    public NavigationHandler getWrapped()
+    {
+        return delegate;
+    }
+}
diff --git a/api/src/main/java/jakarta/faces/application/ProjectStage.java b/api/src/main/java/jakarta/faces/application/ProjectStage.java
new file mode 100644
index 0000000..abc0891
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ProjectStage.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+/**
+ * @since 2.0
+ */
+public enum ProjectStage
+{
+    Development,
+    Production,
+    SystemTest,
+    UnitTest;
+    
+    public static final String PROJECT_STAGE_JNDI_NAME = "java:comp/env/jsf/ProjectStage";
+
+    /**
+     * 
+     */
+    //@JSFWebConfigParam(defaultValue="Production",
+    //        expectedValues="Development, Production, SystemTest, UnitTest",
+    //        since="2.0")
+    public static final String PROJECT_STAGE_PARAM_NAME = "jakarta.faces.PROJECT_STAGE";
+}
diff --git a/api/src/main/java/jakarta/faces/application/ProtectedViewException.java b/api/src/main/java/jakarta/faces/application/ProtectedViewException.java
new file mode 100644
index 0000000..4cc2035
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ProtectedViewException.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import jakarta.faces.FacesException;
+
+public class ProtectedViewException extends FacesException
+{
+
+    public ProtectedViewException()
+    {
+    }
+
+    public ProtectedViewException(Throwable cause)
+    {
+        super(cause);
+    }
+
+    public ProtectedViewException(String message)
+    {
+        super(message);
+    }
+
+    public ProtectedViewException(String message, Throwable cause)
+    {
+        super(message, cause);
+    }
+
+}
diff --git a/api/src/main/java/jakarta/faces/application/Resource.java b/api/src/main/java/jakarta/faces/application/Resource.java
new file mode 100644
index 0000000..cfc9513
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/Resource.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Map;
+
+import jakarta.faces.context.FacesContext;
+
+/**
+ * @since 2.0
+ */
+public abstract class Resource extends ViewResource
+{
+    /**
+     * This constant is used as the key in the component attribute map of a composite component to 
+     * associate the component with its <code>Resource</code> instance.
+     */
+    public static final String COMPONENT_RESOURCE_KEY = "jakarta.faces.application.Resource.ComponentResource";
+
+    private String _contentType;
+    private String _libraryName;
+    private String _resourceName;
+
+    public String getContentType()
+    {
+        return _contentType;
+    }
+    
+    public abstract InputStream getInputStream() throws IOException;
+
+    public String getLibraryName()
+    {
+        return _libraryName;
+    }
+    
+    public abstract String getRequestPath();
+
+    public String getResourceName()
+    {
+        return _resourceName;
+    }
+    
+    public abstract Map<String, String> getResponseHeaders();
+    
+    public abstract URL getURL();
+
+    public void setContentType(String contentType)
+    {
+        _contentType = contentType;
+    }
+
+    public void setLibraryName(String libraryName)
+    {
+        _libraryName = libraryName;
+    }
+
+    public void setResourceName(String resourceName)
+    {
+        if (resourceName == null)
+        {
+            throw new NullPointerException();
+        }
+        _resourceName = resourceName;
+    }
+    
+    @Override
+    public String toString()
+    {
+        return getRequestPath();
+    }
+    
+    public abstract boolean userAgentNeedsUpdate(FacesContext context);
+}
diff --git a/api/src/main/java/jakarta/faces/application/ResourceDependencies.java b/api/src/main/java/jakarta/faces/application/ResourceDependencies.java
new file mode 100644
index 0000000..1fa3c44
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ResourceDependencies.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @since 2.0
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+@Inherited
+public @interface ResourceDependencies
+{
+    public ResourceDependency[] value();
+}
diff --git a/api/src/main/java/jakarta/faces/application/ResourceDependency.java b/api/src/main/java/jakarta/faces/application/ResourceDependency.java
new file mode 100644
index 0000000..a695481
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ResourceDependency.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Repeatable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @since 2.0
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+@Inherited
+@Repeatable(ResourceDependencies.class)
+public @interface ResourceDependency
+{
+    public String library() default "";
+    public String name();
+    public String target() default "";
+}
diff --git a/api/src/main/java/jakarta/faces/application/ResourceHandler.java b/api/src/main/java/jakarta/faces/application/ResourceHandler.java
new file mode 100644
index 0000000..8f0b725
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ResourceHandler.java
@@ -0,0 +1,202 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.stream.Stream;
+
+import jakarta.faces.context.FacesContext;
+
+import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFWebConfigParam;
+
+/**
+ * @since 2.0
+ */
+public abstract class ResourceHandler
+{
+    public static final String LOCALE_PREFIX = "jakarta.faces.resource.localePrefix";
+    public static final String RESOURCE_EXCLUDES_DEFAULT_VALUE = ".class .jsp .jspx .properties .xhtml .groovy";
+    
+    /**
+     * Space separated file extensions that will not be served by the default ResourceHandler implementation.
+     */
+    @JSFWebConfigParam(defaultValue=".class .jsp .jspx .properties .xhtml .groovy",since="2.0", group="resources")
+    public static final String RESOURCE_EXCLUDES_PARAM_NAME = "jakarta.faces.RESOURCE_EXCLUDES";
+    public static final String RESOURCE_IDENTIFIER = "/jakarta.faces.resource";
+    
+    /**
+     * @since 2.2
+     */
+    public static final String RESOURCE_CONTRACT_XML = "jakarta.faces.contract.xml";
+    
+    /**
+     * @since 2.2
+     */
+    public static final String WEBAPP_CONTRACTS_DIRECTORY_PARAM_NAME = "jakarta.faces.WEBAPP_CONTRACTS_DIRECTORY";
+
+    /**
+     * @since 2.2
+     */
+    public static final String WEBAPP_RESOURCES_DIRECTORY_PARAM_NAME = "jakarta.faces.WEBAPP_RESOURCES_DIRECTORY";
+
+    /**
+     * @since 2.3
+     */
+    public static final String JSF_SCRIPT_RESOURCE_NAME = "jsf.js";
+
+    /**
+     * @since 2.3
+     */
+    public static final String JSF_SCRIPT_LIBRARY_NAME = "jakarta.faces";
+    
+    private final static String MYFACES_JS_RESOURCE_NAME = "oamSubmit.js";
+    private final static String MYFACES_JS_RESOURCE_NAME_UNCOMPRESSED = "oamSubmit-uncompressed.js";
+    private final static String RENDERED_RESOURCES_SET = "org.apache.myfaces.RENDERED_RESOURCES_SET";
+    private final static String MYFACES_LIBRARY_NAME = "org.apache.myfaces";
+    private final static String RENDERED_MYFACES_JS = "org.apache.myfaces.RENDERED_MYFACES_JS";
+
+    public abstract Resource createResource(String resourceName);
+    
+    public abstract Resource createResource(String resourceName, String libraryName);
+    
+    public abstract Resource createResource(String resourceName, String libraryName, String contentType);
+    
+    public abstract String getRendererTypeForResourceName(String resourceName);
+    
+    public abstract void handleResourceRequest(FacesContext context) throws IOException;
+    
+    public abstract boolean isResourceRequest(FacesContext context);
+    
+    public abstract  boolean libraryExists(String libraryName);
+    
+    /**
+     * @since 2.2
+     * @param resourceId
+     * @return 
+     */
+    public Resource createResourceFromId(String resourceId)
+    {
+        return null;
+    }
+    
+    /**
+     * 
+     * @since 2.2
+     * @param context
+     * @param resourceName
+     * @return 
+     */
+    public ViewResource createViewResource(FacesContext context,
+                                       String resourceName)
+    {
+        return context.getApplication().getResourceHandler().createResource(resourceName);
+    }
+    
+    public boolean isResourceURL(java.lang.String url)
+    {
+        if (url == null)
+        {
+            throw new NullPointerException();
+        }
+        return url.contains(RESOURCE_IDENTIFIER);
+    }
+    
+    /**
+     * @since 2.3
+     * @param facesContext
+     * @param path
+     * @param options
+     * @return 
+     */
+    public Stream<java.lang.String> getViewResources(
+            FacesContext facesContext, String path, ResourceVisitOption... options)
+    {
+        return getViewResources(facesContext, path, Integer.MAX_VALUE, options);
+    }
+    
+    /**
+     * @since 2.3
+     * @param facesContext
+     * @param path
+     * @param maxDepth
+     * @param options
+     * @return 
+     */
+    public Stream<java.lang.String> getViewResources(FacesContext facesContext, 
+            String path, int maxDepth, ResourceVisitOption... options)
+    {
+        return null;
+    }
+    
+    /**
+     * @since 2.3
+     * @param facesContext
+     * @param resourceName
+     * @param libraryName
+     * @return 
+     */
+    public boolean isResourceRendered(FacesContext facesContext, String resourceName, String libraryName)
+    {
+        return getRenderedResources(facesContext).containsKey(
+                libraryName != null ? libraryName+'/'+resourceName : resourceName);
+    }
+    
+    /**
+     * @since 2.3
+     * @param facesContext
+     * @param resourceName
+     * @param libraryName 
+     */
+    public void markResourceRendered(FacesContext facesContext, String resourceName, String libraryName)
+    {
+        getRenderedResources(facesContext).put(
+                libraryName != null ? libraryName+'/'+resourceName : resourceName, Boolean.TRUE);
+        if (ResourceHandler.JSF_SCRIPT_LIBRARY_NAME.equals(libraryName) &&
+            ResourceHandler.JSF_SCRIPT_RESOURCE_NAME.equals(resourceName))
+        {
+            // If we are calling this method, it is expected myfaces core is being used as runtime and note
+            // oamSubmit script is included inside jsf.js, so mark this one too.
+            getRenderedResources(facesContext).put(
+                    MYFACES_LIBRARY_NAME+'/'+MYFACES_JS_RESOURCE_NAME, Boolean.TRUE);
+        }
+    }
+    
+    /**
+     * Return a set of already rendered resources by this renderer on the current
+     * request. 
+     * 
+     * @param facesContext
+     * @return
+     */
+    @SuppressWarnings("unchecked")
+    private static Map<String, Boolean> getRenderedResources(FacesContext facesContext)
+    {
+        Map<String, Boolean> map = (Map<String, Boolean>) facesContext.getViewRoot().getTransientStateHelper()
+                .getTransient(RENDERED_RESOURCES_SET);
+        if (map == null)
+        {
+            map = new HashMap<String, Boolean>();
+            facesContext.getViewRoot().getTransientStateHelper().putTransient(RENDERED_RESOURCES_SET,map);
+        }
+        return map;
+    }
+
+}
diff --git a/api/src/main/java/jakarta/faces/application/ResourceHandlerWrapper.java b/api/src/main/java/jakarta/faces/application/ResourceHandlerWrapper.java
new file mode 100644
index 0000000..9f4ad5d
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ResourceHandlerWrapper.java
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import java.io.IOException;
+import java.util.stream.Stream;
+
+import jakarta.faces.FacesWrapper;
+import jakarta.faces.context.FacesContext;
+
+/**
+ * @since 2.0
+ */
+public abstract class ResourceHandlerWrapper extends ResourceHandler
+    implements FacesWrapper<ResourceHandler>
+{
+    private ResourceHandler delegate;
+
+    @Deprecated
+    public ResourceHandlerWrapper()
+    {
+    }
+
+    public ResourceHandlerWrapper(ResourceHandler delegate)
+    {
+        this.delegate = delegate;
+    }
+    
+    @Override
+    public Resource createResource(String resourceName)
+    {
+        return getWrapped().createResource(resourceName);
+    }
+    
+    @Override
+    public Resource createResource(String resourceName, String libraryName)
+    {
+        return getWrapped().createResource(resourceName, libraryName);
+    }
+    
+    @Override
+    public Resource createResource(String resourceName, String libraryName, String contentType)
+    {
+        return getWrapped().createResource(resourceName, libraryName, contentType);
+    }
+    
+    @Override
+    public String getRendererTypeForResourceName(String resourceName)
+    {
+        return getWrapped().getRendererTypeForResourceName(resourceName);
+    }
+    
+    @Override
+    public void handleResourceRequest(FacesContext context) throws IOException
+    {
+        getWrapped().handleResourceRequest(context);
+    }
+    
+    @Override
+    public boolean isResourceRequest(FacesContext context)
+    {
+        return getWrapped().isResourceRequest(context);
+    }
+    
+    @Override
+    public boolean libraryExists(String libraryName)
+    {
+        return getWrapped().libraryExists(libraryName);
+    }
+
+    @Override
+    public Resource createResourceFromId(String resourceId)
+    {
+        return getWrapped().createResourceFromId(resourceId);
+    }
+
+    @Override
+    public ViewResource createViewResource(FacesContext context, String resourceName)
+    {
+        return getWrapped().createViewResource(context, resourceName);
+    }
+
+    @Override
+    public boolean isResourceURL(String url)
+    {
+        return getWrapped().isResourceURL(url);
+    }
+    
+    public ResourceHandler getWrapped()
+    {
+        return delegate;
+    }
+
+    /**
+     * @since 2.3
+     * @param facesContext
+     * @param path
+     * @param maxDepth
+     * @param options
+     * @return 
+     */
+    @Override
+    public Stream<String> getViewResources(
+            FacesContext facesContext, String path, int maxDepth, ResourceVisitOption... options)
+    {
+        return getWrapped().getViewResources(facesContext, path, maxDepth, options);
+    }
+
+    /**
+     * @since 2.3
+     * @param facesContext
+     * @param path
+     * @param options
+     * @return 
+     */
+    @Override
+    public Stream<String> getViewResources(FacesContext facesContext, String path, ResourceVisitOption... options)
+    {
+        return getWrapped().getViewResources(facesContext, path, options);
+    }
+
+    /**
+     * @since 2.3
+     * @param facesContext
+     * @param resourceName
+     * @param libraryName 
+     */
+    @Override
+    public void markResourceRendered(FacesContext facesContext, String resourceName, String libraryName)
+    {
+        getWrapped().markResourceRendered(facesContext, resourceName, libraryName);
+    }
+
+    /**
+     * @since 2.3
+     * @param facesContext
+     * @param resourceName
+     * @param libraryName
+     * @return 
+     */
+    @Override
+    public boolean isResourceRendered(FacesContext facesContext, String resourceName, String libraryName)
+    {
+        return getWrapped().isResourceRendered(facesContext, resourceName, libraryName);
+    }
+}
diff --git a/api/src/main/java/jakarta/faces/application/ResourceVisitOption.java b/api/src/main/java/jakarta/faces/application/ResourceVisitOption.java
new file mode 100644
index 0000000..114a1ba
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ResourceVisitOption.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+/**
+ *
+ */
+public enum ResourceVisitOption
+{
+    TOP_LEVEL_VIEWS_ONLY
+}
diff --git a/api/src/main/java/jakarta/faces/application/ResourceWrapper.java b/api/src/main/java/jakarta/faces/application/ResourceWrapper.java
new file mode 100644
index 0000000..4f275d1
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ResourceWrapper.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Map;
+
+import jakarta.faces.FacesWrapper;
+import jakarta.faces.context.FacesContext;
+
+/**
+ * @since 2.0
+ */
+public abstract class ResourceWrapper extends Resource
+    implements FacesWrapper<Resource>
+{
+    private Resource delegate;
+
+    @Deprecated
+    public ResourceWrapper()
+    {
+    }
+
+    public ResourceWrapper(Resource delegate)
+    {
+        this.delegate = delegate;
+    }
+    
+    @Override
+    public InputStream getInputStream() throws IOException
+    {
+        return getWrapped().getInputStream();
+    }
+
+    @Override
+    public String getRequestPath()
+    {
+        return getWrapped().getRequestPath();
+    }
+
+    @Override
+    public Map<String, String> getResponseHeaders()
+    {
+        return getWrapped().getResponseHeaders();
+    }
+
+    @Override
+    public URL getURL()
+    {
+        return getWrapped().getURL();
+    }
+
+    @Override
+    public boolean userAgentNeedsUpdate(FacesContext context)
+    {
+        return getWrapped().userAgentNeedsUpdate(context);
+    }
+    
+    public Resource getWrapped()
+    {
+        return delegate;
+    }
+
+    @Override
+    public void setResourceName(String resourceName)
+    {
+        getWrapped().setResourceName(resourceName);
+    }
+
+    @Override
+    public void setLibraryName(String libraryName)
+    {
+        getWrapped().setLibraryName(libraryName);
+    }
+
+    @Override
+    public void setContentType(String contentType)
+    {
+        getWrapped().setContentType(contentType);
+    }
+
+    @Override
+    public String getResourceName()
+    {
+        return getWrapped().getResourceName();
+    }
+
+    @Override
+    public String getLibraryName()
+    {
+        return getWrapped().getLibraryName();
+    }
+
+    @Override
+    public String getContentType()
+    {
+        return getWrapped().getContentType();
+    }
+
+}
diff --git a/api/src/main/java/jakarta/faces/application/StateManager.java b/api/src/main/java/jakarta/faces/application/StateManager.java
new file mode 100644
index 0000000..76f866f
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/StateManager.java
@@ -0,0 +1,352 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+
+import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFWebConfigParam;
+
+import java.io.IOException;
+
+import jakarta.faces.component.UIViewRoot;
+import jakarta.faces.context.FacesContext;
+
+/**
+ * Responsible for storing sufficient information about a component tree so that an identical tree can later be
+ * recreated.
+ * <p>
+ * It is up to the concrete implementation to decide whether to use information from the "view template" that was used
+ * to first create the view, or whether to store sufficient information to enable the view to be restored without any
+ * reference to the original template. However as JSF components have mutable fields that can be set by code, and
+ * affected by user input, at least some state does need to be kept in order to recreate a previously-existing component
+ * tree.
+ * <p>
+ * There are two different options defined by the specification: "client" and "server" state.
+ * <p>
+ * When "client" state is configured, all state information required to create the tree is embedded within the data
+ * rendered to the client. Note that because data received from a remote client must always be treated as "tainted",
+ * care must be taken when using such data. Some StateManager implementations may use encryption to ensure that clients
+ * cannot modify the data, and that the data received on postback is therefore trustworthy.
+ * <p>
+ * When "server" state is configured, the data is saved somewhere "on the back end", and (at most) a token is embedded
+ * in the data rendered to the user.
+ * <p>
+ * This class is usually invoked by a concrete implementation of ViewHandler.
+ * <p>
+ * Note that class ViewHandler isolates JSF components from the details of the request format. This class isolates JSF
+ * components from the details of the response format. Because request and response are usually tightly coupled, the
+ * StateManager and ViewHandler implementations are also usually fairly tightly coupled (ie the ViewHandler/StateManager
+ * implementations come as pairs).
+ * <p>
+ * See also the <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.html">JSF Specification</a>
+ */
+public abstract class StateManager
+{
+    /**
+     * Define the state method to be used. There are two different options defined by the 
+     * specification: "client" and "server" state.
+     * <p>
+     * When "client" state is configured, all state information required to create the tree is embedded within
+     * the data rendered to the client. Note that because data received from a remote client must always be
+     * treated as "tainted", care must be taken when using such data. Some StateManager implementations may
+     * use encryption to ensure that clients cannot modify the data, and that the data received on postback
+     * is therefore trustworthy.
+     * </p>
+     * <p>
+     * When "server" state is configured, the data is saved somewhere "on the back end", and (at most) a
+     * token is embedded in the data rendered to the user.
+     * </p>
+     */
+    @JSFWebConfigParam(defaultValue="server", expectedValues="server,client",
+            since="1.1", group="state", tags="performance", ignoreUpperLowerCase = true,
+            desc="Define the state method to be used. There are two different options "
+                 + "defined by the specification: 'client' and 'server' state.")
+    public static final String STATE_SAVING_METHOD_PARAM_NAME = "jakarta.faces.STATE_SAVING_METHOD";
+    public static final String STATE_SAVING_METHOD_CLIENT = "client";
+    public static final String STATE_SAVING_METHOD_SERVER = "server";
+    
+    /**
+     * Indicate the viewId(s) separated by commas that should be saved and restored fully,
+     * without use Partial State Saving (PSS).
+     */
+    @JSFWebConfigParam(since="2.0", group="state")
+    public static final String FULL_STATE_SAVING_VIEW_IDS_PARAM_NAME = "jakarta.faces.FULL_STATE_SAVING_VIEW_IDS";
+    
+    /**
+     * Enable or disable partial state saving algorithm.
+     *  
+     * <p>Partial State Saving algorithm allows to reduce the size of the state required to save a view, 
+     * keeping track of the "delta" or differences between the view build by first time and the current 
+     * state of the view.</p>
+     * <p>If the webapp faces-config file version is 2.0 or upper the default value is true, otherwise is false.</p>   
+     */
+    @JSFWebConfigParam(expectedValues="true,false", since="2.0", defaultValue="true (false with 1.2 webapps)",
+                       tags="performance", group="state")
+    public static final String PARTIAL_STATE_SAVING_PARAM_NAME = "jakarta.faces.PARTIAL_STATE_SAVING";
+    private Boolean _savingStateInClient = null;
+
+    public static final String IS_BUILDING_INITIAL_STATE = "jakarta.faces.IS_BUILDING_INITIAL_STATE";
+    
+    public static final String IS_SAVING_STATE = "jakarta.faces.IS_SAVING_STATE";
+
+    /**
+     * Indicate if the state should be serialized before save it on the session.
+     * <p>
+     * Only applicable if state saving method is "server" (= default).
+     * If <code>true</code> (default) the state will be serialized to a byte stream before it is
+     * written to the session.
+     * If <code>false</code> the state will not be serialized to a byte stream.
+     * </p>
+     */
+    @JSFWebConfigParam(since="2.2", group="state", tags="performance", 
+            defaultValue="false", expectedValues="true,false")
+    public static final java.lang.String SERIALIZE_SERVER_STATE_PARAM_NAME = "jakarta.faces.SERIALIZE_SERVER_STATE";
+    
+    /**
+     * Invokes getTreeStructureToSave and getComponentStateToSave, then return an object that wraps the two resulting
+     * objects. This object can then be passed to method writeState.
+     * <p>
+     * Deprecated; use saveView instead.
+     * 
+     * @deprecated
+     */
+    public StateManager.SerializedView saveSerializedView(FacesContext context)
+    {
+        Object savedView = saveView(context);
+        if (savedView != null && savedView instanceof Object[])
+        {
+            Object[] structureAndState = (Object[]) savedView;
+            if (structureAndState.length == 2)
+            {
+                return new StateManager.SerializedView(structureAndState[0], structureAndState[1]);
+            }
+        }
+        
+        return null;
+    }
+
+    /**
+     * Returns an object that is sufficient to recreate the component tree that is the viewroot of the specified
+     * context.
+     * <p>
+     * The return value is suitable for passing to method writeState.
+     * 
+     * @since 1.2
+     */
+    @Deprecated
+    public Object saveView(FacesContext context)
+    {
+        StateManager.SerializedView serializedView = saveSerializedView(context);
+        if (serializedView == null)
+        {
+            return null;
+        }
+
+        Object[] structureAndState = new Object[2];
+        structureAndState[0] = serializedView.getStructure();
+        structureAndState[1] = serializedView.getState();
+
+        return structureAndState;
+    }
+
+    /**
+     * Return data that is sufficient to recreate the component tree that is the viewroot of the specified context, but
+     * without restoring the state in the components.
+     * <p>
+     * Using this data, a tree of components which has the same "shape" as the original component tree can be recreated.
+     * However the component instances themselves will have only their default values, ie their member fields will not
+     * have been set to the original values.
+     * <p>
+     * Deprecated; use saveView instead.
+     * 
+     * @deprecated
+     */
+    protected Object getTreeStructureToSave(FacesContext context)
+    {
+        return null;
+    }
+
+    /**
+     * Return data that can be applied to a component tree created using the "getTreeStructureToSave" method.
+     * <p>
+     * Deprecated; use saveView instead.
+     * 
+     * @deprecated
+     */
+    protected Object getComponentStateToSave(FacesContext context)
+    {
+        return null;
+    }
+
+    /**
+     * Associate the provided state object with the current response being generated.
+     * <p>
+     * When client-side state is enabled, it is expected that method writes the data contained in the state parameter to
+     * the response somehow.
+     * <p>
+     * When server-side state is enabled, at most a "token" is expected to be written.
+     * <p>
+     * Deprecated; use writeState(FacesContext, Object) instead. This method was abstract in JSF1.1, but is now an empty
+     * non-abstract method so that old classes that implement this method continue to work, while new classes can just
+     * override the new writeState method rather than this one.
+     * 
+     * @throws IOException
+     *             never
+     * 
+     * @deprecated
+     */
+    public void writeState(FacesContext context, StateManager.SerializedView state)
+        throws IOException
+    {
+        if (state != null)
+        {
+            writeState(context, new Object[]{state.getStructure(), state.getState()});
+        }
+    }
+
+    /**
+     * Associate the provided state object with the current response being generated.
+     * <p>
+     * When client-side state is enabled, it is expected that method writes the data contained in the state parameter to
+     * the response somehow.
+     * <p>
+     * When server-side state is enabled, at most a "token" is expected to be written.
+     * <p>
+     * This method should be overridden by subclasses. It is not abstract because a default implementation is provided
+     * that forwards to the old writeState method; this allows subclasses of StateManager written using the JSF1.1 API
+     * to continue to work.
+     * <p>
+     * 
+     * @since 1.2
+     */
+    public void writeState(FacesContext context, Object state) throws IOException
+    {
+        if (!(state instanceof Object[]))
+        {
+            return;
+        }
+        Object[] structureAndState = (Object[]) state;
+        if (structureAndState.length < 2)
+        {
+            return;
+        }
+
+        writeState(context, new StateManager.SerializedView(structureAndState[0], structureAndState[1]));
+    }
+    
+    /**
+     * TODO: This method should be called from somewhere when ajax response is created to update the state saving param
+     * on client. The place where this method is called is an implementation detail, so there is no references about
+     * from where in the spec javadoc. 
+     * 
+     * @since 2.0
+     * @param context
+     * @return
+     */
+    public String getViewState(FacesContext context)
+    {
+        return context.getRenderKit().getResponseStateManager().getViewState(context, saveView(context));
+    }
+
+    @Deprecated
+    public abstract UIViewRoot restoreView(FacesContext context, String viewId, String renderKitId);
+
+    /**
+     * @deprecated
+     */
+    protected UIViewRoot restoreTreeStructure(FacesContext context, String viewId, String renderKitId)
+    {
+        return null;
+    }
+
+    /**
+     * @deprecated
+     */
+    protected void restoreComponentState(FacesContext context, UIViewRoot viewRoot, String renderKitId)
+    {
+        // default impl does nothing as per JSF 1.2 javadoc
+    }
+
+    public boolean isSavingStateInClient(FacesContext context)
+    {
+        if (context == null)
+        {
+            throw new NullPointerException("context");
+        }
+        if (_savingStateInClient != null)
+        {
+            return _savingStateInClient.booleanValue();
+        }
+
+        String stateSavingMethod = context.getExternalContext().getInitParameter(STATE_SAVING_METHOD_PARAM_NAME);
+        if (stateSavingMethod == null)
+        {
+            _savingStateInClient = Boolean.FALSE; // Specs 10.1.3: default server saving
+            context.getExternalContext().log("No state saving method defined, assuming default server state saving");
+        }
+        else if (stateSavingMethod.equalsIgnoreCase(STATE_SAVING_METHOD_CLIENT))
+        {
+            _savingStateInClient = Boolean.TRUE;
+        }
+        else if (stateSavingMethod.equalsIgnoreCase(STATE_SAVING_METHOD_SERVER))
+        {
+            _savingStateInClient = Boolean.FALSE;
+        }
+        else
+        {
+            _savingStateInClient = Boolean.FALSE; // Specs 10.1.3: default server saving
+            context.getExternalContext().log(
+                "Illegal state saving method '" + stateSavingMethod + "', default server state saving will be used");
+        }
+        return _savingStateInClient.booleanValue();
+    }
+
+    /**
+     * @deprecated
+     */
+    public class SerializedView
+    {
+        private Object _structure;
+        private Object _state;
+
+        /**
+         * @deprecated
+         */
+        public SerializedView(Object structure, Object state)
+        {
+            _structure = structure;
+            _state = state;
+        }
+
+        /**
+         * @deprecated
+         */
+        public Object getStructure()
+        {
+            return _structure;
+        }
+
+        /**
+         * @deprecated
+         */
+        public Object getState()
+        {
+            return _state;
+        }
+    }
+}
diff --git a/api/src/main/java/jakarta/faces/application/StateManagerWrapper.java b/api/src/main/java/jakarta/faces/application/StateManagerWrapper.java
new file mode 100644
index 0000000..d2db883
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/StateManagerWrapper.java
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import java.io.IOException;
+import jakarta.faces.component.UIViewRoot;
+import jakarta.faces.context.FacesContext;
+import jakarta.faces.FacesWrapper;
+
+/**
+ * see Javadoc of <a href="http://java.sun.com/j2ee/javaserverfaces/1.2/docs/api/index.html">JSF Specification</a>
+ */
+public abstract class StateManagerWrapper extends StateManager implements FacesWrapper<StateManager>
+{
+    private StateManager delegate;
+
+    @Deprecated
+    public StateManagerWrapper()
+    {
+    }
+
+    public StateManagerWrapper(StateManager delegate)
+    {
+        this.delegate = delegate;
+    }
+
+    public StateManager getWrapped()
+    {
+        return delegate;
+    }
+
+    @SuppressWarnings("deprecation")
+    @Override
+    public StateManager.SerializedView saveSerializedView(FacesContext context)
+    {
+        return getWrapped().saveSerializedView(context);
+    }
+
+    @Override
+    public Object saveView(FacesContext context)
+    {
+        return getWrapped().saveView(context);
+    }
+
+    @Override
+    public boolean isSavingStateInClient(FacesContext context)
+    {
+        return getWrapped().isSavingStateInClient(context);
+    }
+
+    @SuppressWarnings("deprecation")
+    @Override
+    protected Object getTreeStructureToSave(FacesContext context)
+    {
+        return getWrapped().getTreeStructureToSave(context);
+    }
+
+    @SuppressWarnings("deprecation")
+    @Override
+    protected Object getComponentStateToSave(FacesContext context)
+    {
+        return getWrapped().getComponentStateToSave(context);
+    }
+
+    @SuppressWarnings("deprecation")
+    @Override
+    public void writeState(FacesContext context, StateManager.SerializedView state) throws IOException
+    {
+        getWrapped().writeState(context, state);
+    }
+
+    @Override
+    public void writeState(FacesContext context, Object state) throws IOException
+    {
+        getWrapped().writeState(context, state);
+    }
+
+    @Override
+    public UIViewRoot restoreView(FacesContext context, String viewId, String renderKitId)
+    {
+        return getWrapped().restoreView(context, viewId, renderKitId);
+    }
+
+    @SuppressWarnings("deprecation")
+    @Override
+    protected UIViewRoot restoreTreeStructure(FacesContext context, String viewId, String renderKitId)
+    {
+        return getWrapped().restoreTreeStructure(context, viewId, renderKitId);
+    }
+
+    @SuppressWarnings("deprecation")
+    @Override
+    protected void restoreComponentState(FacesContext context, UIViewRoot viewRoot, String renderKitId)
+    {
+        getWrapped().restoreComponentState(context, viewRoot, renderKitId);
+    }
+
+    @Override
+    public String getViewState(FacesContext context)
+    {
+        return getWrapped().getViewState(context);
+    }
+
+}
diff --git a/api/src/main/java/jakarta/faces/application/ViewExpiredException.java b/api/src/main/java/jakarta/faces/application/ViewExpiredException.java
new file mode 100644
index 0000000..ed6780b
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ViewExpiredException.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import jakarta.faces.FacesException;
+
+/**
+ * See Javadoc of <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.html">JSF Specification</a>
+ */
+public class ViewExpiredException extends FacesException
+{
+
+    private String viewId;
+
+    public ViewExpiredException()
+    {
+    }
+
+    public ViewExpiredException(String viewId)
+    {
+        this.viewId = viewId;
+    }
+
+    public ViewExpiredException(String message, String viewId)
+    {
+        super(message);
+        this.viewId = viewId;
+    }
+
+    public ViewExpiredException(String message, Throwable cause, String viewId)
+    {
+        super(message, cause);
+        this.viewId = viewId;
+    }
+
+    public ViewExpiredException(Throwable cause, String viewId)
+    {
+        super(cause);
+        this.viewId = viewId;
+    }
+
+    public String getViewId()
+    {
+        return viewId;
+    }
+}
diff --git a/api/src/main/java/jakarta/faces/application/ViewHandler.java b/api/src/main/java/jakarta/faces/application/ViewHandler.java
new file mode 100644
index 0000000..8735a3f
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ViewHandler.java
@@ -0,0 +1,450 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Stream;
+
+import jakarta.faces.FacesException;
+import jakarta.faces.component.UIViewRoot;
+import jakarta.faces.context.ExternalContext;
+import jakarta.faces.context.FacesContext;
+import jakarta.faces.view.ViewDeclarationLanguage;
+
+import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFWebConfigParam;
+
+/**
+ * A ViewHandler manages the component-tree-creation and component-tree-rendering parts of a request lifecycle (ie
+ * "create view", "restore view" and "render response").
+ * <p>
+ * A ViewHandler is responsible for generating the component tree when a new view is requested; see method "createView".
+ * <p>
+ * When the user performs a "postback", ie activates a UICommand component within a view, then the ViewHandler is
+ * responsible for recreating a view tree identical to the one used previously to render that view; see method
+ * "restoreView".
+ * <p>
+ * And the ViewHandler is also responsible for rendering the final output to be sent to the user by invoking the
+ * rendering methods on components; see method "renderView".
+ * <p>
+ * This class also isolates callers from the underlying request/response system. In particular, this class does not
+ * explicitly depend upon the javax.servlet apis. This allows JSF to be used on servers that do not implement the
+ * servlet API (for example, plain CGI).
+ * <p>
+ * Examples:
+ * <ul>
+ * <li>A JSP ViewHandler exists for using "jsp" pages as the presentation technology. This class then works together
+ * with a taghandler class and a jsp servlet class to implement the methods on this abstract class definition.
+ * <li>A Facelets ViewHandler instead uses an xml file to define the components and non-component data that make up a
+ * specific view.
+ * </ul>
+ * Of course there is no reason why the "template" needs to be a textual file. A view could be generated based on data
+ * in a database, or many other mechanisms.
+ * <p>
+ * This class is expected to be invoked via the concrete implementation of {@link jakarta.faces.lifecycle.Lifecycle}.
+ * <p>
+ * For the official specification for this class, see <a
+ * href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.html">JSF Specification</a>.
+ */
+public abstract class ViewHandler
+{
+    public static final String CHARACTER_ENCODING_KEY = "jakarta.faces.request.charset";
+    public static final String DEFAULT_FACELETS_SUFFIX = ".xhtml";
+    public static final String DEFAULT_SUFFIX = ".xhtml .view.xml .jsp";
+    
+    /**
+     * Indicate the default suffixes, separated by spaces to derive the default file URI 
+     * used by JSF to create views and render pages. 
+     */
+    @JSFWebConfigParam(defaultValue=".xhtml .view.xml .jsp", since="1.1", group="viewhandler")
+    public static final String DEFAULT_SUFFIX_PARAM_NAME = "jakarta.faces.DEFAULT_SUFFIX";
+    
+    /**
+     * The default extension used to handle facelets pages.
+     */
+    @JSFWebConfigParam(defaultValue=".xhtml", since="2.0", group="viewhandler")
+    public static final String FACELETS_SUFFIX_PARAM_NAME = "jakarta.faces.FACELETS_SUFFIX";
+    
+    /**
+     * Set of extensions handled by facelets, separated by ';'.
+     */
+    @JSFWebConfigParam(since="2.0", group="viewhandler")
+    public static final String FACELETS_VIEW_MAPPINGS_PARAM_NAME = "jakarta.faces.FACELETS_VIEW_MAPPINGS";
+    // TODO: Notify EG on that last constant. Using the Facelets' param as well for backward compatiblity is 
+    //       silly. If an application uses Facelets then they'll be using facelets.jar. Once they chose to 
+    //       remove that JAR, they ought to be aware that some changes could be needed, like fixing their 
+    //       context-param. -= Simon Lessard =-
+
+    @JSFWebConfigParam(since="2.2")
+    public static final java.lang.String DISABLE_FACELET_JSF_VIEWHANDLER_PARAM_NAME = 
+        "jakarta.faces.DISABLE_FACELET_JSF_VIEWHANDLER";
+    
+    /**
+     * Define the default buffer size value passed to ExternalContext.setResponseBufferResponse() and in a
+     * servlet environment to HttpServletResponse.setBufferSize().
+     */
+    @JSFWebConfigParam(since = "2.0", alias = "facelets.BUFFER_SIZE", classType = "java.lang.Integer",
+            tags = "performance", defaultValue="1024",
+            desc = "Define the default buffer size value passed to ExternalContext.setResponseBufferResponse() and in "
+                   + "a servlet environment to HttpServletResponse.setBufferSize()")
+    public static final java.lang.String FACELETS_BUFFER_SIZE_PARAM_NAME = "jakarta.faces.FACELETS_BUFFER_SIZE";
+    
+    /**
+     * Set of class names, separated by ';', implementing TagDecorator interface, used to transform
+     * a view definition in a facelet abstract syntax tree, that is used later to generate a component tree.
+     */
+    @JSFWebConfigParam(since = "2.0", alias = "facelets.DECORATORS")
+    public static final java.lang.String FACELETS_DECORATORS_PARAM_NAME = "jakarta.faces.FACELETS_DECORATORS";
+    
+    /**
+     * Set of .taglib.xml files, separated by ';' that should be loaded by facelet engine.
+     */
+    @JSFWebConfigParam(since = "2.0",
+            desc = "Set of .taglib.xml files, separated by ';' that should be loaded by facelet engine.",
+            alias = "facelets.LIBRARIES")
+    public static final java.lang.String FACELETS_LIBRARIES_PARAM_NAME = "jakarta.faces.FACELETS_LIBRARIES";
+    
+    /**
+     * Define the period used to refresh the facelet abstract syntax tree from the view definition file. 
+     *
+     * <p>By default is infinite (no active).</p>
+     */
+    @JSFWebConfigParam(since = "2.0", defaultValue = "-1", alias = "facelets.REFRESH_PERIOD",
+            classType = "java.lang.Long", tags = "performance")
+    public static final java.lang.String FACELETS_REFRESH_PERIOD_PARAM_NAME = "jakarta.faces.FACELETS_REFRESH_PERIOD";
+
+    /**
+     * Skip comments found on a facelet file.
+     */
+    @JSFWebConfigParam(since = "2.0", alias = "facelets.SKIP_COMMENTS")
+    public static final java.lang.String FACELETS_SKIP_COMMENTS_PARAM_NAME = "jakarta.faces.FACELETS_SKIP_COMMENTS";
+    
+    /**
+     * @since JSF 1.2
+     */
+    public String calculateCharacterEncoding(FacesContext context)
+    {
+        String encoding = null;
+        ExternalContext externalContext = context.getExternalContext();
+        String contentType = externalContext.getRequestHeaderMap().get("Content-Type");
+        int indexOf = contentType == null ? -1 : contentType.indexOf("charset");
+        if (indexOf != -1)
+        {
+            String tempEnc = contentType.substring(indexOf); // charset=UTF-8
+            encoding = tempEnc.substring(tempEnc.indexOf('=') + 1); // UTF-8
+            if (encoding.length() == 0)
+            {
+                encoding = null;
+            }
+        }
+        if (encoding == null)
+        {
+            boolean sessionAvailable = externalContext.getSession(false) != null;
+            if (sessionAvailable)
+            {
+                Object sessionParam = externalContext.getSessionMap().get(CHARACTER_ENCODING_KEY);
+                if (sessionParam != null)
+                {
+                    encoding = sessionParam.toString();
+                }
+            }
+        }
+
+        return encoding;
+    }
+
+    /**
+     * Return the Locale object that should be used when rendering this view to the current user.
+     * <p>
+     * Some request protocols allow an application user to specify what locale they prefer the response to be in. For
+     * example, HTTP requests can specify the "accept-language" header.
+     * <p>
+     * Method {@link Application#getSupportedLocales()} defines what locales this JSF
+     * application is capable of supporting.
+     * <p>
+     * This method should match such sources of data up and return the Locale object that is the best choice for
+     * rendering the current application to the current user.
+     */
+    public abstract Locale calculateLocale(FacesContext context);
+
+    /**
+     * Return the id of an available render-kit that should be used to map the JSF components into user presentation.
+     * <p>
+     * The render-kit selected (eg html, xhtml, pdf, xul, ...) may depend upon the user, properties associated with the
+     * request, etc.
+     */
+    public abstract String calculateRenderKitId(FacesContext context);
+
+    /**
+     * Build a root node for a component tree.
+     * <p>
+     * When a request is received, this method is called if restoreView returns null, ie this is not a "postback". In
+     * this case, a root node is created and then renderView is invoked. It is the responsibility of the renderView
+     * method to build the full component tree (ie populate the UIViewRoot with descendant nodes).
+     * <p>
+     * This method is also invoked when navigation occurs from one view to another, where the viewId passed is the id of
+     * the new view to be displayed. Again it is the responsibility of renderView to then populate the viewroot with
+     * descendants.
+     * <p>
+     * The locale and renderKit settings are inherited from the current UIViewRoot that is configured before this method
+     * is called. That means of course that they do NOT get set for GET requests, including navigation that has the
+     * redirect flag set.
+     */
+    public abstract UIViewRoot createView(FacesContext context, String viewId);
+
+    /**
+     * @param context
+     * @param input
+     * @return
+     * 
+     * @since 2.0
+     */
+    public String deriveViewId(FacesContext context, String input)
+    {
+        //The default implementation of this method simply returns rawViewId unchanged.
+        return input;
+    }
+    
+    /**
+     * 
+     * @param context
+     * @param rawViewId
+     * @return
+     * @since 2.1
+     */
+    public String deriveLogicalViewId(FacesContext context, String rawViewId)
+    {
+        return rawViewId;
+    }
+
+    /**
+     * Returns a URL, suitable for encoding and rendering, that (if activated) will cause the JSF
+     * request processing lifecycle for the specified viewId to be executed
+     */
+    public abstract String getActionURL(FacesContext context, String viewId);
+
+    /**
+     * Return a JSF action URL derived from the viewId argument that is suitable to be used as
+     * the target of a link in a JSF response. Compiliant implementations must implement this method
+     * as specified in section JSF.7.5.2. The default implementation simply calls through to
+     * getActionURL(jakarta.faces.context.FacesContext, java.lang.String), passing the arguments context and viewId.
+     * 
+     * @param context
+     * @param viewId
+     * @param parameters
+     * @param includeViewParams
+     * @return
+     * 
+     * @since 2.0
+     */
+    public String getBookmarkableURL(FacesContext context, String viewId, Map<String, List<String>> parameters,
+                                     boolean includeViewParams)
+    {
+        return getActionURL(context, viewId);
+    }
+
+    /**
+     * Return the ViewDeclarationLanguage instance used for this ViewHandler  instance.
+     * <P>
+     * The default implementation of this method returns null.
+     * 
+     * @param context
+     * @param viewId
+     * @return
+     * 
+     * @since 2.0
+     */
+    public ViewDeclarationLanguage getViewDeclarationLanguage(FacesContext context, String viewId)
+    {
+        // TODO: In some places like RestoreViewExecutor, we are calling deriveViewId
+        // TODO: after call restoreViewSupport.calculateViewId
+        // Maybe this method should be called from here, because it is supposed that
+        // calculateViewId "calculates the view id!"
+        
+        // here we return null to support pre jsf 2.0 ViewHandlers (e.g. com.sun.facelets.FaceletViewHandler),
+        // because they don't provide any ViewDeclarationLanguage,
+        // but in the default implementation (ViewHandlerImpl) we return vdlFactory.getViewDeclarationLanguage(viewId)
+        return null;
+    }
+
+    /**
+     * Return a JSF action URL derived from the viewId argument that is suitable to be used by
+     * the NavigationHandler to issue a redirect request to the URL using a NonFaces request.
+     * Compiliant implementations must implement this method as specified in section JSF.7.5.2.
+     * The default implementation simply calls through to
+     * getActionURL(jakarta.faces.context.FacesContext, java.lang.String), passing the arguments context and viewId.
+     * 
+     * @param context
+     * @param viewId
+     * @param parameters
+     * @param includeViewParams
+     * @return
+     * 
+     * @since 2.0
+     */
+    public String getRedirectURL(FacesContext context, String viewId, Map<String, List<String>> parameters,
+                                 boolean includeViewParams)
+    {
+        return getActionURL(context, viewId);
+    }
+
+    /**
+     * Returns a URL, suitable for encoding and rendering, that (if activated)
+     * will retrieve the specified web application resource.
+     */
+    public abstract String getResourceURL(FacesContext context, String path);
+
+    /**
+     * Initialize the view for the request processing lifecycle.
+     * <P>
+     * This method must be called at the beginning of the Restore View Phase of the Request
+     * Processing Lifecycle. It is responsible for performing any per-request initialization
+     * necessary to the operation of the lifycecle.
+     * <P>
+     * The default implementation must perform the following actions. If
+     * ExternalContext.getRequestCharacterEncoding() returns null, call
+     * calculateCharacterEncoding(jakarta.faces.context.FacesContext) and pass the result,
+     * if non-null, into the ExternalContext.setRequestCharacterEncoding(java.lang.String) method.
+     * If ExternalContext.getRequestCharacterEncoding() returns non-null take no action.
+     * 
+     * @since JSF 1.2
+     */
+    public void initView(FacesContext context) throws FacesException
+    {
+        String encoding = this.calculateCharacterEncoding(context);
+        if (encoding != null)
+        {
+            try
+            {
+                context.getExternalContext().setRequestCharacterEncoding(encoding);
+            }
+            catch (UnsupportedEncodingException uee)
+            {
+                throw new FacesException(uee);
+            }
+        }
+    }
+
+    /**
+     *  Perform whatever actions are required to render the response view to the
+     *  response object associated with the current FacesContext.
+     *  <P>
+     *  Otherwise, the default implementation must obtain a reference to the
+     *  ViewDeclarationLanguage for the viewId of the argument viewToRender and call its
+     *  ViewDeclarationLanguage.renderView(jakarta.faces.context.FacesContext, jakarta.faces.component.UIViewRoot)
+     *  method, returning the result and not swallowing any exceptions thrown by that method.
+     */
+    public abstract void renderView(FacesContext context, UIViewRoot viewToRender) throws IOException, FacesException;
+
+    /**
+     * Perform whatever actions are required to restore the view associated with the
+     * specified FacesContext and viewId. It may delegate to the restoreView of the
+     * associated StateManager to do the actual work of restoring the view. If there
+     * is no available state for the specified viewId, return null.
+     * <P>
+     * Otherwise, the default implementation must obtain a reference to the
+     * ViewDeclarationLanguage for this viewId and call its
+     * ViewDeclarationLanguage.restoreView(jakarta.faces.context.FacesContext, java.lang.String)
+     * method, returning the result and not swallowing any exceptions thrown by that method.
+     */
+    public abstract UIViewRoot restoreView(FacesContext context, String viewId);
+
+    /**
+     * Take any appropriate action to either immediately write out the current state information
+     * (by calling StateManager.writeState(jakarta.faces.context.FacesContext, java.lang.Object),
+     * or noting where state information should later be written.
+     * <P>
+     * This method must do nothing if the current request is an Ajax request. When responding
+     * to Ajax requests, the state is obtained by calling StateManager.getViewState(jakarta.faces.context.FacesContext)
+     * and then written into the Ajax response during
+     * final encoding (UIViewRoot.encodeEnd(jakarta.faces.context.FacesContext).
+     */
+    public abstract void writeState(FacesContext context) throws IOException;
+
+    /**
+     * @since 2.2
+     * @param urlPattern 
+     */
+    public void addProtectedView(String urlPattern)
+    {
+    }
+    
+    /**
+     * @since 2.2
+     * @param urlPattern 
+     */
+    public boolean removeProtectedView(String urlPattern)
+    {
+        return false;
+    }
+
+    /**
+     * @since 2.2
+     * @return 
+     */
+    public Set<String> getProtectedViewsUnmodifiable()
+    {
+        Set<String> set = Collections.emptySet();
+        return Collections.unmodifiableSet(set);
+    }
+    
+    /**
+     * Return a JSF URL that represents a websocket connection for the passed channel and channelToken
+     * 
+     * @since 2.3
+     * @param context
+     * @param channelAndToken
+     * @return 
+     */
+    public abstract String getWebsocketURL(FacesContext context, String channelAndToken);
+
+    /**
+     * @since 2.3
+     * @param facesContext
+     * @param path
+     * @param options
+     * @return 
+     */
+    public Stream<java.lang.String> getViews(FacesContext facesContext, String path, ViewVisitOption... options)
+    {
+        return getViews(facesContext, path, Integer.MAX_VALUE, options);
+    }
+    
+    
+    /**
+     * 
+     * @since 2.3
+     * @param facesContext
+     * @param path
+     * @param maxDepth
+     * @param options
+     * @return 
+     */
+    public Stream<java.lang.String> getViews(FacesContext facesContext, String path, 
+            int maxDepth, ViewVisitOption... options)
+    {
+        return Stream.empty();
+    }
+
+}
diff --git a/api/src/main/java/jakarta/faces/application/ViewHandlerWrapper.java b/api/src/main/java/jakarta/faces/application/ViewHandlerWrapper.java
new file mode 100644
index 0000000..eea3d8f
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ViewHandlerWrapper.java
@@ -0,0 +1,187 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Stream;
+
+import jakarta.faces.FacesException;
+import jakarta.faces.FacesWrapper;
+import jakarta.faces.component.UIViewRoot;
+import jakarta.faces.context.FacesContext;
+import jakarta.faces.view.ViewDeclarationLanguage;
+
+/**
+ * see Javadoc of <a href="http://java.sun.com/j2ee/javaserverfaces/1.2/docs/api/index.html">JSF Specification</a>
+ */
+public abstract class ViewHandlerWrapper extends ViewHandler
+    implements FacesWrapper<ViewHandler>
+{
+    private ViewHandler delegate;
+
+    @Deprecated
+    public ViewHandlerWrapper()
+    {
+    }
+
+    public ViewHandlerWrapper(ViewHandler delegate)
+    {
+        this.delegate = delegate;
+    }
+
+    @Override
+    public String calculateCharacterEncoding(FacesContext context)
+    {
+        return getWrapped().calculateCharacterEncoding(context);
+    }
+
+    @Override
+    public void initView(FacesContext context) throws FacesException
+    {
+        getWrapped().initView(context);
+    }
+
+    public ViewHandler getWrapped()
+    {
+        return delegate;
+    }
+
+    @Override
+    public void renderView(FacesContext context, UIViewRoot viewToRender) throws IOException, FacesException
+    {
+        getWrapped().renderView(context, viewToRender);
+    }
+
+    @Override
+    public void writeState(FacesContext context) throws IOException
+    {
+        getWrapped().writeState(context);
+    }
+
+    @Override
+    public String calculateRenderKitId(FacesContext context)
+    {
+        return getWrapped().calculateRenderKitId(context);
+    }
+
+    @Override
+    public Locale calculateLocale(FacesContext context)
+    {
+        return getWrapped().calculateLocale(context);
+    }
+
+    @Override
+    public UIViewRoot restoreView(FacesContext context, String viewId)
+    {
+        return getWrapped().restoreView(context, viewId);
+    }
+
+    @Override
+    public String getResourceURL(FacesContext context, String path)
+    {
+        return getWrapped().getResourceURL(context, path);
+    }
+
+    @Override
+    public String getActionURL(FacesContext context, String viewId)
+    {
+        return getWrapped().getActionURL(context, viewId);
+    }
+
+    @Override
+    public UIViewRoot createView(FacesContext context, String viewId)
+    {
+        return getWrapped().createView(context, viewId);
+    }
+
+    @Override
+    public String deriveViewId(FacesContext context, String input)
+    {
+        return getWrapped().deriveViewId(context, input);
+    }
+
+    @Override
+    public String deriveLogicalViewId(FacesContext context, String rawViewId)
+    {
+        return getWrapped().deriveLogicalViewId(context, rawViewId);
+    }
+
+    @Override
+    public String getBookmarkableURL(FacesContext context, String viewId,
+            Map<String, List<String>> parameters, boolean includeViewParams)
+    {
+        return getWrapped().getBookmarkableURL(context, viewId, parameters, includeViewParams);
+    }
+
+    @Override
+    public String getRedirectURL(FacesContext context, String viewId,
+            Map<String, List<String>> parameters, boolean includeViewParams)
+    {
+        return getWrapped().getRedirectURL(context, viewId, parameters, includeViewParams);
+    }
+
+    @Override
+    public ViewDeclarationLanguage getViewDeclarationLanguage(
+            FacesContext context, String viewId)
+    {
+        return getWrapped().getViewDeclarationLanguage(context, viewId);
+    }
+
+    @Override
+    public Set<String> getProtectedViewsUnmodifiable()
+    {
+        return getWrapped().getProtectedViewsUnmodifiable();
+    }
+
+    @Override
+    public boolean removeProtectedView(String urlPattern)
+    {
+        return getWrapped().removeProtectedView(urlPattern);
+    }
+
+    @Override
+    public void addProtectedView(String urlPattern)
+    {
+        getWrapped().addProtectedView(urlPattern);
+    }
+
+    @Override
+    public String getWebsocketURL(FacesContext context, String channelAndToken)
+    {
+        return getWrapped().getWebsocketURL(context, channelAndToken);
+    }
+    
+    @Override
+    public Stream<String> getViews(FacesContext facesContext, String path, int maxDepth, ViewVisitOption... options)
+    {
+        return getWrapped().getViews(facesContext, path, maxDepth, options);
+    }
+
+    @Override
+    public Stream<String> getViews(FacesContext facesContext, String path, ViewVisitOption... options)
+    {
+        return getWrapped().getViews(facesContext, path, options);
+    }
+
+}
diff --git a/api/src/main/java/jakarta/faces/application/ViewResource.java b/api/src/main/java/jakarta/faces/application/ViewResource.java
new file mode 100644
index 0000000..936cf20
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ViewResource.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import java.net.URL;
+
+/**
+ *
+ * @since 2.2
+ */
+public abstract class ViewResource
+{
+    public ViewResource()
+    {
+    }
+    
+    public abstract URL getURL();
+}
diff --git a/api/src/main/java/jakarta/faces/application/ViewVisitOption.java b/api/src/main/java/jakarta/faces/application/ViewVisitOption.java
new file mode 100644
index 0000000..a1fe74e
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/ViewVisitOption.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+/**
+ * 
+ * @since 2.3
+ */
+public enum ViewVisitOption
+{
+    RETURN_AS_MINIMAL_IMPLICIT_OUTCOME
+}
diff --git a/api/src/main/java/jakarta/faces/application/_NavigationUtils.java b/api/src/main/java/jakarta/faces/application/_NavigationUtils.java
new file mode 100644
index 0000000..e87a8a0
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/application/_NavigationUtils.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.application;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import jakarta.faces.context.FacesContext;
+
+class _NavigationUtils
+{
+    /**
+     * Evaluate all EL expressions found as parameters and return a map that can be used for 
+     * redirect or render bookmark links
+     * 
+     * @param parameters parameter map retrieved from NavigationCase.getParameters()
+     * @return
+     */
+    public static Map<String, List<String> > getEvaluatedNavigationParameters(
+            FacesContext facesContext, 
+            Map<String, List<String> > parameters)
+    {
+        Map<String,List<String>> evaluatedParameters = null;
+        if (parameters != null && parameters.size() > 0)
+        {
+            evaluatedParameters = new HashMap<String, List<String>>();
+            for (Map.Entry<String, List<String>> pair : parameters.entrySet())
+            {
+                boolean containsEL = false;
+                for (String value : pair.getValue())
+                {
+                    if (_isExpression(value))
+                    {
+                        containsEL = true;
+                        break;
+                    }
+                }
+                if (containsEL)
+                {
+                    evaluatedParameters.put(pair.getKey(), 
+                            _evaluateValueExpressions(facesContext, pair.getValue()));
+                }
+                else
+                {
+                    evaluatedParameters.put(pair.getKey(), pair.getValue());
+                }
+            }
+        }
+        else
+        {
+            evaluatedParameters = parameters;
+        }
+        return evaluatedParameters;
+    }
+    
+    /**
+     * Checks the Strings in the List for EL expressions and evaluates them.
+     * Note that the returned List will be a copy of the given List, because
+     * otherwise it will have unwanted side-effects.
+     * @param values
+     * @return
+     */
+    private static List<String> _evaluateValueExpressions(FacesContext context, List<String> values)
+    {
+        // note that we have to create a new List here, because if we
+        // change any value on the given List, it will be changed in the
+        // NavigationCase too and the EL expression won't be evaluated again
+        List<String> target = new ArrayList<String>(values.size());
+        for (String value : values)
+        {
+            if (_isExpression(value))
+            {
+                // evaluate the ValueExpression
+                value = context.getApplication().evaluateExpressionGet(context, value, String.class);
+            }
+            target.add(value);
+        }
+        return target;
+    }
+    
+    private static boolean _isExpression(String text)
+    {
+        return text.indexOf("#{") != -1;
+    }
+
+}
diff --git a/api/src/main/java/jakarta/faces/bean/ApplicationScoped.java b/api/src/main/java/jakarta/faces/bean/ApplicationScoped.java
new file mode 100644
index 0000000..5b0db73
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/bean/ApplicationScoped.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.bean;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * 
+ * @since 2.0
+ */
+@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+@Inherited
+@Deprecated
+public @interface ApplicationScoped
+{
+
+}
diff --git a/api/src/main/java/jakarta/faces/bean/CustomScoped.java b/api/src/main/java/jakarta/faces/bean/CustomScoped.java
new file mode 100644
index 0000000..e9c2c5f
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/bean/CustomScoped.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.bean;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * @since 2.0
+ */
+@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+@Inherited
+@Deprecated
+public @interface CustomScoped
+{
+    public String value();
+}
diff --git a/api/src/main/java/jakarta/faces/bean/ManagedBean.java b/api/src/main/java/jakarta/faces/bean/ManagedBean.java
new file mode 100644
index 0000000..86683fc
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/bean/ManagedBean.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.bean;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * @since 2.0
+ */
+@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+@Inherited
+@Deprecated
+public @interface ManagedBean
+{
+    /**
+     * Taken to be the value of the eager attribute of the managed-bean.
+     */
+    public boolean eager() default false;
+
+    /**
+     * Taken to be the managed-bean-name. See class documentation for details.
+     */
+    public String name() default "";
+
+}
diff --git a/api/src/main/java/jakarta/faces/bean/ManagedProperty.java b/api/src/main/java/jakarta/faces/bean/ManagedProperty.java
new file mode 100644
index 0000000..a466188
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/bean/ManagedProperty.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.bean;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * @since 2.0
+ */
+@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+@Deprecated
+public @interface ManagedProperty
+{
+    /**
+     * Taken to be the managed-property-name.
+     */
+    public String name() default "";
+    
+    /**
+     * Taken to be the value that is injected into the field.
+     */
+    public String value();
+}
diff --git a/api/src/main/java/jakarta/faces/bean/NoneScoped.java b/api/src/main/java/jakarta/faces/bean/NoneScoped.java
new file mode 100644
index 0000000..99e8b04
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/bean/NoneScoped.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.bean;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * @since 2.0
+ */
+@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+@Inherited
+@Deprecated
+public @interface NoneScoped
+{
+
+}
diff --git a/api/src/main/java/jakarta/faces/bean/ReferencedBean.java b/api/src/main/java/jakarta/faces/bean/ReferencedBean.java
new file mode 100644
index 0000000..007f429
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/bean/ReferencedBean.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.bean;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * @since 2.0
+ */
+@Retention(java.lang.annotation.RetentionPolicy.CLASS)
+@Target(ElementType.TYPE)
+@Inherited
+@Deprecated
+public @interface ReferencedBean
+{
+    public String name() default "";
+}
diff --git a/api/src/main/java/jakarta/faces/bean/RequestScoped.java b/api/src/main/java/jakarta/faces/bean/RequestScoped.java
new file mode 100644
index 0000000..9a0d042
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/bean/RequestScoped.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.bean;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * @since 2.0
+ */
+@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+@Inherited
+@Deprecated
+public @interface RequestScoped
+{
+
+}
diff --git a/api/src/main/java/jakarta/faces/bean/SessionScoped.java b/api/src/main/java/jakarta/faces/bean/SessionScoped.java
new file mode 100644
index 0000000..e18f448
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/bean/SessionScoped.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.bean;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * @since 2.0
+ */
+@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+@Inherited
+@Deprecated
+public @interface SessionScoped
+{
+
+}
diff --git a/api/src/main/java/jakarta/faces/bean/ViewScoped.java b/api/src/main/java/jakarta/faces/bean/ViewScoped.java
new file mode 100644
index 0000000..4f36194
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/bean/ViewScoped.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.bean;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * @since 2.0
+ */
+@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+@Inherited
+@Deprecated // the spec says it's deprecated, but it IS actually still very useful!
+public @interface ViewScoped
+{
+
+}
diff --git a/api/src/main/java/jakarta/faces/bean/package-info.java b/api/src/main/java/jakarta/faces/bean/package-info.java
new file mode 100644
index 0000000..09509c2
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/bean/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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.
+ */
+@Deprecated
+package jakarta.faces.bean;
\ No newline at end of file
diff --git a/api/src/main/java/jakarta/faces/component/ActionSource.java b/api/src/main/java/jakarta/faces/component/ActionSource.java
new file mode 100644
index 0000000..fa94c71
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/component/ActionSource.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.component;
+
+import jakarta.faces.el.MethodBinding;
+import jakarta.faces.event.ActionListener;
+
+/**
+ * see Javadoc of <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.html">JSF Specification</a>
+ */
+public interface ActionSource
+{
+    /**
+     * @deprecated Replaced by ActionSource2.getActionExpression
+     */
+    public MethodBinding getAction();
+
+    /**
+     * @deprecated Replaced by ActionSource2.setActionExpression
+     */
+    public void setAction(MethodBinding action);
+
+    /**
+     * @deprecated Replaced by getActionListeners
+     */
+    public MethodBinding getActionListener();
+
+    public void setActionListener(MethodBinding actionListener);
+
+    public boolean isImmediate();
+
+    public void setImmediate(boolean immediate);
+
+    public void addActionListener(ActionListener listener);
+
+    public ActionListener[] getActionListeners();
+
+    public void removeActionListener(ActionListener listener);
+}
diff --git a/api/src/main/java/jakarta/faces/component/ActionSource2.java b/api/src/main/java/jakarta/faces/component/ActionSource2.java
new file mode 100644
index 0000000..93933e1
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/component/ActionSource2.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.component;
+
+import javax.el.MethodExpression;
+
+/**
+ * See Javadoc of <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.html">JSF Specification</a>
+ */
+public interface ActionSource2 extends ActionSource
+{
+    
+    public MethodExpression getActionExpression();
+    
+    public void setActionExpression(MethodExpression action);
+}
diff --git a/api/src/main/java/jakarta/faces/component/ContextCallback.java b/api/src/main/java/jakarta/faces/component/ContextCallback.java
new file mode 100644
index 0000000..856cd6c
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/component/ContextCallback.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.component;
+
+import jakarta.faces.context.FacesContext;
+
+/**
+ * See Javadoc of <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.html">JSF Specification</a>
+ */
+public interface ContextCallback
+{
+    
+    /**
+     * 
+     * @param context <code>FacesContext</code> for the current request
+     * @param target <code>UIComponent</code> on which the <code>UIComponent.invokeOnComponent()</code> will be called
+     */
+    void invokeContextCallback(FacesContext context, UIComponent target);
+}
diff --git a/api/src/main/java/jakarta/faces/component/EditableValueHolder.java b/api/src/main/java/jakarta/faces/component/EditableValueHolder.java
new file mode 100644
index 0000000..e3802cb
--- /dev/null
+++ b/api/src/main/java/jakarta/faces/component/EditableValueHolder.java
@@ -0,0 +1,180 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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
+ *
+ *   http://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 jakarta.faces.component;
+
+import jakarta.faces.el.MethodBinding;
+import jakarta.faces.event.ValueChangeListener;
+import jakarta.faces.validator.Validator;
+
+/**
+ * Defines the methods required for a component whose value can be modified by the user.
+ * <p>
+ * When a component implementing this interface is rendered, the value output is (in order):
+ * <ul>
+ * <li>The "submitted value" if non-null.
+ * <li>The component's "local value" if non-null.
+ * <li>The result of evaluating the value-binding expression with name "value" for this component.
+ * </ul>
+ * <p>
+ * Rendering the submitted value if non-null allows a component to redisplay a user-provided value when validation fails
+ * for the component. The submitted value is usually just the plain string extracted from the servlet request. During
+ * successful validation of the component, the submitted value is converted to an appropriate datatype, and stored as
+ * the component's "local value", and then the "submitted value" is immediately reset to null.
+ * <p>
+ * Rendering the "local value" if non-null allows a component to redisplay a page when validation fails for some other
+ * component; the model can't be updated unless <i>all</i> components have passed validation. This also allows
+ * components to work without a defined "value" value-binding expression. When all components validate, the update model
+ * phase runs; all components with "value" value-bindings store the "local value" into the specified property then reset
+ * their local value to null.
+ * <p>
+ * Rendering the value-binding expression named "value" allows components to display data from the user's model classes.
+ * This is the most common way a component's renderer obtains the value to display.
+ * 
+ * see Javadoc of <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.html">JSF Specification</a> for
... 219291 lines suppressed ...