You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2019/09/09 11:27:43 UTC

[syncope] 01/02: SYNCOPE-1332: Java 11 language features; use factory calls for immutable collections

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

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git

commit 6864923b61c395b7be3bcf2e10b5d50aea547515
Author: Misagh Moayyed <mm...@gmail.com>
AuthorDate: Wed Sep 4 13:18:28 2019 +0430

    SYNCOPE-1332: Java 11 language features; use factory calls for immutable collections
---
 .../console/panels/GatewayRouteDirectoryPanel.java |   2 +-
 .../console/panels/GatewayRouteFilterPanel.java    |   3 +-
 .../console/panels/GatewayRoutePredicatePanel.java |   5 +-
 .../console/panels/GatewayRouteWizardBuilder.java  |   5 +-
 .../commons/IdMImplementationInfoProvider.java     |   2 +-
 .../ConnInstanceHistoryConfDirectoryPanel.java     |   2 +-
 .../console/panels/ProvisionAuxClassesPanel.java   |   5 +-
 .../console/panels/RemediationDirectoryPanel.java  |  10 +-
 .../panels/ResourceHistoryConfDirectoryPanel.java  |   2 +-
 .../client/console/panels/VirSchemaDetails.java    |   3 +-
 .../policies/ProvisioningPolicyModalPanel.java     |   2 +-
 .../console/rest/ConnectorHistoryRestClient.java   |   3 +-
 .../client/console/rest/ConnectorRestClient.java   |   7 +-
 .../console/rest/ResourceHistoryRestClient.java    |   3 +-
 .../client/console/rest/ResourceRestClient.java    |   2 +-
 .../console/status/AnyStatusDirectoryPanel.java    |   5 +-
 .../client/console/status/ReconStatusPanel.java    |   3 +-
 .../client/console/status/ReconTaskPanel.java      |   5 +-
 .../client/console/widgets/RemediationsWidget.java |   3 +-
 .../wizards/resources/AbstractMappingPanel.java    |   5 +-
 .../wizards/resources/CapabilitiesPanel.java       |   3 +-
 .../resources/ItemTransformersTogglePanel.java     |   3 +-
 .../wizards/resources/ResourceProvision.java       |   3 +-
 .../markup/html/form/AjaxDropDownChoicePanel.java  |   3 +-
 .../commons/markup/html/form/AjaxPalettePanel.java |   3 +-
 .../markup/html/form/AjaxTextFieldPanel.java       |   4 +-
 .../ui/commons/wizards/AjaxWizardBuilder.java      |   3 +-
 .../ui/commons/wizards/any/AbstractResources.java  |   3 +-
 .../syncope/client/console/PreferenceManager.java  |   5 +-
 .../client/console/SyncopeConsoleSession.java      |   6 +-
 .../client/console/SyncopeWebApplication.java      |   8 +-
 .../client/console/commons/AnyDataProvider.java    |   4 +-
 ...DirectoryPanelAditionalActionLinksProvider.java |   7 +-
 .../commons/IdRepoExternalResourceProvider.java    |   3 +-
 .../commons/IdRepoImplementationInfoProvider.java  |   8 +-
 .../console/commons/IdRepoStatusProvider.java      |   3 +-
 .../commons/SortableAnyProviderComparator.java     |   6 +-
 .../client/console/events/EventCategoryPanel.java  |  13 +-
 .../notifications/MailTemplateDirectoryPanel.java  |   2 +-
 .../notifications/NotificationDirectoryPanel.java  |   2 +-
 .../notifications/NotificationWizardBuilder.java   |   7 +-
 .../apache/syncope/client/console/pages/Audit.java |   7 +-
 .../client/console/panels/AbstractLogsPanel.java   |   3 +-
 .../console/panels/AccessTokenDirectoryPanel.java  |   3 +-
 .../client/console/panels/AjaxDataTablePanel.java  |   3 +-
 .../client/console/panels/AnyDirectoryPanel.java   |   3 +-
 .../console/panels/AnyTypeClassDetailsPanel.java   |   5 +-
 .../client/console/panels/AnyTypeClassesPanel.java |   2 +-
 .../client/console/panels/AnyTypeDetailsPanel.java |   3 +-
 .../client/console/panels/AnyTypesPanel.java       |   2 +-
 .../console/panels/ApplicationDirectoryPanel.java  |   2 +-
 .../syncope/client/console/panels/BeanPanel.java   |   7 +-
 .../panels/DomainAdminCredentialsPanel.java        |   5 +-
 .../console/panels/DomainDirectoryPanel.java       |   2 +-
 .../client/console/panels/DomainWizardBuilder.java |   9 +-
 .../console/panels/DynRealmDirectoryPanel.java     |   2 +-
 .../panels/ImplementationDirectoryPanel.java       |   2 +-
 .../client/console/panels/ListViewPanel.java       |   3 +-
 .../panels/NetworkServiceDirectoryPanel.java       |   3 +-
 .../console/panels/ParametersWizardAttrStep.java   |   5 +-
 .../console/panels/ParametersWizardSchemaStep.java |   5 +-
 .../client/console/panels/PlainSchemaDetails.java  |   8 +-
 .../console/panels/PrivilegeDirectoryPanel.java    |   2 +-
 .../client/console/panels/RealmChoicePanel.java    |   3 +-
 .../console/panels/RelationshipTypesPanel.java     |   2 +-
 .../client/console/panels/SchemaTypePanel.java     |  13 +-
 .../console/panels/SchemaTypeWizardBuilder.java    |   4 +-
 .../console/panels/SecurityQuestionsPanel.java     |   2 +-
 .../panels/TypeExtensionDirectoryPanel.java        |   3 +-
 .../panels/search/AnySelectionDirectoryPanel.java  |   3 +-
 .../console/panels/search/SearchClausePanel.java   |  13 +-
 .../console/policies/PolicyModalPanelBuilder.java  |   3 +-
 .../console/policies/PolicyRuleDirectoryPanel.java |   4 +-
 .../reports/ReportTemplateDirectoryPanel.java      |   2 +-
 .../console/reports/ReportletDirectoryPanel.java   |   2 +-
 .../console/rest/AnyTypeClassRestClient.java       |   3 +-
 .../client/console/rest/AnyTypeRestClient.java     |   2 +-
 .../client/console/rest/LoggerRestClient.java      |   2 +-
 .../client/console/rest/PolicyRestClient.java      |   3 +-
 .../console/rest/RelationshipTypeRestClient.java   |   3 +-
 .../client/console/rest/SchemaRestClient.java      |   3 +-
 .../syncope/client/console/tasks/CrontabPanel.java |   5 +-
 .../console/tasks/SchedTaskWizardBuilder.java      |   7 +-
 .../console/wicket/markup/head/MetaHeaderItem.java |   5 +-
 .../markup/html/form/SelectableRecorder.java       |   5 +-
 .../syncope/client/console/widgets/JobWidget.java  |   4 +-
 .../console/widgets/ReconDetailsModalPanel.java    |   2 +-
 .../console/widgets/ReconciliationWidget.java      |   4 +-
 .../client/console/wizards/WizardMgtPanel.java     |   3 +-
 .../client/console/wizards/any/AbstractAttrs.java  |   6 +-
 .../console/wizards/any/ConnObjectPanel.java       |   4 +-
 .../client/console/wizards/any/PlainAttrs.java     |   2 +-
 .../client/console/wizards/any/Relationships.java  |   3 +-
 .../syncope/client/console/wizards/any/Roles.java  |   2 +-
 .../implementations/MyRecipientsProvider.groovy    |   2 +-
 .../client/enduser/SyncopeWebApplication.java      |   8 +-
 .../client/enduser/rest/AnyTypeRestClient.java     |   2 +-
 .../client/enduser/rest/SchemaRestClient.java      |   3 +-
 .../client/enduser/rest/SyncopeRestClient.java     |   5 +-
 .../client/enduser/wizards/any/AbstractAttrs.java  |   8 +-
 .../syncope/client/enduser/wizards/any/Groups.java |   3 +-
 .../client/lib/RestClientExceptionMapper.java      |   3 +-
 .../apache/syncope/client/lib/SyncopeClient.java   |   7 +-
 .../client/lib/SyncopeClientFactoryBean.java       |   3 +-
 .../java/org/apache/syncope/common/lib/Attr.java   |   3 +-
 .../syncope/common/lib/SyncopeConstants.java       |   3 +-
 .../apache/syncope/common/lib/request/AnyCR.java   |  13 +-
 .../syncope/common/lib/request/AnyObjectCR.java    |   8 +-
 .../syncope/common/lib/request/AnyObjectUR.java    |   7 +-
 .../apache/syncope/common/lib/request/AnyUR.java   |  10 +-
 .../apache/syncope/common/lib/request/GroupCR.java |   3 +-
 .../apache/syncope/common/lib/request/GroupUR.java |   3 +-
 .../syncope/common/lib/request/MembershipUR.java   |   7 +-
 .../syncope/common/lib/request/PasswordPatch.java  |   3 +-
 .../syncope/common/lib/request/ResourceDR.java     |   3 +-
 .../apache/syncope/common/lib/request/UserCR.java  |  10 +-
 .../apache/syncope/common/lib/request/UserUR.java  |   9 +-
 .../common/lib/search/SyncopeFiqlParser.java       |   7 +-
 .../apache/syncope/common/lib/to/MembershipTO.java |   6 +-
 .../syncope/common/rest/api/beans/SchemaQuery.java |   3 +-
 .../zookeper/ZookeeperConfParamOpsITCase.java      |   5 +-
 .../org/apache/syncope/core/logic/GroupLogic.java  |   3 +-
 .../syncope/core/logic/LogicInvocationHandler.java |  34 +--
 .../org/apache/syncope/core/logic/RealmLogic.java  |   3 +-
 .../org/apache/syncope/core/logic/ReportLogic.java |   3 +-
 .../apache/syncope/core/logic/SyncopeLogic.java    |   5 +-
 .../org/apache/syncope/core/logic/TaskLogic.java   |   3 +-
 .../org/apache/syncope/core/logic/UserLogic.java   |   7 +-
 .../core/logic/audit/DefaultAuditAppender.java     |   3 +-
 .../logic/audit/DefaultRewriteAuditAppender.java   |   3 +-
 .../syncope/core/rest/cxf/RESTCXFContext.java      |  21 +-
 .../core/rest/cxf/SyncopeOpenApiCustomizer.java    |   6 +-
 .../syncope/core/rest/cxf/WadlGenerator.java       |   3 +-
 .../core/rest/cxf/batch/BatchItemRequest.java      |   4 +-
 .../core/rest/cxf/batch/BatchItemResponse.java     |   3 +-
 .../core/rest/cxf/service/AbstractAnyService.java  |  21 +-
 .../core/rest/cxf/service/AbstractServiceImpl.java |   3 +-
 .../core/persistence/api/dao/AllowedSchemas.java   |   3 +-
 .../persistence/api/entity/LinkingMappingItem.java |   3 +-
 .../persistence/jpa/dao/AbstractJPAJSONAnyDAO.java |   6 +-
 .../persistence/jpa/dao/JPAJSONPlainSchemaDAO.java |   3 +-
 .../core/persistence/jpa/dao/MyJPAJSONAnyDAO.java  |   6 +-
 .../persistence/jpa/dao/MyJPAJSONAnySearchDAO.java |   3 +-
 .../core/persistence/jpa/dao/PGJPAJSONAnyDAO.java  |   3 +-
 .../persistence/jpa/dao/PGJPAJSONAnySearchDAO.java |   3 +-
 .../core/persistence/jpa/DomainConfFactory.java    |   5 +-
 .../syncope/core/persistence/jpa/MasterDomain.java |   5 +-
 .../jpa/content/XMLContentExporter.java            |  11 +-
 .../core/persistence/jpa/dao/AbstractAnyDAO.java   |   6 +-
 .../persistence/jpa/dao/AbstractAnySearchDAO.java  |   9 +-
 .../core/persistence/jpa/dao/JPAAnyObjectDAO.java  |   2 +-
 .../core/persistence/jpa/dao/JPAAnySearchDAO.java  |   3 +-
 .../persistence/jpa/dao/JPAAnyTypeClassDAO.java    |   7 +-
 .../persistence/jpa/dao/JPAConnInstanceDAO.java    |   3 +-
 .../jpa/dao/JPAExternalResourceDAO.java            |   3 +-
 .../core/persistence/jpa/dao/JPAGroupDAO.java      |  13 +-
 .../persistence/jpa/dao/JPANotificationDAO.java    |   4 +-
 .../core/persistence/jpa/dao/JPARoleDAO.java       |   3 +-
 .../core/persistence/jpa/dao/JPATaskDAO.java       |   5 +-
 .../core/persistence/jpa/dao/JPAUserDAO.java       |   3 +-
 .../persistence/jpa/entity/AbstractPlainAttr.java  |   2 +-
 .../persistence/jpa/entity/JPAConnInstance.java    |   3 +-
 .../persistence/jpa/entity/JPAGatewayRoute.java    |  10 +-
 .../jpa/entity/resource/JPAExternalResource.java   |   6 +-
 .../jpa/entity/task/JPAPropagationTask.java        |   4 +-
 .../core/persistence/jpa/DummyConfParamOps.java    |   3 +-
 .../core/persistence/jpa/DummyDomainOps.java       |   3 +-
 .../persistence/jpa/DummyImplementationLookup.java |   7 +-
 .../core/persistence/jpa/inner/AnySearchTest.java  |   7 +-
 .../persistence/jpa/inner/GatewayRouteTest.java    |   5 +-
 .../persistence/jpa/inner/RemediationTest.java     |   3 +-
 .../core/persistence/jpa/inner/TaskTest.java       |  10 +-
 .../core/persistence/jpa/outer/GroupTest.java      |   6 +-
 .../core/persistence/jpa/outer/ResourceTest.java   |   4 +-
 .../core/persistence/jpa/outer/RoleTest.java       |   5 +-
 .../core/persistence/jpa/outer/TaskTest.java       |   3 +-
 .../provisioning/api/PropagationByResource.java    |   3 +-
 .../provisioning/java/AsyncConnectorFacade.java    |   3 +-
 .../java/DefaultAnyObjectProvisioningManager.java  |   7 +-
 .../java/DefaultGroupProvisioningManager.java      |   7 +-
 .../java/DefaultUserProvisioningManager.java       |   5 +-
 .../core/provisioning/java/DerAttrHandlerImpl.java |   5 +-
 .../core/provisioning/java/MappingManagerImpl.java |   7 +-
 .../core/provisioning/java/VirAttrHandlerImpl.java |  13 +-
 .../java/data/AbstractAnyDataBinder.java           | 270 ++++++++++-----------
 .../java/data/AnyObjectDataBinderImpl.java         |   3 +-
 .../java/data/ConnInstanceDataBinderImpl.java      |   3 +-
 .../provisioning/java/data/UserDataBinderImpl.java |   4 +-
 .../core/provisioning/java/job/JobManagerImpl.java |   5 +-
 .../java/job/report/GroupReportlet.java            |   4 +-
 .../java/job/report/ReconciliationReportlet.java   |  22 +-
 .../java/job/report/UserReportlet.java             |   4 +-
 .../notification/DefaultNotificationManager.java   |   4 +-
 .../AbstractPropagationTaskExecutor.java           |   6 +-
 .../java/propagation/PropagationManagerImpl.java   |  11 +-
 .../java/pushpull/AbstractPullResultHandler.java   |  21 +-
 .../DefaultAnyObjectPullResultHandler.java         |   7 +-
 .../pushpull/DefaultGroupPullResultHandler.java    |   7 +-
 .../pushpull/DefaultRealmPullResultHandler.java    |  21 +-
 .../pushpull/DefaultUserPullResultHandler.java     |   7 +-
 .../java/pushpull/LDAPMembershipPullActions.java   |   3 +-
 .../core/provisioning/java/pushpull/PullUtils.java |   8 +-
 .../java/pushpull/PushJobDelegate.java             |  10 +-
 .../core/provisioning/java/pushpull/PushUtils.java |   5 +-
 .../java/pushpull/SinglePushJobDelegate.java       |   3 +-
 .../core/provisioning/java/DummyConfParamOps.java  |   3 +-
 .../core/provisioning/java/DummyDomainOps.java     |   3 +-
 .../java/DummyImplementationLookup.java            |   7 +-
 .../core/provisioning/java/MailTemplateTest.java   |   3 +-
 .../core/spring/security/AuthContextUtils.java     |   6 +-
 .../core/spring/security/AuthDataAccessor.java     |  16 +-
 .../spring/security/SyncopeJWTSSOProvider.java     |   4 +-
 .../spring/security/DummyImplementationLookup.java |   7 +-
 .../console/panels/CamelRoutesDirectoryPanel.java  |   2 +-
 .../client/console/rest/CamelRoutesRestClient.java |   3 +-
 .../camel/CamelAnyObjectProvisioningManager.java   |   7 +-
 .../camel/CamelGroupProvisioningManager.java       |   7 +-
 .../camel/CamelUserProvisioningManager.java        |   5 +-
 .../provisioning/camel/SyncopeCamelContext.java    |   5 +-
 .../client/ElasticsearchClientContext.java         |   5 +-
 .../jpa/dao/ElasticsearchAnySearchDAO.java         |   5 +-
 .../common/ui/panels/UserRequestFormPanel.java     |   3 +-
 .../console/panels/BpmnProcessDirectoryPanel.java  |   2 +-
 .../console/panels/UserRequestDirectoryPanel.java  |   3 +-
 .../panels/UserRequestFormDirectoryPanel.java      |   5 +-
 .../core/flowable/WorkflowFlowableContext.java     |   5 +-
 .../flowable/impl/FlowableUserWorkflowAdapter.java |   7 +-
 .../support/DomainProcessEngineFactoryBean.java    |   4 +-
 .../flowable/support/SyncopeGroupQueryImpl.java    |   5 +-
 .../flowable/support/SyncopeUserQueryImpl.java     |   7 +-
 .../panels/OIDCProvidersDirectoryPanel.java        |   2 +-
 .../apache/syncope/core/logic/OIDCClientLogic.java |  10 +-
 .../syncope/core/logic/OIDCProviderLogic.java      |   3 +-
 .../console/panels/SAML2IdPsDirectoryPanel.java    |   2 +-
 .../console/wizards/SAML2IdPWizardBuilder.java     |   3 +-
 .../apache/syncope/core/logic/SAML2SPLogic.java    |   3 +-
 .../syncope/core/logic/saml2/SAML2UserManager.java |   2 +-
 .../client/console/panels/SCIMConfUserPanel.java   |   5 +-
 .../apache/syncope/core/logic/SCIMDataBinder.java  |  10 +-
 .../org/apache/syncope/core/logic/SCIMLogic.java   |   3 +-
 .../syncope/core/logic/scim/SearchCondVisitor.java |   3 +-
 .../syncope/ext/scimv2/api/data/ListResponse.java  |   3 +-
 .../syncope/ext/scimv2/api/data/ResourceType.java  |   3 +-
 .../syncope/ext/scimv2/api/data/SCIMError.java     |   4 +-
 .../syncope/ext/scimv2/api/data/SCIMGroup.java     |   3 +-
 .../syncope/ext/scimv2/api/data/SCIMResource.java  |   3 +-
 .../ext/scimv2/api/data/SCIMSearchRequest.java     |   3 +-
 .../ext/scimv2/api/data/ServiceProviderConfig.java |   3 +-
 .../syncope/ext/scimv2/cxf/RESTSCIMCXFContext.java |  15 +-
 .../ext/scimv2/cxf/service/AbstractService.java    |   5 +-
 .../ext/scimv2/cxf/service/GroupServiceImpl.java   |  24 +-
 .../ext/scimv2/cxf/service/UserServiceImpl.java    |  20 +-
 .../client/self/SelfKeymasterClientContext.java    |   8 +-
 .../client/self/SelfKeymasterDomainOps.java        |  15 +-
 .../client/self/SelfKeymasterServiceOps.java       |   6 +-
 .../self/keymaster/cxf/SelfKeymasterContext.java   |  16 +-
 .../client/SelfKeymasterInternalConfParamOps.java  |  10 +-
 .../cxf/client/SelfKeymasterInternalDomainOps.java |  15 +-
 .../client/SelfKeymasterInternalServiceOps.java    |   9 +-
 .../buildtools/SyncopeBuildToolsApplication.java   |   8 +-
 .../fit/buildtools/cxf/ProvisioningImpl.java       |   3 +-
 .../reference/flowable/PrintersValueProvider.java  |   3 +-
 .../fit/core/reference/ITImplementationLookup.java |   6 +-
 .../TestNotificationRecipientsProvider.java        |   3 +-
 .../org/apache/syncope/fit/AbstractITCase.java     |   3 +-
 .../syncope/fit/console/AbstractConsoleITCase.java |   4 +-
 .../fit/console/AjaxPalettePanelITCase.java        |   5 +-
 .../org/apache/syncope/fit/core/BatchITCase.java   |  21 +-
 .../org/apache/syncope/fit/core/GroupITCase.java   |   7 +-
 .../apache/syncope/fit/core/KeymasterITCase.java   |   8 +-
 .../org/apache/syncope/fit/core/PolicyITCase.java  |   3 +-
 .../syncope/fit/core/PropagationTaskITCase.java    |   3 +-
 .../apache/syncope/fit/core/PullTaskITCase.java    |   4 +-
 .../apache/syncope/fit/core/ResourceITCase.java    |   3 +-
 .../syncope/fit/core/SAML2CallbackHandler.java     |   5 +-
 .../org/apache/syncope/fit/core/SAML2ITCase.java   |   8 +-
 .../org/apache/syncope/fit/core/SCIMITCase.java    |   6 +-
 .../org/apache/syncope/fit/core/UserITCase.java    |   7 +-
 .../apache/syncope/fit/core/UserIssuesITCase.java  |   3 +-
 .../apache/syncope/fit/core/UserSelfITCase.java    |   5 +-
 .../syncope/fit/enduser/AbstractEnduserITCase.java |   4 +-
 .../java/org/apache/syncope/sra/RouteProvider.java |  10 +-
 .../syncope/sra/SyncopeSRATestCoreStartup.java     |   4 +-
 283 files changed, 801 insertions(+), 1002 deletions(-)

diff --git a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteDirectoryPanel.java b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteDirectoryPanel.java
index c1787a8..7ea715a 100644
--- a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteDirectoryPanel.java
+++ b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteDirectoryPanel.java
@@ -166,7 +166,7 @@ public class GatewayRouteDirectoryPanel
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteFilterPanel.java b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteFilterPanel.java
index dc9e5d0..e4c5a74 100644
--- a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteFilterPanel.java
+++ b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteFilterPanel.java
@@ -22,7 +22,6 @@ import de.agilecoders.wicket.core.markup.html.bootstrap.components.PopoverBehavi
 import de.agilecoders.wicket.core.markup.html.bootstrap.components.PopoverConfig;
 import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipConfig;
 import java.io.Serializable;
-import java.util.Arrays;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
@@ -77,7 +76,7 @@ public class GatewayRouteFilterPanel extends Panel {
 
                 AjaxDropDownChoicePanel<FilterFactory> factory =
                         new AjaxDropDownChoicePanel<>("factory", "factory", new PropertyModel<>(filter, "factory"));
-                factory.setChoices(Arrays.asList(FilterFactory.values()));
+                factory.setChoices(List.of(FilterFactory.values()));
                 item.add(factory.hideLabel());
 
                 AjaxTextFieldPanel args =
diff --git a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRoutePredicatePanel.java b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRoutePredicatePanel.java
index 523f0f4..2dc4b58 100644
--- a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRoutePredicatePanel.java
+++ b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRoutePredicatePanel.java
@@ -22,7 +22,6 @@ import de.agilecoders.wicket.core.markup.html.bootstrap.components.PopoverBehavi
 import de.agilecoders.wicket.core.markup.html.bootstrap.components.PopoverConfig;
 import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipConfig;
 import java.io.Serializable;
-import java.util.Arrays;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
@@ -83,7 +82,7 @@ public class GatewayRoutePredicatePanel extends Panel {
 
                 AjaxDropDownChoicePanel<PredicateFactory> factory =
                         new AjaxDropDownChoicePanel<>("factory", "factory", new PropertyModel<>(predicate, "factory"));
-                factory.setChoices(Arrays.asList(PredicateFactory.values()));
+                factory.setChoices(List.of(PredicateFactory.values()));
                 item.add(factory.hideLabel());
 
                 AjaxTextFieldPanel args =
@@ -92,7 +91,7 @@ public class GatewayRoutePredicatePanel extends Panel {
 
                 AjaxDropDownChoicePanel<PredicateCond> cond =
                         new AjaxDropDownChoicePanel<>("cond", "cond", new PropertyModel<>(predicate, "cond"));
-                cond.setChoices(Arrays.asList(PredicateCond.values()));
+                cond.setChoices(List.of(PredicateCond.values()));
                 item.add(cond.hideLabel());
 
                 ActionsPanel<Serializable> actions = new ActionsPanel<>("actions", null);
diff --git a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteWizardBuilder.java b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteWizardBuilder.java
index a71df41..c944944 100644
--- a/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteWizardBuilder.java
+++ b/client/am/console/src/main/java/org/apache/syncope/client/console/panels/GatewayRouteWizardBuilder.java
@@ -20,7 +20,8 @@ package org.apache.syncope.client.console.panels;
 
 import java.io.Serializable;
 import java.net.URI;
-import java.util.Arrays;
+import java.util.List;
+
 import org.apache.syncope.client.console.rest.GatewayRouteRestClient;
 import org.apache.syncope.client.console.wizards.BaseAjaxWizardBuilder;
 import org.apache.syncope.client.ui.commons.markup.html.form.AjaxDropDownChoicePanel;
@@ -104,7 +105,7 @@ public class GatewayRouteWizardBuilder extends BaseAjaxWizardBuilder<GatewayRout
 
             add(new AjaxDropDownChoicePanel<>(
                     "status", "status", new PropertyModel<>(route, "status")).
-                    setChoices(Arrays.asList((Serializable[]) GatewayRouteStatus.values())));
+                    setChoices(List.of((Serializable[]) GatewayRouteStatus.values())));
         }
     }
 
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMImplementationInfoProvider.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMImplementationInfoProvider.java
index 4873fdf..a7ab2c4 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMImplementationInfoProvider.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/commons/IdMImplementationInfoProvider.java
@@ -46,7 +46,7 @@ public class IdMImplementationInfoProvider extends IdRepoImplementationInfoProvi
 
     @Override
     public List<String> getClasses(final ImplementationTO implementation, final ViewMode viewMode) {
-        List<String> classes = Collections.emptyList();
+        List<String> classes = List.of();
         if (viewMode == ViewMode.JSON_BODY) {
             switch (implementation.getType()) {
                 case IdMImplementationType.PULL_CORRELATION_RULE:
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnInstanceHistoryConfDirectoryPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnInstanceHistoryConfDirectoryPanel.java
index 7975fd0..9e1bd2c 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnInstanceHistoryConfDirectoryPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ConnInstanceHistoryConfDirectoryPanel.java
@@ -166,7 +166,7 @@ public abstract class ConnInstanceHistoryConfDirectoryPanel extends DirectoryPan
 
     @Override
     protected Collection<ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ProvisionAuxClassesPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ProvisionAuxClassesPanel.java
index 891202f..6d6e3a9 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ProvisionAuxClassesPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ProvisionAuxClassesPanel.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.panels;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
@@ -70,8 +69,8 @@ public class ProvisionAuxClassesPanel extends Panel {
         IModel<List<String>> model;
         List<String> choices;
         if (provision == null) {
-            model = new ListModel<>(Collections.<String>emptyList());
-            choices = Collections.emptyList();
+            model = new ListModel<>(List.of());
+            choices = List.of();
         } else {
             model = new PropertyModel<>(provision, "auxClasses");
             choices = new ArrayList<>();
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/RemediationDirectoryPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/RemediationDirectoryPanel.java
index 862314f..0d1f06b 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/RemediationDirectoryPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/RemediationDirectoryPanel.java
@@ -21,9 +21,7 @@ package org.apache.syncope.client.console.panels;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
@@ -214,7 +212,7 @@ public class RemediationDirectoryPanel
                                     previousUserTO,
                                     newUserTO,
                                     new AnyTypeRestClient().read(remediationTO.getAnyType()).getClasses(),
-                                    FormLayoutInfoUtils.fetch(Arrays.asList(remediationTO.getAnyType())).getLeft(),
+                                    FormLayoutInfoUtils.fetch(List.of(remediationTO.getAnyType())).getLeft(),
                                     pageRef
                             ).build(BaseModal.CONTENT_ID, AjaxWizard.Mode.EDIT));
                             send(RemediationDirectoryPanel.this, Broadcast.EXACT, userEvent);
@@ -241,7 +239,7 @@ public class RemediationDirectoryPanel
                                     previousGroupTO,
                                     newGroupTO,
                                     new AnyTypeRestClient().read(remediationTO.getAnyType()).getClasses(),
-                                    FormLayoutInfoUtils.fetch(Arrays.asList(remediationTO.getAnyType())).getMiddle(),
+                                    FormLayoutInfoUtils.fetch(List.of(remediationTO.getAnyType())).getMiddle(),
                                     pageRef
                             ).build(BaseModal.CONTENT_ID, AjaxWizard.Mode.EDIT));
                             send(RemediationDirectoryPanel.this, Broadcast.EXACT, groupEvent);
@@ -268,7 +266,7 @@ public class RemediationDirectoryPanel
                                     previousAnyObjectTO,
                                     newAnyObjectTO,
                                     new AnyTypeRestClient().read(remediationTO.getAnyType()).getClasses(),
-                                    FormLayoutInfoUtils.fetch(Arrays.asList(remediationTO.getAnyType())).
+                                    FormLayoutInfoUtils.fetch(List.of(remediationTO.getAnyType())).
                                             getRight().values().iterator().next(),
                                     pageRef
                             ).build(BaseModal.CONTENT_ID, AjaxWizard.Mode.EDIT));
@@ -312,7 +310,7 @@ public class RemediationDirectoryPanel
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     public static class RemediationProvider extends DirectoryDataProvider<RemediationTO> {
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ResourceHistoryConfDirectoryPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ResourceHistoryConfDirectoryPanel.java
index 0a9d1d3..612ebc1 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ResourceHistoryConfDirectoryPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/ResourceHistoryConfDirectoryPanel.java
@@ -167,7 +167,7 @@ public abstract class ResourceHistoryConfDirectoryPanel extends DirectoryPanel<
 
     @Override
     protected Collection<ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
index cb12ded..1c91f53 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.panels;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -167,6 +166,6 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
 
         return connIdObjectClass.isPresent()
                 ? connIdObjectClass.get().getAttributes()
-                : Collections.<String>emptyList();
+                : List.of();
     }
 }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/policies/ProvisioningPolicyModalPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/policies/ProvisioningPolicyModalPanel.java
index 5b85edb..d8f9065 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/policies/ProvisioningPolicyModalPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/policies/ProvisioningPolicyModalPanel.java
@@ -249,7 +249,7 @@ public class ProvisioningPolicyModalPanel extends AbstractModalPanel<Provisionin
                             ? DefaultPullCorrelationRuleConf.class.cast(conf).getSchemas()
                             : conf instanceof DefaultPushCorrelationRuleConf
                                     ? DefaultPushCorrelationRuleConf.class.cast(conf).getSchemas()
-                                    : Collections.emptyList();
+                                    : List.of();
                 }
 
                 @Override
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorHistoryRestClient.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorHistoryRestClient.java
index 9178569..3d0e2e1 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorHistoryRestClient.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorHistoryRestClient.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.rest;
 
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.common.lib.to.ConnInstanceHistoryConfTO;
 import org.apache.syncope.common.rest.api.service.ConnectorHistoryService;
@@ -31,7 +30,7 @@ public class ConnectorHistoryRestClient extends BaseRestClient {
     private static final long serialVersionUID = -1917949374689773018L;
 
     public List<ConnInstanceHistoryConfTO> list(final String key) {
-        List<ConnInstanceHistoryConfTO> connHistoryConfs = Collections.<ConnInstanceHistoryConfTO>emptyList();
+        List<ConnInstanceHistoryConfTO> connHistoryConfs = List.of();
         try {
             connHistoryConfs = getService(ConnectorHistoryService.class).list(key);
         } catch (Exception e) {
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
index 9326a42..1975fd8 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.console.rest;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -43,7 +42,7 @@ public class ConnectorRestClient extends BaseRestClient {
     private static final long serialVersionUID = -6870366819966266617L;
 
     public List<ConnInstanceTO> getAllConnectors() {
-        List<ConnInstanceTO> connectors = Collections.<ConnInstanceTO>emptyList();
+        List<ConnInstanceTO> connectors = List.of();
         try {
             connectors = getService(ConnectorService.class).list(SyncopeConsoleSession.get().getLocale().toString());
         } catch (Exception e) {
@@ -132,7 +131,7 @@ public class ConnectorRestClient extends BaseRestClient {
     }
 
     public List<ConnBundleTO> getAllBundles() {
-        List<ConnBundleTO> bundles = Collections.<ConnBundleTO>emptyList();
+        List<ConnBundleTO> bundles = List.of();
 
         try {
             bundles = getService(ConnectorService.class).getBundles(SyncopeConsoleSession.get().getLocale().toString());
@@ -183,7 +182,7 @@ public class ConnectorRestClient extends BaseRestClient {
     public List<ConnIdObjectClassTO> buildObjectClassInfo(
             final ConnInstanceTO connInstanceTO, final boolean includeSpecial) {
 
-        List<ConnIdObjectClassTO> result = Collections.emptyList();
+        List<ConnIdObjectClassTO> result = List.of();
         try {
             result = getService(ConnectorService.class).buildObjectClassInfo(connInstanceTO, includeSpecial);
         } catch (Exception e) {
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ResourceHistoryRestClient.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ResourceHistoryRestClient.java
index 9efb783..a840d9e 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ResourceHistoryRestClient.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ResourceHistoryRestClient.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.rest;
 
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.common.lib.to.ResourceHistoryConfTO;
 import org.apache.syncope.common.rest.api.service.ResourceHistoryService;
@@ -31,7 +30,7 @@ public class ResourceHistoryRestClient extends BaseRestClient {
     private static final long serialVersionUID = -5722829010510310887L;
 
     public List<ResourceHistoryConfTO> list(final String key) {
-        List<ResourceHistoryConfTO> resHistoryConfs = Collections.<ResourceHistoryConfTO>emptyList();
+        List<ResourceHistoryConfTO> resHistoryConfs = List.of();
         try {
             resHistoryConfs = getService(ResourceHistoryService.class).list(key);
         } catch (Exception e) {
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
index c8e135b..927ab1f 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
@@ -88,7 +88,7 @@ public class ResourceRestClient extends BaseRestClient {
     }
 
     public List<ResourceTO> list() {
-        List<ResourceTO> resources = Collections.emptyList();
+        List<ResourceTO> resources = List.of();
         try {
             resources = getService(ResourceService.class).list();
             Collections.sort(resources, (o1, o2) -> ObjectUtils.compare(o1.getKey(), o2.getKey()));
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
index 2c1ea4f..5fb41dd 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.status;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -288,10 +287,10 @@ public class AnyStatusDirectoryPanel
             final AnyTO actual = restClient.read(anyTO.getKey());
 
             List<StatusBean> statusBeans = actual.getResources().stream().map(resource -> {
-                List<Pair<String, ReconStatus>> statuses = Collections.emptyList();
+                List<Pair<String, ReconStatus>> statuses = List.of();
                 if (statusOnly) {
                     statuses = ReconStatusUtils.
-                            getReconStatuses(anyTypeKind, anyTO.getKey(), Arrays.asList(resource));
+                            getReconStatuses(anyTypeKind, anyTO.getKey(), List.of(resource));
                 }
 
                 return StatusUtils.getStatusBean(actual,
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconStatusPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconStatusPanel.java
index f223979..a19ffbb 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconStatusPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconStatusPanel.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.status;
 
-import java.util.Arrays;
 import java.util.List;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.ui.commons.Constants;
@@ -60,7 +59,7 @@ public class ReconStatusPanel extends RemoteObjectPanel {
     @Override
     protected Pair<ConnObjectTO, ConnObjectTO> getConnObjectTOs() {
         List<Pair<String, ReconStatus>> statuses =
-                ReconStatusUtils.getReconStatuses(anyTypeKind, anyKey, Arrays.asList(resource));
+                ReconStatusUtils.getReconStatuses(anyTypeKind, anyKey, List.of(resource));
 
         return statuses.isEmpty()
                 ? null
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
index 113fbb9..038421b 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.status;
 
-import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
@@ -105,13 +104,13 @@ public class ReconTaskPanel extends MultilevelPanel.SecondLevel {
 
         AjaxDropDownChoicePanel<MatchingRule> matchingRule = new AjaxDropDownChoicePanel<>(
                 "matchingRule", "matchingRule", new PropertyModel<MatchingRule>(taskTO, "matchingRule"), false);
-        matchingRule.setChoices(Arrays.asList(MatchingRule.values()));
+        matchingRule.setChoices(List.of(MatchingRule.values()));
         form.add(matchingRule);
 
         AjaxDropDownChoicePanel<UnmatchingRule> unmatchingRule = new AjaxDropDownChoicePanel<>(
                 "unmatchingRule", "unmatchingRule", new PropertyModel<UnmatchingRule>(taskTO, "unmatchingRule"),
                 false);
-        unmatchingRule.setChoices(Arrays.asList(UnmatchingRule.values()));
+        unmatchingRule.setChoices(List.of(UnmatchingRule.values()));
         form.add(unmatchingRule);
 
         taskTO.setPerformCreate(true);
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/widgets/RemediationsWidget.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/widgets/RemediationsWidget.java
index 9e7a317..0475b69 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/widgets/RemediationsWidget.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/widgets/RemediationsWidget.java
@@ -21,7 +21,6 @@ package org.apache.syncope.client.console.widgets;
 import de.agilecoders.wicket.core.markup.html.bootstrap.image.Icon;
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesomeIconTypeBuilder;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
@@ -107,7 +106,7 @@ public class RemediationsWidget extends ExtAlertWidget<RemediationTO> {
 
                     updatedRemediations = restClient.getRemediations(1, MAX_SIZE, new SortParam<>("instant", true));
                 } else {
-                    updatedRemediations = Collections.<RemediationTO>emptyList();
+                    updatedRemediations = List.of();
                 }
 
                 return updatedRemediations;
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractMappingPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractMappingPanel.java
index 8c08eb5..7aa7fc8 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractMappingPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractMappingPanel.java
@@ -22,7 +22,6 @@ import de.agilecoders.wicket.core.markup.html.bootstrap.components.PopoverBehavi
 import de.agilecoders.wicket.core.markup.html.bootstrap.components.PopoverConfig;
 import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipConfig;
 import java.io.Serializable;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.client.console.commons.ConnIdSpecialName;
@@ -186,7 +185,7 @@ public abstract class AbstractMappingPanel extends Panel {
                         "intAttrName",
                         new PropertyModel<>(itemTO, "intAttrName"),
                         false);
-                intAttrName.setChoices(Collections.<String>emptyList());
+                intAttrName.setChoices(List.of());
                 intAttrName.setRequired(true).hideLabel();
                 item.add(intAttrName);
                 // -------------------------------
@@ -228,7 +227,7 @@ public abstract class AbstractMappingPanel extends Panel {
                         "mandatoryCondition",
                         new PropertyModel<>(itemTO, "mandatoryCondition"));
                 mandatory.hideLabel();
-                mandatory.setChoices(Arrays.asList(new String[] { "true", "false" }));
+                mandatory.setChoices(List.of("true", "false"));
                 mandatory.setEnabled(!itemTO.isConnObjectKey());
                 item.add(mandatory);
                 // -------------------------------
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/CapabilitiesPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/CapabilitiesPanel.java
index 760c38b..b861db7 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/CapabilitiesPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/CapabilitiesPanel.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.wizards.resources;
 
-import java.util.Arrays;
 import java.util.List;
 import org.apache.syncope.client.ui.commons.markup.html.form.AjaxPalettePanel;
 import org.apache.syncope.common.lib.types.ConnectorCapability;
@@ -36,7 +35,7 @@ public class CapabilitiesPanel extends Panel {
 
         AjaxPalettePanel<ConnectorCapability> capabilitiesPalette = new AjaxPalettePanel.Builder<ConnectorCapability>().
                 setAllowMoveAll(true).
-                build("capabilities", model, new ListModel<>(Arrays.asList(ConnectorCapability.values())));
+                build("capabilities", model, new ListModel<>(List.of(ConnectorCapability.values())));
         capabilitiesPalette.setOutputMarkupId(true);
         add(capabilitiesPalette);
     }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ItemTransformersTogglePanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ItemTransformersTogglePanel.java
index dfd00fb..0ba22c9 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ItemTransformersTogglePanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ItemTransformersTogglePanel.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.wizards.resources;
 
 import java.io.Serializable;
-import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
@@ -58,7 +57,7 @@ public class ItemTransformersTogglePanel extends TogglePanel<Serializable> {
             protected List<String> load() {
                 // [!] this is required to disable changed with close button
                 return item == null
-                        ? Collections.<String>emptyList()
+                        ? List.of()
                         : item.getTransformers();
             }
         };
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvision.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvision.java
index 2d0fb6d..01eebb5 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvision.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceProvision.java
@@ -26,7 +26,6 @@ import org.apache.syncope.common.lib.to.OrgUnitTO;
 import org.apache.syncope.common.lib.to.ProvisionTO;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
@@ -127,7 +126,7 @@ public class ResourceProvision implements ToggleableTarget {
     }
 
     public List<String> getAuxClasses() {
-        return provisionTO == null ? Collections.<String>emptyList() : provisionTO.getAuxClasses();
+        return provisionTO == null ? List.of() : provisionTO.getAuxClasses();
     }
 
     public boolean isIgnoreCaseMatch() {
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxDropDownChoicePanel.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxDropDownChoicePanel.java
index 3650353..9d2325a 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxDropDownChoicePanel.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxDropDownChoicePanel.java
@@ -21,7 +21,6 @@ package org.apache.syncope.client.ui.commons.markup.html.form;
 import org.apache.syncope.client.ui.commons.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.select.BootstrapSelect;
 import java.io.Serializable;
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -44,7 +43,7 @@ public class AjaxDropDownChoicePanel<T extends Serializable> extends FieldPanel<
 
         super(id, name, model);
 
-        field = new BootstrapSelect<>("dropDownChoiceField", model, Collections.<T>emptyList(), new ChoiceRenderer<>());
+        field = new BootstrapSelect<>("dropDownChoiceField", model, List.of(), new ChoiceRenderer<>());
         add(field.setLabel(new Model<>(name)).setOutputMarkupId(true));
 
         if (enableOnBlur) {
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.java
index 408216b..46dab17 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxPalettePanel.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.ui.commons.markup.html.form;
 
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -118,7 +117,7 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
                         final IChoiceRenderer<? super T> renderer = getPalette().getChoiceRenderer();
                         final Collection<? extends T> choices = getPalette().getChoices();
                         final List<T> unselected = new ArrayList<>(choices.size());
-                        final List<String> ids = Arrays.asList(getValue().split(","));
+                        final List<String> ids = List.of(getValue().split(","));
 
                         choices.forEach(choice -> {
                             final String choiceId = renderer.getIdValue(choice, 0);
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxTextFieldPanel.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxTextFieldPanel.java
index bf6555b..c092850 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxTextFieldPanel.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/AjaxTextFieldPanel.java
@@ -20,7 +20,7 @@ package org.apache.syncope.client.ui.commons.markup.html.form;
 
 import org.apache.syncope.client.ui.commons.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipConfig;
-import java.util.Collections;
+
 import java.util.Iterator;
 import java.util.List;
 import java.util.regex.Pattern;
@@ -42,7 +42,7 @@ public class AjaxTextFieldPanel extends FieldPanel<String> implements Cloneable
 
     private Component questionMarkJexlHelp;
 
-    private List<String> choices = Collections.emptyList();
+    private List<String> choices = List.of();
 
     public AjaxTextFieldPanel(final String id, final String name, final IModel<String> model) {
         this(id, name, model, true);
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/AjaxWizardBuilder.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/AjaxWizardBuilder.java
index 3eea19f..9031f8a 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/AjaxWizardBuilder.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/AjaxWizardBuilder.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.ui.commons.wizards;
 
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.Callable;
 import java.util.concurrent.Future;
@@ -53,7 +52,7 @@ public abstract class AjaxWizardBuilder<T extends Serializable> extends Abstract
     }
 
     public final AjaxWizardBuilder<T> addOuterObject(final Component... childs) {
-        outerObjects.addAll(Arrays.asList(childs));
+        outerObjects.addAll(List.of(childs));
         return this;
     }
 
diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/any/AbstractResources.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/any/AbstractResources.java
index 7cab344..e2dc29b 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/any/AbstractResources.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/any/AbstractResources.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.ui.commons.wizards.any;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.ui.commons.ajax.markup.html.LabelInfo;
@@ -51,7 +50,7 @@ public abstract class AbstractResources extends WizardStep implements ICondition
         }
 
         this.setOutputMarkupId(true);
-        this.available = new ListModel<>(Collections.<String>emptyList());
+        this.available = new ListModel<>(List.of());
 
         add(new AjaxPalettePanel.Builder<String>().build("resources",
                 new PropertyModel<List<String>>(entityTO, "resources") {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/PreferenceManager.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/PreferenceManager.java
index 7280d83..cb53054 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/PreferenceManager.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/PreferenceManager.java
@@ -24,7 +24,6 @@ import java.io.IOException;
 import java.io.Serializable;
 import java.io.StringWriter;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Base64;
 import java.util.HashMap;
 import java.util.List;
@@ -53,7 +52,7 @@ public class PreferenceManager implements Serializable {
     private static final TypeReference<Map<String, String>> MAP_TYPE_REF = new TypeReference<Map<String, String>>() {
     };
 
-    private static final List<Integer> PAGINATOR_CHOICES = Arrays.asList(new Integer[] { 10, 25, 50 });
+    private static final List<Integer> PAGINATOR_CHOICES = List.of(10, 25, 50);
 
     private static final CookieUtils COOKIE_UTILS;
 
@@ -120,7 +119,7 @@ public class PreferenceManager implements Serializable {
 
         if (StringUtils.isNotBlank(compound)) {
             String[] items = compound.split(";");
-            result.addAll(Arrays.asList(items));
+            result.addAll(List.of(items));
         }
 
         return result;
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
index 1c8a11a..d25233c 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
@@ -20,10 +20,8 @@ package org.apache.syncope.client.console;
 
 import java.text.DateFormat;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -239,8 +237,8 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession implements Ba
         }
 
         Set<String> requested = ArrayUtils.isEmpty(realms)
-                ? Collections.singleton(SyncopeConstants.ROOT_REALM)
-                : new HashSet<>(Arrays.asList(realms));
+                ? Set.of(SyncopeConstants.ROOT_REALM)
+                : Set.of(realms);
 
         for (String entitlement : entitlements.split(",")) {
             if (auth.containsKey(entitlement)) {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeWebApplication.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeWebApplication.java
index 90ab9cc..d291d1c 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeWebApplication.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/SyncopeWebApplication.java
@@ -23,7 +23,7 @@ import de.agilecoders.wicket.core.Bootstrap;
 import de.agilecoders.wicket.core.settings.BootstrapSettings;
 import de.agilecoders.wicket.core.settings.IBootstrapSettings;
 import de.agilecoders.wicket.core.settings.SingleThemeProvider;
-import java.util.Arrays;
+
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
@@ -84,10 +84,8 @@ public class SyncopeWebApplication extends WicketBootSecuredWebApplication {
 
     private static final String CONSOLE_PROPERTIES = "console.properties";
 
-    public static final List<Locale> SUPPORTED_LOCALES = Collections.unmodifiableList(Arrays.asList(
-            new Locale[] {
-                Locale.ENGLISH, Locale.ITALIAN, new Locale("pt", "BR"), new Locale("ru"), Locale.JAPANESE
-            }));
+    public static final List<Locale> SUPPORTED_LOCALES = List.of(
+        Locale.ENGLISH, Locale.ITALIAN, new Locale("pt", "BR"), new Locale("ru"), Locale.JAPANESE);
 
     public static SyncopeWebApplication get() {
         return (SyncopeWebApplication) WebApplication.get();
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java
index 6df9e1c..3aea159 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java
@@ -93,14 +93,14 @@ public class AnyDataProvider<A extends AnyTO> extends DirectoryDataProvider<A> {
 
     @Override
     public Iterator<A> iterator(final long first, final long count) {
-        List<A> result = Collections.emptyList();
+        List<A> result = List.of();
 
         try {
             final int page = ((int) first / paginatorRows);
 
             if (filtered) {
                 result = fiql == null
-                        ? Collections.<A>emptyList()
+                        ? List.of()
                         : restClient.search(realm, fiql, (page < 0 ? 0 : page) + 1, paginatorRows, getSort(), type);
             } else {
                 result = restClient.search(realm, null, (page < 0 ? 0 : page) + 1, paginatorRows, getSort(), type);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoAnyDirectoryPanelAditionalActionLinksProvider.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoAnyDirectoryPanelAditionalActionLinksProvider.java
index 896198d..db90ec9 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoAnyDirectoryPanelAditionalActionLinksProvider.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoAnyDirectoryPanelAditionalActionLinksProvider.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.commons;
 
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.Action;
@@ -41,7 +40,7 @@ public class IdRepoAnyDirectoryPanelAditionalActionLinksProvider
             final String header,
             final PageReference pageRef) {
 
-        return Collections.emptyList();
+        return List.of();
     }
 
     @Override
@@ -52,7 +51,7 @@ public class IdRepoAnyDirectoryPanelAditionalActionLinksProvider
             final String header,
             final PageReference pageRef) {
 
-        return Collections.emptyList();
+        return List.of();
     }
 
     @Override
@@ -64,6 +63,6 @@ public class IdRepoAnyDirectoryPanelAditionalActionLinksProvider
             final String header,
             final PageReference pageRef) {
 
-        return Collections.emptyList();
+        return List.of();
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoExternalResourceProvider.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoExternalResourceProvider.java
index 81f0522..e21f622 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoExternalResourceProvider.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoExternalResourceProvider.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.commons;
 
-import java.util.Collections;
 import java.util.List;
 
 public class IdRepoExternalResourceProvider implements ExternalResourceProvider {
@@ -27,6 +26,6 @@ public class IdRepoExternalResourceProvider implements ExternalResourceProvider
 
     @Override
     public List<String> get() {
-        return Collections.emptyList();
+        return List.of();
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoImplementationInfoProvider.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoImplementationInfoProvider.java
index 8dd4ee5..a01e647 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoImplementationInfoProvider.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoImplementationInfoProvider.java
@@ -59,7 +59,7 @@ public class IdRepoImplementationInfoProvider implements ImplementationInfoProvi
 
     @Override
     public List<String> getClasses(final ImplementationTO implementation, final ViewMode viewMode) {
-        List<String> classes = Collections.emptyList();
+        List<String> classes = List.of();
         if (viewMode == ViewMode.JAVA_CLASS) {
             Optional<JavaImplInfo> javaClasses = SyncopeConsoleSession.get().getPlatformInfo().
                     getJavaImplInfo(implementation.getType());
@@ -173,7 +173,7 @@ public class IdRepoImplementationInfoProvider implements ImplementationInfoProvi
 
             @Override
             protected List<String> load() {
-                return Collections.emptyList();
+                return List.of();
             }
         };
     }
@@ -186,7 +186,7 @@ public class IdRepoImplementationInfoProvider implements ImplementationInfoProvi
 
             @Override
             protected List<String> load() {
-                return Collections.emptyList();
+                return List.of();
             }
         };
     }
@@ -199,7 +199,7 @@ public class IdRepoImplementationInfoProvider implements ImplementationInfoProvi
 
             @Override
             protected List<String> load() {
-                return Collections.emptyList();
+                return List.of();
             }
         };
     }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoStatusProvider.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoStatusProvider.java
index dc246c1..014affa 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoStatusProvider.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/IdRepoStatusProvider.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.console.commons;
 
 import java.io.Serializable;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import org.apache.commons.lang3.tuple.Triple;
 import org.apache.syncope.client.console.panels.ListViewPanel;
@@ -37,7 +36,7 @@ public class IdRepoStatusProvider implements StatusProvider {
     public List<Triple<ConnObjectTO, ConnObjectWrapper, String>> get(
             final AnyTO any, final Collection<String> resources) {
 
-        return Collections.emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/SortableAnyProviderComparator.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/SortableAnyProviderComparator.java
index 83a6d67..6edd6d8 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/SortableAnyProviderComparator.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/SortableAnyProviderComparator.java
@@ -18,8 +18,6 @@
  */
 package org.apache.syncope.client.console.commons;
 
-import java.util.Arrays;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
@@ -33,8 +31,8 @@ public class SortableAnyProviderComparator<T extends AnyTO> extends SortableData
 
     private static final long serialVersionUID = 1775967163571699258L;
 
-    private static final Set<String> INLINE_PROPS = new HashSet<>(Arrays.asList(
-            new String[] { "key", "status", "token", "username", "name" }));
+    private static final Set<String> INLINE_PROPS = Set.of(
+            new String[] { "key", "status", "token", "username", "name" });
 
     public SortableAnyProviderComparator(final SortableDataProvider<T, String> provider) {
         super(provider);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/events/EventCategoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/events/EventCategoryPanel.java
index f7ce815..3dcab7c 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/events/EventCategoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/events/EventCategoryPanel.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.events;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -108,7 +107,7 @@ public abstract class EventCategoryPanel extends Panel {
                 "type",
                 new PropertyModel<>(eventCategoryTO, "type"),
                 false);
-        type.setChoices(Arrays.asList(EventCategoryType.values()));
+        type.setChoices(List.of(EventCategoryType.values()));
         type.setStyleSheet("ui-widget-content ui-corner-all");
         type.setChoiceRenderer(new IChoiceRenderer<EventCategoryType>() {
 
@@ -209,7 +208,7 @@ public abstract class EventCategoryPanel extends Panel {
                     send(EventCategoryPanel.this.getPage(), Broadcast.BREADTH, new EventSelectionChanged(
                             target,
                             Collections.<String>singleton(eventString),
-                            Collections.<String>emptySet()));
+                            Set.of()));
                     target.add(categoryContainer);
                 }
             }
@@ -235,7 +234,7 @@ public abstract class EventCategoryPanel extends Panel {
                     custom.setModelObject(StringUtils.EMPTY);
                     send(EventCategoryPanel.this.getPage(), Broadcast.BREADTH, new EventSelectionChanged(
                             target,
-                            Collections.<String>emptySet(),
+                            Set.of(),
                             Collections.<String>singleton(eventString)));
                     target.add(categoryContainer);
                 }
@@ -302,8 +301,8 @@ public abstract class EventCategoryPanel extends Panel {
                         eventCategoryTO.setCategory(null);
                         eventCategoryTO.setSubcategory(null);
                         if (type.getModelObject() == EventCategoryType.CUSTOM) {
-                            category.setChoices(Collections.<String>emptyList());
-                            subcategory.setChoices(Collections.<String>emptyList());
+                            category.setChoices(List.of());
+                            subcategory.setChoices(List.of());
                             category.setEnabled(false);
                             subcategory.setEnabled(false);
                             custom.setVisible(true);
@@ -312,7 +311,7 @@ public abstract class EventCategoryPanel extends Panel {
                             actionsPanel.setEnabled(true);
                         } else {
                             category.setChoices(filter(eventCategoryTOs, type.getModelObject()));
-                            subcategory.setChoices(Collections.<String>emptyList());
+                            subcategory.setChoices(List.of());
                             category.setEnabled(true);
                             subcategory.setEnabled(true);
                             custom.setVisible(false);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
index 7917c93..5d7422d 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/MailTemplateDirectoryPanel.java
@@ -188,7 +188,7 @@ public class MailTemplateDirectoryPanel
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     protected final class MailTemplateProvider extends DirectoryDataProvider<MailTemplateTO> {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java
index e527dae..ea4b64c 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationDirectoryPanel.java
@@ -163,7 +163,7 @@ public class NotificationDirectoryPanel
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     protected class NotificationProvider extends DirectoryDataProvider<NotificationTO> {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
index da114c3..f3e038f 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.console.notifications;
 
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
@@ -151,7 +150,7 @@ public class NotificationWizardBuilder extends BaseAjaxWizardBuilder<Notificatio
             AjaxDropDownChoicePanel<TraceLevel> traceLevel = new AjaxDropDownChoicePanel<>(
                     "traceLevel", getString("traceLevel"),
                     new PropertyModel<>(notificationTO, "traceLevel"));
-            traceLevel.setChoices(Arrays.asList(TraceLevel.values()));
+            traceLevel.setChoices(List.of(TraceLevel.values()));
             traceLevel.addRequiredLabel();
             add(traceLevel);
 
@@ -181,12 +180,12 @@ public class NotificationWizardBuilder extends BaseAjaxWizardBuilder<Notificatio
 
                 @Override
                 protected List<String> getListAuthRoles() {
-                    return Collections.emptyList();
+                    return List.of();
                 }
 
                 @Override
                 protected List<String> getChangeAuthRoles() {
-                    return Collections.emptyList();
+                    return List.of();
                 }
             });
         }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Audit.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Audit.java
index 173e0ac..61dcde8 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Audit.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Audit.java
@@ -18,8 +18,6 @@
  */
 package org.apache.syncope.client.console.pages;
 
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.apache.commons.collections4.CollectionUtils;
@@ -73,13 +71,12 @@ public class Audit extends BasePage {
 
             @Override
             protected List<String> getListAuthRoles() {
-                return Collections.singletonList(IdRepoEntitlement.AUDIT_LIST);
+                return List.of(IdRepoEntitlement.AUDIT_LIST);
             }
 
             @Override
             protected List<String> getChangeAuthRoles() {
-                return Arrays.asList(
-                        new String[] { IdRepoEntitlement.AUDIT_ENABLE, IdRepoEntitlement.AUDIT_DISABLE });
+                return List.of(IdRepoEntitlement.AUDIT_ENABLE, IdRepoEntitlement.AUDIT_DISABLE);
             }
 
             @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java
index ead43f9..bf28116 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.panels;
 
 import java.io.Serializable;
-import java.util.Arrays;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
@@ -73,7 +72,7 @@ public abstract class AbstractLogsPanel<T extends Serializable> extends Panel {
                     MetaDataRoleAuthorizationStrategy.authorize(loggerTOs, ENABLE, IdRepoEntitlement.LOG_SET_LEVEL);
 
                     loggerTOs.hideLabel();
-                    loggerTOs.setChoices(Arrays.asList(LoggerLevel.values()));
+                    loggerTOs.setChoices(List.of(LoggerLevel.values()));
                     loggerTOs.setNullValid(false);
                     loggerTOs.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AccessTokenDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AccessTokenDirectoryPanel.java
index 5a77815..ca3b487 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AccessTokenDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AccessTokenDirectoryPanel.java
@@ -21,7 +21,6 @@ package org.apache.syncope.client.console.panels;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
@@ -140,7 +139,7 @@ public class AccessTokenDirectoryPanel
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.emptyList();
+        return List.of();
     }
 
     public abstract static class Builder
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
index 565712a..06e3218 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
@@ -22,7 +22,6 @@ import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.client.console.rest.BaseRestClient;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
@@ -282,7 +281,7 @@ public final class AjaxDataTablePanel<T extends Serializable, S> extends DataTab
                                     builder.itemKeyField),
                             target);
                 }
-                group.setModelObject(Collections.<T>emptyList());
+                group.setModelObject(List.of());
                 target.add(group);
             }
         }.setEnabled(builder.isBatchEnabled()).setVisible(builder.isBatchEnabled()));
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
index 17664d6..242efb3 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
@@ -22,7 +22,6 @@ import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Date;
 import java.util.List;
@@ -176,7 +175,7 @@ public abstract class AnyDirectoryPanel<A extends AnyTO, E extends AbstractAnyRe
             }
 
             prefMan.setList(getRequest(), getResponse(), DisplayAttributesModalPanel.getPrefDetailView(type),
-                    Arrays.asList(getDefaultAttributeSelection()));
+                    List.of(getDefaultAttributeSelection()));
         }
 
         columns.addAll(prefcolumns);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetailsPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetailsPanel.java
index eddbe48..03a0036 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetailsPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassDetailsPanel.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.panels;
 
-import java.util.Arrays;
 import java.util.List;
 import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
 import org.apache.syncope.client.console.rest.SchemaRestClient;
@@ -47,8 +46,8 @@ public class AnyTypeClassDetailsPanel extends Panel {
     private final List<String> availableVirSchemas = schemaRestClient.getVirSchemaNames();
 
     private static final List<String> LAYOUT_PARAMETERS =
-            Arrays.asList(new String[] { "admin.user.layout", "self.user.layout",
-        "admin.group.layout", "self.group.layout", "admin.membership.layout", "self.membership.layout" });
+            List.of("admin.user.layout", "self.user.layout",
+        "admin.group.layout", "self.group.layout", "admin.membership.layout", "self.membership.layout");
 
     public AnyTypeClassDetailsPanel(final String id, final AnyTypeClassTO anyTypeClassTO) {
         super(id);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
index 87f5478..093a01a 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeClassesPanel.java
@@ -113,7 +113,7 @@ public class AnyTypeClassesPanel extends TypesDirectoryPanel<
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
index e022165..6f87731 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.panels;
 
-import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
@@ -58,7 +57,7 @@ public class AnyTypeDetailsPanel extends Panel {
 
         final AjaxDropDownChoicePanel<AnyTypeKind> kind = new AjaxDropDownChoicePanel<>(
                 "kind", getString("kind"), new PropertyModel<>(anyTypeTO, "kind"));
-        kind.setChoices(Arrays.asList(AnyTypeKind.values()));
+        kind.setChoices(List.of(AnyTypeKind.values()));
         kind.setOutputMarkupId(true);
         if (anyTypeTO.getKind() == null) {
             kind.setModelObject(AnyTypeKind.ANY_OBJECT);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
index b1d7011..85258c1 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypesPanel.java
@@ -112,7 +112,7 @@ public class AnyTypesPanel extends TypesDirectoryPanel<AnyTypeTO, AnyTypesPanel.
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.java
index 652d051..a66df25 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.java
@@ -212,7 +212,7 @@ public class ApplicationDirectoryPanel extends
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     public abstract static class Builder
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
index 4830877..6b95518 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
@@ -22,7 +22,6 @@ import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.lang.reflect.ParameterizedType;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -92,7 +91,7 @@ public class BeanPanel<T extends Serializable> extends Panel {
 
         this.sCondWrapper = sCondWrapper;
 
-        this.excluded = new ArrayList<>(Arrays.asList(excluded));
+        this.excluded = new ArrayList<>(List.of(excluded));
         this.excluded.add("serialVersionUID");
         this.excluded.add("class");
 
@@ -213,7 +212,7 @@ public class BeanPanel<T extends Serializable> extends Panel {
                         panel = new AjaxPalettePanel.Builder<>().setName(fieldName).build(
                                 "value",
                                 new PropertyModel<>(bean.getObject(), fieldName),
-                                new ListModel(Arrays.asList(listItemType.getEnumConstants()))).hideLabel();
+                                new ListModel(List.of(listItemType.getEnumConstants()))).hideLabel();
                     } else {
                         panel = new MultiFieldPanel.Builder<>(
                                 new PropertyModel<>(bean.getObject(), fieldName)).build(
@@ -246,7 +245,7 @@ public class BeanPanel<T extends Serializable> extends Panel {
                     FastDateFormat.getInstance(SyncopeConstants.DEFAULT_DATE_PATTERN));
         } else if (type.isEnum()) {
             result = new AjaxDropDownChoicePanel(id, fieldName, model).setChoices(
-                    Arrays.asList(type.getEnumConstants()));
+                    List.of(type.getEnumConstants()));
         }
 
         // treat as String if nothing matched above
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainAdminCredentialsPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainAdminCredentialsPanel.java
index 324eae7..2d879ed 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainAdminCredentialsPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainAdminCredentialsPanel.java
@@ -18,7 +18,8 @@
  */
 package org.apache.syncope.client.console.panels;
 
-import java.util.Arrays;
+import java.util.List;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.pages.BasePage;
@@ -52,7 +53,7 @@ public class DomainAdminCredentialsPanel extends AbstractModalPanel<Domain> {
         AjaxDropDownChoicePanel<CipherAlgorithm> adminCipherAlgorithm = new AjaxDropDownChoicePanel<>(
                 "adminCipherAlgorithm", "adminCipherAlgorithm",
                 new PropertyModel<>(domain, "adminCipherAlgorithm"), false);
-        adminCipherAlgorithm.setChoices(Arrays.asList(CipherAlgorithm.values()));
+        adminCipherAlgorithm.setChoices(List.of(CipherAlgorithm.values()));
         adminCipherAlgorithm.addRequiredLabel();
         adminCipherAlgorithm.setNullValid(false);
         add(adminCipherAlgorithm);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainDirectoryPanel.java
index 82eb57e..e8d41e9 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainDirectoryPanel.java
@@ -164,7 +164,7 @@ public class DomainDirectoryPanel extends DirectoryPanel<Domain, Domain, DomainP
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
 
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainWizardBuilder.java
index 84b8874..4a36e16 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DomainWizardBuilder.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.panels;
 
 import java.io.Serializable;
-import java.util.Arrays;
 import java.util.List;
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.syncope.client.console.wicket.markup.html.form.JsonEditorPanel;
@@ -46,7 +45,7 @@ public class DomainWizardBuilder extends BaseAjaxWizardBuilder<Domain> {
 
     private static final long serialVersionUID = -6731030158762705250L;
 
-    private static final List<String> JDBC_DRIVERS = Arrays.asList(
+    private static final List<String> JDBC_DRIVERS = List.of(
             "org.postgresql.Driver",
             "com.mysql.cj.jdbc.Driver",
             "org.mariadb.jdbc.Driver",
@@ -54,7 +53,7 @@ public class DomainWizardBuilder extends BaseAjaxWizardBuilder<Domain> {
             "oracle.jdbc.OracleDriver",
             "org.h2.Driver");
 
-    private static final List<String> DATABASE_PLATFORMS = Arrays.asList(
+    private static final List<String> DATABASE_PLATFORMS = List.of(
             "org.apache.openjpa.jdbc.sql.PostgresDictionary",
             "org.apache.openjpa.jdbc.sql.MySQLDictionary(blobTypeName=LONGBLOB,dateFractionDigits=3)",
             "org.apache.openjpa.jdbc.sql.MariaDBDictionary(blobTypeName=LONGBLOB,dateFractionDigits=3)",
@@ -121,7 +120,7 @@ public class DomainWizardBuilder extends BaseAjaxWizardBuilder<Domain> {
             AjaxDropDownChoicePanel<Domain.TransactionIsolation> transactionIsolation = new AjaxDropDownChoicePanel<>(
                     "transactionIsolation", "transactionIsolation",
                     new PropertyModel<>(domain, "transactionIsolation"), false);
-            transactionIsolation.setChoices(Arrays.asList(Domain.TransactionIsolation.values()));
+            transactionIsolation.setChoices(List.of(Domain.TransactionIsolation.values()));
             transactionIsolation.addRequiredLabel();
             transactionIsolation.setNullValid(false);
             add(transactionIsolation);
@@ -164,7 +163,7 @@ public class DomainWizardBuilder extends BaseAjaxWizardBuilder<Domain> {
             AjaxDropDownChoicePanel<CipherAlgorithm> adminCipherAlgorithm = new AjaxDropDownChoicePanel<>(
                     "adminCipherAlgorithm", "adminCipherAlgorithm",
                     new PropertyModel<>(domain, "adminCipherAlgorithm"), false);
-            adminCipherAlgorithm.setChoices(Arrays.asList(CipherAlgorithm.values()));
+            adminCipherAlgorithm.setChoices(List.of(CipherAlgorithm.values()));
             adminCipherAlgorithm.addRequiredLabel();
             adminCipherAlgorithm.setNullValid(false);
             add(adminCipherAlgorithm);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java
index e845cae..d73036d 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java
@@ -158,7 +158,7 @@ public class DynRealmDirectoryPanel extends
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     public abstract static class Builder
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationDirectoryPanel.java
index b4c5080..951f3bf 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ImplementationDirectoryPanel.java
@@ -186,7 +186,7 @@ public class ImplementationDirectoryPanel extends DirectoryPanel<
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     protected class ImplementationProvider extends DirectoryDataProvider<ImplementationTO> {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java
index 1e78c0a..30b0944 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java
@@ -23,7 +23,6 @@ import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import org.apache.commons.lang3.StringUtils;
@@ -253,7 +252,7 @@ public abstract class ListViewPanel<T extends Serializable> extends WizardMgtPan
 
         private static final long serialVersionUID = -3643771352897992172L;
 
-        private IModel<? extends Collection<T>> model = Model.of(Collections.<T>emptyList());
+        private IModel<? extends Collection<T>> model = Model.of(List.of());
 
         private final List<String> includes = new ArrayList<>();
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel.java
index a50a19c..ece172a 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/NetworkServiceDirectoryPanel.java
@@ -21,7 +21,6 @@ package org.apache.syncope.client.console.panels;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import org.apache.syncope.client.ui.commons.DirectoryDataProvider;
@@ -104,7 +103,7 @@ public class NetworkServiceDirectoryPanel extends DirectoryPanel<
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     protected class NetworkServiceProvider extends DirectoryDataProvider<NetworkService> {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ParametersWizardAttrStep.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ParametersWizardAttrStep.java
index 8f1c8ef..84c44e7 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ParametersWizardAttrStep.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ParametersWizardAttrStep.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.panels;
 
-import java.util.Arrays;
 import java.util.List;
 import javax.ws.rs.core.MediaType;
 import org.apache.commons.lang3.BooleanUtils;
@@ -68,7 +67,7 @@ public class ParametersWizardAttrStep extends WizardStep {
 
             @Override
             protected List<PlainSchemaTO> load() {
-                return Arrays.asList(modelObject.getSchema());
+                return List.of(modelObject.getSchema());
             }
         };
 
@@ -100,7 +99,7 @@ public class ParametersWizardAttrStep extends WizardStep {
 
             case Boolean:
                 panel = new AjaxDropDownChoicePanel<Boolean>(id, valueHeaderName, new Model<>(), false);
-                ((AjaxDropDownChoicePanel<Boolean>) panel).setChoices(Arrays.asList(true, false));
+                ((AjaxDropDownChoicePanel<Boolean>) panel).setChoices(List.of(true, false));
 
                 if (!param.getValues().isEmpty()) {
                     ((AjaxDropDownChoicePanel) panel).setChoiceRenderer(new IChoiceRenderer<Boolean>() {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ParametersWizardSchemaStep.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ParametersWizardSchemaStep.java
index 5973c4b..4c1f984 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ParametersWizardSchemaStep.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ParametersWizardSchemaStep.java
@@ -18,7 +18,8 @@
  */
 package org.apache.syncope.client.console.panels;
 
-import java.util.Arrays;
+import java.util.List;
+
 import org.apache.syncope.client.ui.commons.markup.html.form.AjaxCheckBoxPanel;
 import org.apache.syncope.client.ui.commons.markup.html.form.AjaxDropDownChoicePanel;
 import org.apache.syncope.common.lib.types.AttrSchemaType;
@@ -40,7 +41,7 @@ public class ParametersWizardSchemaStep extends WizardStep {
 
         AjaxDropDownChoicePanel<AttrSchemaType> type = new AjaxDropDownChoicePanel<>(
                 "type", getString("type"), new PropertyModel<>(modelObject.getSchema(), "type"));
-        type.setChoices(Arrays.asList(
+        type.setChoices(List.of(
                 AttrSchemaType.String, AttrSchemaType.Long, AttrSchemaType.Double,
                 AttrSchemaType.Boolean, AttrSchemaType.Date, AttrSchemaType.Binary));
         content.add(type);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
index 9fc445e..5490b0c 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
@@ -20,8 +20,6 @@ package org.apache.syncope.client.console.panels;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipConfig;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -75,7 +73,7 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
 
         boolean isCreate = schemaTO == null || schemaTO.getKey() == null || schemaTO.getKey().isEmpty();
 
-        type.setChoices(Arrays.asList(AttrSchemaType.values()));
+        type.setChoices(List.of(AttrSchemaType.values()));
         type.setEnabled(isCreate);
         type.addRequiredLabel();
         add(type);
@@ -189,7 +187,7 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
                 "cipherAlgorithm", getString("cipherAlgorithm"),
                 new PropertyModel<>(schemaTO, "cipherAlgorithm"));
 
-        cipherAlgorithm.setChoices(Arrays.asList(CipherAlgorithm.values()));
+        cipherAlgorithm.setChoices(List.of(CipherAlgorithm.values()));
 
         final WebMarkupContainer encryptedParams = new WebMarkupContainer("encryptedParams");
         encryptedParams.setOutputMarkupPlaceholderTag(true);
@@ -259,7 +257,7 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
                 List<String> choices = new ArrayList<>();
 
                 if (Strings.isEmpty(input)) {
-                    choices = Collections.emptyList();
+                    choices = List.of();
                 } else if ("true".startsWith(input.toLowerCase())) {
                     choices.add("true");
                 } else if ("false".startsWith(input.toLowerCase())) {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.java
index 54c5a89..418c891 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.java
@@ -132,7 +132,7 @@ public class PrivilegeDirectoryPanel extends DirectoryPanel<
 
     @Override
     protected Collection<ActionType> getBatches() {
-        return Collections.<ActionType>emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java
index 13dbc14..33f8d7b 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java
@@ -27,7 +27,6 @@ import de.agilecoders.wicket.core.markup.html.bootstrap.image.GlyphIconType;
 import de.agilecoders.wicket.core.markup.html.bootstrap.image.IconType;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
@@ -331,7 +330,7 @@ public class RealmChoicePanel extends Panel {
             } else if (cache.containsKey(realm.getParent())) {
                 cache.get(realm.getParent()).add(realm);
             } else {
-                cache.put(realm.getParent(), new ArrayList<>(Collections.singleton(realm)));
+                cache.put(realm.getParent(), List.of(realm));
             }
         });
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
index 9ff809c..61abfce 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RelationshipTypesPanel.java
@@ -115,7 +115,7 @@ public class RelationshipTypesPanel extends TypesDirectoryPanel<
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
index ff20636..3462e42 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
@@ -21,7 +21,6 @@ package org.apache.syncope.client.console.panels;
 import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -67,12 +66,10 @@ public class SchemaTypePanel extends TypesDirectoryPanel<SchemaTO, SchemaProvide
         private static final long serialVersionUID = 3109256773218160485L;
 
         {
-            put(SchemaType.PLAIN, Arrays.asList(new String[] {
-                "key", "type", "mandatoryCondition", "uniqueConstraint", "multivalue", "readonly" }));
-            put(SchemaType.DERIVED, Arrays.asList(new String[] {
-                "key", "expression" }));
-            put(SchemaType.VIRTUAL, Arrays.asList(new String[] {
-                "key", "resource", "anyType", "extAttrName", "readonly" }));
+            put(SchemaType.PLAIN,
+                List.of("key", "type", "mandatoryCondition", "uniqueConstraint", "multivalue", "readonly"));
+            put(SchemaType.DERIVED, List.of("key", "expression"));
+            put(SchemaType.VIRTUAL, List.of("key", "resource", "anyType", "extAttrName", "readonly"));
         }
     };
 
@@ -119,7 +116,7 @@ public class SchemaTypePanel extends TypesDirectoryPanel<SchemaTO, SchemaProvide
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypeWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypeWizardBuilder.java
index 9d3eadf..b272eaf 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypeWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypeWizardBuilder.java
@@ -20,7 +20,7 @@ package org.apache.syncope.client.console.panels;
 
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.List;
 import java.util.Locale;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -102,7 +102,7 @@ public class SchemaTypeWizardBuilder extends BaseAjaxWizardBuilder<SchemaTO> {
         public Details(final SchemaTO modelObject) {
             AjaxDropDownChoicePanel<SchemaType> kind =
                     new AjaxDropDownChoicePanel<>("kind", getString("kind"), new Model<>());
-            kind.setChoices(Arrays.asList(SchemaType.values()));
+            kind.setChoices(List.of(SchemaType.values()));
             kind.setOutputMarkupId(true);
             kind.setModelObject(schemaType);
             kind.setEnabled(false);
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
index 6717341..3941668 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
@@ -122,7 +122,7 @@ public class SecurityQuestionsPanel extends DirectoryPanel<
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.java
index 2320fd9..aaa6ed0 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.java
@@ -22,7 +22,6 @@ import org.apache.syncope.client.ui.commons.panels.SubmitableModalPanel;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
@@ -166,7 +165,7 @@ public class TypeExtensionDirectoryPanel
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.emptyList();
+        return List.of();
     }
 
     protected class TypeExtensionDataProvider extends DirectoryDataProvider<TypeExtensionTO> {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
index 3380469..920e4e5 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/AnySelectionDirectoryPanel.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.console.panels.search;
 
 import java.io.Serializable;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.client.console.panels.AnyDirectoryPanel;
 import org.apache.syncope.client.console.rest.AbstractAnyRestClient;
@@ -68,7 +67,7 @@ public abstract class AnySelectionDirectoryPanel<A extends AnyTO, E extends Abst
 
     @Override
     protected Collection<ActionType> getBatches() {
-        return Collections.<ActionType>emptyList();
+        return List.of();
     }
 
     public abstract static class Builder<A extends AnyTO, E extends AbstractAnyRestClient<A>>
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
index ec28b3e..fab05ab 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
@@ -22,7 +22,6 @@ import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.checkbox.boot
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.checkbox.bootstraptoggle.BootstrapToggleConfig;
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -168,25 +167,25 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
 
                 switch (field.getModel().getObject().getType()) {
                     case ATTRIBUTE:
-                        return Arrays.asList(SearchClause.Comparator.values());
+                        return List.of(SearchClause.Comparator.values());
 
                     case ROLE_MEMBERSHIP:
                     case PRIVILEGE:
                     case GROUP_MEMBERSHIP:
                     case GROUP_MEMBER:
                     case RESOURCE:
-                        return Arrays.asList(
+                        return List.of(
                                 SearchClause.Comparator.EQUALS,
                                 SearchClause.Comparator.NOT_EQUALS);
 
                     case RELATIONSHIP:
-                        return Arrays.asList(
+                        return List.of(
                                 SearchClause.Comparator.IS_NOT_NULL,
                                 SearchClause.Comparator.IS_NULL,
                                 SearchClause.Comparator.EQUALS,
                                 SearchClause.Comparator.NOT_EQUALS);
                     default:
-                        return Collections.<Comparator>emptyList();
+                        return List.of();
                 }
             }
         };
@@ -198,7 +197,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
             @Override
             protected List<String> load() {
                 if (field.getModel().getObject() == null || field.getModel().getObject().getType() == null) {
-                    return Collections.<String>emptyList();
+                    return List.of();
                 }
 
                 switch (field.getModel().getObject().getType()) {
@@ -237,7 +236,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
                         return relations;
 
                     default:
-                        return Collections.<String>emptyList();
+                        return List.of();
                 }
             }
         };
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java
index ad922af..c0d0f2f 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyModalPanelBuilder.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.console.policies;
 
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeWebApplication;
@@ -140,7 +139,7 @@ public class PolicyModalPanelBuilder<T extends PolicyTO> extends AbstractModalPa
                         "field",
                         "conflictResolutionAction",
                         new PropertyModel<>(policyTO, "conflictResolutionAction")).
-                        setChoices(Arrays.asList((Serializable[]) ConflictResolutionAction.values())));
+                        setChoices(List.of((Serializable[]) ConflictResolutionAction.values())));
             }
 
             add(new ListView<Component>("fields", fields) {
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
index 488d53f..b08eaac 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
@@ -207,7 +207,7 @@ public class PolicyRuleDirectoryPanel<T extends PolicyTO> extends DirectoryPanel
 
     @Override
     protected Collection<ActionType> getBatches() {
-        return Collections.emptyList();
+        return List.of();
     }
 
     @Override
@@ -263,7 +263,7 @@ public class PolicyRuleDirectoryPanel<T extends PolicyTO> extends DirectoryPanel
 
             List<PolicyRuleWrapper> rules = actual instanceof ComposablePolicy
                     ? getPolicyRuleWrappers((ComposablePolicy) actual)
-                    : Collections.emptyList();
+                    : List.of();
 
             Collections.sort(rules, comparator);
             return rules.subList((int) first, (int) (first + count)).iterator();
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java
index 0f5edbf..b8a96aa 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java
@@ -207,7 +207,7 @@ public class ReportTemplateDirectoryPanel
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
 
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java
index 9138471..f6b162d 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/reports/ReportletDirectoryPanel.java
@@ -194,7 +194,7 @@ public class ReportletDirectoryPanel extends DirectoryPanel<
 
     @Override
     protected Collection<ActionType> getBatches() {
-        return Collections.emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeClassRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeClassRestClient.java
index 7382436..39fac46 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeClassRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeClassRestClient.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.console.rest;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.AnyTypeClassTO;
@@ -47,7 +46,7 @@ public class AnyTypeClassRestClient extends BaseRestClient {
     }
 
     public List<AnyTypeClassTO> list() {
-        List<AnyTypeClassTO> types = Collections.emptyList();
+        List<AnyTypeClassTO> types = List.of();
 
         try {
             types = getService(AnyTypeClassService.class).list();
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeRestClient.java
index b1e55a6..8f1b75b 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeRestClient.java
@@ -50,7 +50,7 @@ public class AnyTypeRestClient extends BaseRestClient {
     }
 
     public List<AnyTypeTO> listAnyTypes() {
-        List<AnyTypeTO> types = Collections.emptyList();
+        List<AnyTypeTO> types = List.of();
 
         try {
             types = getService(AnyTypeService.class).list();
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/LoggerRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/LoggerRestClient.java
index a90ad04..8ae1d2c 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/LoggerRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/LoggerRestClient.java
@@ -102,7 +102,7 @@ public class LoggerRestClient extends BaseRestClient {
         try {
             return getService(LoggerService.class).events();
         } catch (Exception e) {
-            return Collections.<EventCategory>emptyList();
+            return List.of();
         }
     }
 }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
index 8dfe3ec..f9fd677 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.rest;
 
 import java.io.Serializable;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Optional;
@@ -55,7 +54,7 @@ public class PolicyRestClient extends BaseRestClient {
                     collect(Collectors.toList());
         } catch (Exception ignore) {
             LOG.debug("No policy found", ignore);
-            return Collections.<T>emptyList();
+            return List.of();
         }
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RelationshipTypeRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RelationshipTypeRestClient.java
index f79d04d..564026d 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RelationshipTypeRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RelationshipTypeRestClient.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.rest;
 
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.RelationshipTypeTO;
@@ -45,7 +44,7 @@ public class RelationshipTypeRestClient extends BaseRestClient {
     }
 
     public List<RelationshipTypeTO> list() {
-        List<RelationshipTypeTO> types = Collections.emptyList();
+        List<RelationshipTypeTO> types = List.of();
 
         try {
             types = getService(RelationshipTypeService.class).list();
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
index f738a17..548a688 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/SchemaRestClient.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.rest;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
@@ -87,7 +86,7 @@ public class SchemaRestClient extends BaseRestClient {
     }
 
     public List<String> getSchemaNames(final SchemaType schemaType) {
-        List<String> schemaNames = Collections.emptyList();
+        List<String> schemaNames = List.of();
 
         try {
             schemaNames = getSchemas(schemaType, null, new String[0]).stream().
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/CrontabPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/CrontabPanel.java
index e426323..f8143eb 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/CrontabPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/CrontabPanel.java
@@ -18,7 +18,8 @@
  */
 package org.apache.syncope.client.console.tasks;
 
-import java.util.Arrays;
+import java.util.List;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.ui.commons.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
@@ -96,7 +97,7 @@ public class CrontabPanel extends Panel {
                 // no detach
             }
         });
-        cronTemplateChooser.setChoices(Arrays.asList(cronTemplates));
+        cronTemplateChooser.setChoices(List.of(cronTemplates));
         cronTemplateChooser.setChoiceRenderer(new SelectChoiceRenderer<>());
         add(cronTemplateChooser);
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
index 4cdd6a8..513b2c3 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.tasks;
 
 import java.io.Serializable;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -164,7 +163,7 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends BaseAjaxWizar
 
             final AjaxDropDownChoicePanel<PullMode> pullMode = new AjaxDropDownChoicePanel<>(
                     "pullMode", "pullMode", new PropertyModel<>(taskTO, "pullMode"), false);
-            pullMode.setChoices(Arrays.asList(PullMode.values()));
+            pullMode.setChoices(List.of(PullMode.values()));
             if (taskTO instanceof PullTaskTO) {
                 pullMode.addRequiredLabel();
             }
@@ -251,13 +250,13 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends BaseAjaxWizar
 
             AjaxDropDownChoicePanel<MatchingRule> matchingRule = new AjaxDropDownChoicePanel<>(
                     "matchingRule", "matchingRule", new PropertyModel<>(taskTO, "matchingRule"), false);
-            matchingRule.setChoices(Arrays.asList(MatchingRule.values()));
+            matchingRule.setChoices(List.of(MatchingRule.values()));
             provisioningTaskSpecifics.add(matchingRule);
 
             AjaxDropDownChoicePanel<UnmatchingRule> unmatchingRule = new AjaxDropDownChoicePanel<>(
                     "unmatchingRule", "unmatchingRule", new PropertyModel<>(taskTO, "unmatchingRule"),
                     false);
-            unmatchingRule.setChoices(Arrays.asList(UnmatchingRule.values()));
+            unmatchingRule.setChoices(List.of(UnmatchingRule.values()));
             provisioningTaskSpecifics.add(unmatchingRule);
 
             AjaxCheckBoxPanel performCreate = new AjaxCheckBoxPanel(
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/head/MetaHeaderItem.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/head/MetaHeaderItem.java
index 2c5150e..cf58362 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/head/MetaHeaderItem.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/head/MetaHeaderItem.java
@@ -19,7 +19,8 @@
 package org.apache.syncope.client.console.wicket.markup.head;
 
 import java.io.Serializable;
-import java.util.Arrays;
+import java.util.List;
+
 import org.apache.wicket.markup.head.HeaderItem;
 import org.apache.wicket.request.Response;
 
@@ -38,7 +39,7 @@ public class MetaHeaderItem extends HeaderItem implements Serializable {
 
     @Override
     public Iterable<?> getRenderTokens() {
-        return Arrays.asList("meta-" + key + "-" + value);
+        return List.of("meta-" + key + "-" + value);
     }
 
     @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/SelectableRecorder.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/SelectableRecorder.java
index b82332e..5e957b7 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/SelectableRecorder.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/SelectableRecorder.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.console.wicket.markup.html.form;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
@@ -119,7 +118,7 @@ public class SelectableRecorder<T> extends Recorder<T> {
     public List<T> getSelectedList() {
         IChoiceRenderer<? super T> renderer = getPalette().getChoiceRenderer();
         if (ids.length == 0) {
-            return Collections.<T>emptyList();
+            return List.of();
         }
 
         List<T> selected = new ArrayList<>(ids.length);
@@ -140,7 +139,7 @@ public class SelectableRecorder<T> extends Recorder<T> {
         Collection<? extends T> choices = getPalette().getChoices();
 
         if (choices.size() - ids.length == 0) {
-            return Collections.<T>emptyList();
+            return List.of();
         }
 
         List<T> unselected = new ArrayList<>(Math.max(1, choices.size() - ids.length));
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java
index 1963899..1bab48b 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java
@@ -333,7 +333,7 @@ public class JobWidget extends BaseWidget {
 
         @Override
         protected Collection<ActionLink.ActionType> getBatches() {
-            return Collections.<ActionLink.ActionType>emptyList();
+            return List.of();
         }
 
         @Override
@@ -615,7 +615,7 @@ public class JobWidget extends BaseWidget {
 
         @Override
         protected Collection<ActionLink.ActionType> getBatches() {
-            return Collections.<ActionLink.ActionType>emptyList();
+            return List.of();
         }
 
         @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.java
index 66571dd..9b334b7 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.java
@@ -104,7 +104,7 @@ public class ReconDetailsModalPanel extends AbstractModalPanel<Any> {
 
         @Override
         protected Collection<ActionLink.ActionType> getBatches() {
-            return Collections.<ActionLink.ActionType>emptyList();
+            return List.of();
         }
 
         @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
index 4e86dda..2f2068e 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
@@ -262,7 +262,7 @@ public class ReconciliationWidget extends BaseWidget {
     }
 
     private Pair<List<ProgressBean>, ReconciliationReport> parseReconciliationReportExec() throws IOException {
-        List<ProgressBean> beans = Collections.emptyList();
+        List<ProgressBean> beans = List.of();
         ReconciliationReport report = null;
 
         Optional<ExecTO> exec = Optional.empty();
@@ -349,7 +349,7 @@ public class ReconciliationWidget extends BaseWidget {
 
         @Override
         protected Collection<ActionLink.ActionType> getBatches() {
-            return Collections.<ActionLink.ActionType>emptyList();
+            return List.of();
         }
 
         @Override
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
index 2f99589..44f41a2 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/WizardMgtPanel.java
@@ -22,7 +22,6 @@ import org.apache.syncope.client.ui.commons.wizards.ModalPanelBuilder;
 import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
@@ -320,7 +319,7 @@ public abstract class WizardMgtPanel<T extends Serializable> extends AbstractWiz
      * @return the current panel instance.
      */
     public final WizardMgtPanel<T> addOuterObject(final Component... childs) {
-        outerObjects.addAll(Arrays.asList(childs));
+        outerObjects.addAll(List.of(childs));
         return this;
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
index 5544ca5..584344c 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java
@@ -82,7 +82,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends WizardStep imple
             final List<String> whichAttrs) {
         super();
         this.anyTypeClasses = anyTypeClasses;
-        this.attrs = new ListModel<>(Collections.<Attr>emptyList());
+        this.attrs = new ListModel<>(List.of());
         this.membershipTOs = new ListModel<>(Collections.<MembershipTO>emptyList());
 
         this.setOutputMarkupId(true);
@@ -153,7 +153,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends WizardStep imple
     private void setSchemas(final List<String> anyTypeClasses, final Map<String, S> scs) {
         final List<S> allSchemas;
         if (anyTypeClasses.isEmpty()) {
-            allSchemas = Collections.emptyList();
+            allSchemas = List.of();
         } else {
             allSchemas = schemaRestClient.getSchemas(getSchemaType(), null, anyTypeClasses.toArray(new String[] {}));
         }
@@ -193,7 +193,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends WizardStep imple
             final GroupTO groupTO = groupRestClient.read(membershipTO.getGroupKey());
             return groupTO.getTypeExtension(anyType).get().getAuxClasses();
         } catch (Exception e) {
-            return Collections.emptyList();
+            return List.of();
         }
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
index 36c347e..01ab56b 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
@@ -65,10 +65,10 @@ public class ConnObjectPanel extends Panel {
             @Override
             protected List<String> load() {
                 List<Attr> right = new ArrayList<>(connObjectTOs == null || connObjectTOs.getRight() == null
-                        ? Collections.<Attr>emptyList()
+                        ? List.of()
                         : connObjectTOs.getRight().getAttrs());
                 List<Attr> left = new ArrayList<>(connObjectTOs == null || connObjectTOs.getLeft() == null
-                        ? Collections.<Attr>emptyList()
+                        ? List.of()
                         : connObjectTOs.getLeft().getAttrs());
 
                 List<String> schemas = ListUtils.sum(right.stream().map(Attr::getSchema).collect(Collectors.toList()),
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
index e7abff7..7727cb4 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java
@@ -511,7 +511,7 @@ public class PlainAttrs extends AbstractAttrs<PlainSchemaTO> {
 
                 List<String> oldValues = prevAttr.isPresent()
                         ? prevAttr.get().getValues()
-                        : Collections.<String>emptyList();
+                        : List.of();
                 panel.showExternAction(new LabelInfo("externalAction", oldValues));
             }
         }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
index c34140f..9b1adc1 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Relationships.java
@@ -21,7 +21,6 @@ package org.apache.syncope.client.console.wizards.any;
 import org.apache.syncope.client.ui.commons.wizards.any.UserWrapper;
 import org.apache.syncope.client.ui.commons.wizards.any.AnyWrapper;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -206,7 +205,7 @@ public class Relationships extends WizardStep implements ICondition {
     }
 
     private void addNewRelationships(final RelationshipTO... rels) {
-        getCurrentRelationships().addAll(Arrays.asList(rels));
+        getCurrentRelationships().addAll(List.of(rels));
     }
 
     private void removeRelationships(
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
index 0f347a0..b61491f 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Roles.java
@@ -78,7 +78,7 @@ public class Roles extends WizardStep implements ICondition {
         allRoles = SyncopeWebApplication.get().getSecuritySettings().getAuthorizationStrategy().
                 isActionAuthorized(this, RENDER)
                 ? new RoleRestClient().list().stream().map(EntityTO::getKey).collect(Collectors.toList())
-                : Collections.<String>emptyList();
+                : List.of();
         Collections.sort(allRoles);
 
         add(new AjaxPalettePanel.Builder<String>().build("roles",
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyRecipientsProvider.groovy b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyRecipientsProvider.groovy
index d118861..6009cf9 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyRecipientsProvider.groovy
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyRecipientsProvider.groovy
@@ -26,6 +26,6 @@ class MyRecipientsProvider implements RecipientsProvider {
   
   @Override
   Set<String> provideRecipients(Notification notification) {
-    return Collections.emptyList();
+    return List.of();
   }
 }
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeWebApplication.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeWebApplication.java
index 27d706d..ee0f5ce 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeWebApplication.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeWebApplication.java
@@ -27,8 +27,6 @@ import de.agilecoders.wicket.core.settings.IBootstrapSettings;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
@@ -91,10 +89,8 @@ public class SyncopeWebApplication extends WicketBootStandardWebApplication {
 
     private static final String CUSTOM_FORM_ATTRIBUTES_FILE = "customFormAttributes.json";
 
-    public static final List<Locale> SUPPORTED_LOCALES = Collections.unmodifiableList(Arrays.asList(
-            new Locale[] {
-                Locale.ENGLISH, Locale.ITALIAN, new Locale("pt", "BR"), new Locale("ru"), Locale.JAPANESE
-            }));
+    public static final List<Locale> SUPPORTED_LOCALES = List.of(
+        Locale.ENGLISH, Locale.ITALIAN, new Locale("pt", "BR"), new Locale("ru"), Locale.JAPANESE);
 
     private static final ObjectMapper MAPPER = new ObjectMapper();
 
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/AnyTypeRestClient.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/AnyTypeRestClient.java
index 5c65775..96ba840 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/AnyTypeRestClient.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/AnyTypeRestClient.java
@@ -48,7 +48,7 @@ public class AnyTypeRestClient extends BaseRestClient {
     }
 
     public List<AnyTypeTO> listAnyTypes() {
-        List<AnyTypeTO> types = Collections.emptyList();
+        List<AnyTypeTO> types = List.of();
 
         try {
             types = getService(AnyTypeService.class).list();
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SchemaRestClient.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SchemaRestClient.java
index 1fb4048..dc9de6e 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SchemaRestClient.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SchemaRestClient.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.enduser.rest;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
@@ -87,7 +86,7 @@ public class SchemaRestClient extends BaseRestClient {
     }
 
     public List<String> getSchemaNames(final SchemaType schemaType) {
-        List<String> schemaNames = Collections.emptyList();
+        List<String> schemaNames = List.of();
 
         try {
             schemaNames = getSchemas(schemaType, null, new String[0]).stream().
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SyncopeRestClient.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SyncopeRestClient.java
index 3aa77a8..088b63f 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SyncopeRestClient.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/SyncopeRestClient.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.enduser.rest;
 
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.TypeExtensionTO;
@@ -29,7 +28,7 @@ public class SyncopeRestClient extends BaseRestClient {
     private static final long serialVersionUID = -2211371717449597247L;
 
     public List<String> listAnyTypeClasses() {
-        List<String> types = Collections.emptyList();
+        List<String> types = List.of();
 
         try {
             types = getService(SyncopeService.class).platform().getAnyTypeClasses();
@@ -40,7 +39,7 @@ public class SyncopeRestClient extends BaseRestClient {
     }
 
     public List<String> searchUserTypeExtensions(final String groupName) {
-        List<String> types = Collections.emptyList();
+        List<String> types = List.of();
         try {
             TypeExtensionTO typeExtensionTO = getService(SyncopeService.class).readUserTypeExtension(groupName);
             types = typeExtensionTO == null ? types : typeExtensionTO.getAuxClasses();
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/AbstractAttrs.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/AbstractAttrs.java
index 9500d0c..67fd50e 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/AbstractAttrs.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/AbstractAttrs.java
@@ -78,7 +78,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends WizardStep imple
             final Map<String, CustomizationOption> whichAttrs) {
         super();
         this.anyTypeClasses = anyTypeClasses;
-        this.attrs = new ListModel<>(Collections.<Attr>emptyList());
+        this.attrs = new ListModel<>(List.of());
         this.membershipTOs = new ListModel<>(Collections.<MembershipTO>emptyList());
 
         this.setOutputMarkupId(true);
@@ -146,7 +146,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends WizardStep imple
                 : groupName + "#")
                 + schema;
         return whichAttrs.get(schemaName) == null
-                ? Collections.<String>emptyList()
+                ? List.of()
                 : whichAttrs.get(schemaName).getDefaultValues();
     }
 
@@ -171,7 +171,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends WizardStep imple
     private void setSchemas(final List<String> anyTypeClasses, final String groupName, final Map<String, S> scs) {
         final List<S> allSchemas;
         if (anyTypeClasses.isEmpty()) {
-            allSchemas = Collections.emptyList();
+            allSchemas = List.of();
         } else {
             allSchemas = schemaRestClient.getSchemas(getSchemaType(), null, anyTypeClasses.toArray(new String[] {}));
         }
@@ -212,7 +212,7 @@ public abstract class AbstractAttrs<S extends SchemaTO> extends WizardStep imple
         try {
             return syncopeRestClient.searchUserTypeExtensions(membershipTO.getGroupName());
         } catch (Exception e) {
-            return Collections.emptyList();
+            return List.of();
         }
     }
 
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/Groups.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/Groups.java
index 98c2166..0fb09fa 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/Groups.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/Groups.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.enduser.wizards.any;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
@@ -162,7 +161,7 @@ public class Groups extends AbstractGroups {
 
         @Override
         public List<String> getDynMemberships() {
-            return Collections.emptyList();
+            return List.of();
         }
 
         /**
diff --git a/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/RestClientExceptionMapper.java b/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/RestClientExceptionMapper.java
index 29fae09..ac6a4d8 100644
--- a/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/RestClientExceptionMapper.java
+++ b/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/RestClientExceptionMapper.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.lib;
 
 import java.security.AccessControlException;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -88,7 +87,7 @@ public class RestClientExceptionMapper implements ResponseExceptionMapper<Except
         try {
             ErrorTO error = response.readEntity(ErrorTO.class);
             if (error != null) {
-                errors = Collections.singletonList(error);
+                errors = List.of(error);
             }
         } catch (Exception e) {
             LOG.debug("Could not read {}, attempting to read composite...", ErrorTO.class.getName(), e);
diff --git a/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java b/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java
index 26bc71b..f9281ff 100644
--- a/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java
+++ b/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java
@@ -22,7 +22,6 @@ import org.apache.syncope.client.lib.batch.BatchRequest;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import java.io.IOException;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -118,14 +117,14 @@ public class SyncopeClient {
             restClientFactory.setPassword(((BasicAuthenticationHandler) handler).getPassword());
 
             String jwt = getService(AccessTokenService.class).login().getHeaderString(RESTHeaders.TOKEN);
-            restClientFactory.getHeaders().put(HttpHeaders.AUTHORIZATION, Collections.singletonList("Bearer " + jwt));
+            restClientFactory.getHeaders().put(HttpHeaders.AUTHORIZATION, List.of("Bearer " + jwt));
 
             restClientFactory.setUsername(null);
             restClientFactory.setPassword(null);
         } else if (handler instanceof JWTAuthenticationHandler) {
             restClientFactory.getHeaders().put(
                     HttpHeaders.AUTHORIZATION,
-                    Collections.singletonList("Bearer " + ((JWTAuthenticationHandler) handler).getJwt()));
+                    List.of("Bearer " + ((JWTAuthenticationHandler) handler).getJwt()));
         }
     }
 
@@ -140,7 +139,7 @@ public class SyncopeClient {
      */
     public void refresh() {
         String jwt = getService(AccessTokenService.class).refresh().getHeaderString(RESTHeaders.TOKEN);
-        restClientFactory.getHeaders().put(HttpHeaders.AUTHORIZATION, Collections.singletonList("Bearer " + jwt));
+        restClientFactory.getHeaders().put(HttpHeaders.AUTHORIZATION, List.of("Bearer " + jwt));
     }
 
     /**
diff --git a/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClientFactoryBean.java b/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClientFactoryBean.java
index ed3879a..c3f8048 100644
--- a/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClientFactoryBean.java
+++ b/client/idrepo/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClientFactoryBean.java
@@ -22,7 +22,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.datatype.joda.JodaModule;
 import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -130,7 +129,7 @@ public class SyncopeClientFactoryBean {
         defaultRestClientFactoryBean.setAddress(address);
 
         if (StringUtils.isNotBlank(domain)) {
-            defaultRestClientFactoryBean.getHeaders().put(RESTHeaders.DOMAIN, Collections.singletonList(domain));
+            defaultRestClientFactoryBean.getHeaders().put(RESTHeaders.DOMAIN, List.of(domain));
         }
 
         defaultRestClientFactoryBean.setThreadSafe(true);
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/Attr.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/Attr.java
index 7c63667..88ec261 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/Attr.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/Attr.java
@@ -21,7 +21,6 @@ package org.apache.syncope.common.lib;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 import javax.ws.rs.PathParam;
@@ -52,7 +51,7 @@ public class Attr implements Serializable {
         }
 
         public Builder values(final String... values) {
-            instance.getValues().addAll(Arrays.asList(values));
+            instance.getValues().addAll(List.of(values));
             return this;
         }
 
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java
index 2cd669b..38c01ed 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.common.lib;
 
-import java.util.Collections;
 import java.util.Set;
 import java.util.regex.Pattern;
 
@@ -34,7 +33,7 @@ public final class SyncopeConstants {
 
     public static final String REALM_ANYTYPE = "REALM";
 
-    public static final Set<String> FULL_ADMIN_REALMS = Collections.singleton("/");
+    public static final Set<String> FULL_ADMIN_REALMS = Set.of("/");
 
     public static final String UNAUTHENTICATED = "unauthenticated";
 
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyCR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyCR.java
index 939049d..26ea898 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyCR.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyCR.java
@@ -24,10 +24,9 @@ import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import java.io.Serializable;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 import javax.xml.bind.annotation.XmlElement;
@@ -74,7 +73,7 @@ public abstract class AnyCR implements Serializable, RealmMember {
 
         @SuppressWarnings("unchecked")
         public B auxClasses(final String... auxClasses) {
-            getInstance().getAuxClasses().addAll(Arrays.asList(auxClasses));
+            getInstance().getAuxClasses().addAll(List.of(auxClasses));
             return (B) this;
         }
 
@@ -92,7 +91,7 @@ public abstract class AnyCR implements Serializable, RealmMember {
 
         @SuppressWarnings("unchecked")
         public B plainAttrs(final Attr... plainAttrs) {
-            getInstance().getPlainAttrs().addAll(Arrays.asList(plainAttrs));
+            getInstance().getPlainAttrs().addAll(List.of(plainAttrs));
             return (B) this;
         }
 
@@ -116,7 +115,7 @@ public abstract class AnyCR implements Serializable, RealmMember {
 
         @SuppressWarnings("unchecked")
         public B virAttrs(final Attr... virAttrs) {
-            getInstance().getVirAttrs().addAll(Arrays.asList(virAttrs));
+            getInstance().getVirAttrs().addAll(List.of(virAttrs));
             return (B) this;
         }
 
@@ -128,7 +127,7 @@ public abstract class AnyCR implements Serializable, RealmMember {
 
         @SuppressWarnings("unchecked")
         public B resources(final String... resources) {
-            getInstance().getResources().addAll(Arrays.asList(resources));
+            getInstance().getResources().addAll(List.of(resources));
             return (B) this;
         }
 
@@ -208,7 +207,7 @@ public abstract class AnyCR implements Serializable, RealmMember {
     @JsonIgnore
     @Override
     public Set<Attr> getDerAttrs() {
-        return Collections.emptySet();
+        return Set.of();
     }
 
     @JsonIgnore
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyObjectCR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyObjectCR.java
index ad8363e..ef89554 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyObjectCR.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyObjectCR.java
@@ -23,9 +23,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import io.swagger.v3.oas.annotations.media.Schema;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import javax.xml.bind.annotation.XmlElement;
@@ -65,7 +63,7 @@ public class AnyObjectCR extends AnyCR implements GroupableRelatableTO {
         }
 
         public Builder relationships(final RelationshipTO... relationships) {
-            getInstance().getRelationships().addAll(Arrays.asList(relationships));
+            getInstance().getRelationships().addAll(List.of(relationships));
             return this;
         }
 
@@ -80,7 +78,7 @@ public class AnyObjectCR extends AnyCR implements GroupableRelatableTO {
         }
 
         public Builder memberships(final MembershipTO... memberships) {
-            getInstance().getMemberships().addAll(Arrays.asList(memberships));
+            getInstance().getMemberships().addAll(List.of(memberships));
             return this;
         }
 
@@ -157,7 +155,7 @@ public class AnyObjectCR extends AnyCR implements GroupableRelatableTO {
 
     @Override
     public List<MembershipTO> getDynMemberships() {
-        return Collections.emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyObjectUR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyObjectUR.java
index 577a870..e9a2b5e 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyObjectUR.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyObjectUR.java
@@ -20,9 +20,10 @@ package org.apache.syncope.common.lib.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import java.util.Arrays;
+
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
@@ -60,7 +61,7 @@ public class AnyObjectUR extends AnyUR {
         }
 
         public Builder relationships(final RelationshipUR... relationships) {
-            getInstance().getRelationships().addAll(Arrays.asList(relationships));
+            getInstance().getRelationships().addAll(List.of(relationships));
             return this;
         }
 
@@ -75,7 +76,7 @@ public class AnyObjectUR extends AnyUR {
         }
 
         public Builder memberships(final MembershipUR... memberships) {
-            getInstance().getMemberships().addAll(Arrays.asList(memberships));
+            getInstance().getMemberships().addAll(List.of(memberships));
             return this;
         }
 
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyUR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyUR.java
index 1f05c6b..531b345 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyUR.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyUR.java
@@ -24,9 +24,9 @@ import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import java.io.Serializable;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import javax.ws.rs.PathParam;
 import javax.xml.bind.annotation.XmlElement;
@@ -78,7 +78,7 @@ public abstract class AnyUR implements Serializable {
 
         @SuppressWarnings("unchecked")
         public B auxClasses(final StringPatchItem... auxClasses) {
-            getInstance().getAuxClasses().addAll(Arrays.asList(auxClasses));
+            getInstance().getAuxClasses().addAll(List.of(auxClasses));
             return (B) this;
         }
 
@@ -96,7 +96,7 @@ public abstract class AnyUR implements Serializable {
 
         @SuppressWarnings("unchecked")
         public B plainAttrs(final AttrPatch... plainAttrs) {
-            getInstance().getPlainAttrs().addAll(Arrays.asList(plainAttrs));
+            getInstance().getPlainAttrs().addAll(List.of(plainAttrs));
             return (B) this;
         }
 
@@ -120,7 +120,7 @@ public abstract class AnyUR implements Serializable {
 
         @SuppressWarnings("unchecked")
         public B virAttrs(final Attr... virAttrs) {
-            getInstance().getVirAttrs().addAll(Arrays.asList(virAttrs));
+            getInstance().getVirAttrs().addAll(List.of(virAttrs));
             return (B) this;
         }
 
@@ -132,7 +132,7 @@ public abstract class AnyUR implements Serializable {
 
         @SuppressWarnings("unchecked")
         public B resources(final StringPatchItem... resources) {
-            getInstance().getResources().addAll(Arrays.asList(resources));
+            getInstance().getResources().addAll(List.of(resources));
             return (B) this;
         }
 
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/GroupCR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/GroupCR.java
index 911d5e5..88e162c 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/GroupCR.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/GroupCR.java
@@ -22,7 +22,6 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import io.swagger.v3.oas.annotations.media.Schema;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
@@ -83,7 +82,7 @@ public class GroupCR extends AnyCR {
         }
 
         public Builder typeExtensions(final TypeExtensionTO... typeExtensions) {
-            getInstance().getTypeExtensions().addAll(Arrays.asList(typeExtensions));
+            getInstance().getTypeExtensions().addAll(List.of(typeExtensions));
             return this;
         }
 
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/GroupUR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/GroupUR.java
index c24318c..1e12a1b 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/GroupUR.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/GroupUR.java
@@ -22,7 +22,6 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
@@ -87,7 +86,7 @@ public class GroupUR extends AnyUR {
         }
 
         public Builder typeExtensions(final TypeExtensionTO... typeExtensions) {
-            getInstance().getTypeExtensions().addAll(Arrays.asList(typeExtensions));
+            getInstance().getTypeExtensions().addAll(List.of(typeExtensions));
             return this;
         }
 
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/MembershipUR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/MembershipUR.java
index dc71c63..fb57caa 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/MembershipUR.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/MembershipUR.java
@@ -19,9 +19,10 @@
 package org.apache.syncope.common.lib.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
-import java.util.Arrays;
+
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
@@ -55,7 +56,7 @@ public class MembershipUR extends AbstractPatch {
         }
 
         public Builder plainAttrs(final Attr... plainAttrs) {
-            getInstance().getPlainAttrs().addAll(Arrays.asList(plainAttrs));
+            getInstance().getPlainAttrs().addAll(List.of(plainAttrs));
             return this;
         }
 
@@ -70,7 +71,7 @@ public class MembershipUR extends AbstractPatch {
         }
 
         public Builder virAttrs(final Attr... virAttrs) {
-            getInstance().getVirAttrs().addAll(Arrays.asList(virAttrs));
+            getInstance().getVirAttrs().addAll(List.of(virAttrs));
             return this;
         }
 
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/PasswordPatch.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/PasswordPatch.java
index 0255880..4d67f14 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/PasswordPatch.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/PasswordPatch.java
@@ -20,7 +20,6 @@ package org.apache.syncope.common.lib.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 import javax.xml.bind.annotation.XmlElement;
@@ -58,7 +57,7 @@ public class PasswordPatch extends StringReplacePatchItem {
         }
 
         public Builder resources(final String... resources) {
-            getInstance().getResources().addAll(Arrays.asList(resources));
+            getInstance().getResources().addAll(List.of(resources));
             return this;
         }
 
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/ResourceDR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/ResourceDR.java
index af7fb3b..2e1edaa 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/ResourceDR.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/ResourceDR.java
@@ -21,7 +21,6 @@ package org.apache.syncope.common.lib.request;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 import javax.ws.rs.PathParam;
@@ -66,7 +65,7 @@ public class ResourceDR implements Serializable {
         }
 
         public Builder resources(final String... resources) {
-            instance.getResources().addAll(Arrays.asList(resources));
+            instance.getResources().addAll(List.of(resources));
             return this;
         }
 
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserCR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserCR.java
index 0e76d67..448468e 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserCR.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserCR.java
@@ -23,9 +23,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import io.swagger.v3.oas.annotations.media.Schema;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
@@ -91,7 +89,7 @@ public class UserCR extends AnyCR implements GroupableRelatableTO {
         }
 
         public Builder relationships(final RelationshipTO... relationships) {
-            getInstance().getRelationships().addAll(Arrays.asList(relationships));
+            getInstance().getRelationships().addAll(List.of(relationships));
             return this;
         }
 
@@ -106,7 +104,7 @@ public class UserCR extends AnyCR implements GroupableRelatableTO {
         }
 
         public Builder memberships(final MembershipTO... memberships) {
-            getInstance().getMemberships().addAll(Arrays.asList(memberships));
+            getInstance().getMemberships().addAll(List.of(memberships));
             return this;
         }
 
@@ -121,7 +119,7 @@ public class UserCR extends AnyCR implements GroupableRelatableTO {
         }
 
         public Builder roles(final String... roles) {
-            getInstance().getRoles().addAll(Arrays.asList(roles));
+            getInstance().getRoles().addAll(List.of(roles));
             return this;
         }
 
@@ -238,7 +236,7 @@ public class UserCR extends AnyCR implements GroupableRelatableTO {
 
     @Override
     public List<MembershipTO> getDynMemberships() {
-        return Collections.emptyList();
+        return List.of();
     }
 
     @XmlElementWrapper(name = "roles")
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserUR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserUR.java
index 5a42f8c..302fb0d 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserUR.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserUR.java
@@ -20,9 +20,10 @@ package org.apache.syncope.common.lib.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import java.util.Arrays;
+
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
@@ -80,7 +81,7 @@ public class UserUR extends AnyUR {
         }
 
         public Builder relationships(final RelationshipUR... relationships) {
-            getInstance().getRelationships().addAll(Arrays.asList(relationships));
+            getInstance().getRelationships().addAll(List.of(relationships));
             return this;
         }
 
@@ -95,7 +96,7 @@ public class UserUR extends AnyUR {
         }
 
         public Builder memberships(final MembershipUR... memberships) {
-            getInstance().getMemberships().addAll(Arrays.asList(memberships));
+            getInstance().getMemberships().addAll(List.of(memberships));
             return this;
         }
 
@@ -110,7 +111,7 @@ public class UserUR extends AnyUR {
         }
 
         public Builder roles(final StringPatchItem... roles) {
-            getInstance().getRoles().addAll(Arrays.asList(roles));
+            getInstance().getRoles().addAll(List.of(roles));
             return this;
         }
 
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/search/SyncopeFiqlParser.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/search/SyncopeFiqlParser.java
index fa15736..713b618 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/search/SyncopeFiqlParser.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/search/SyncopeFiqlParser.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.common.lib.search;
 
-import java.util.Collections;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -121,9 +120,9 @@ public class SyncopeFiqlParser<T> extends FiqlParser<T> {
                 return new SyncopeFiqlSearchCondition<>(ct, cond);
             } else {
                 String templateNameLCase = templateName.toLowerCase();
-                return new SyncopeFiqlSearchCondition<>(Collections.singletonMap(templateNameLCase, ct),
-                        Collections.singletonMap(templateNameLCase, name),
-                        Collections.singletonMap(templateNameLCase, tvalue.getTypeInfo()),
+                return new SyncopeFiqlSearchCondition<>(Map.of(templateNameLCase, ct),
+                        Map.of(templateNameLCase, name),
+                        Map.of(templateNameLCase, tvalue.getTypeInfo()),
                         cond, operator);
             }
         }
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java
index 868d5d2..c9ad1f4 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java
@@ -23,9 +23,9 @@ import org.apache.syncope.common.lib.Attributable;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import java.io.Serializable;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 import javax.xml.bind.annotation.XmlElement;
@@ -60,7 +60,7 @@ public class MembershipTO implements Serializable, Attributable {
         }
 
         public Builder plainAttrs(final Attr... plainAttrs) {
-            instance.getPlainAttrs().addAll(Arrays.asList(plainAttrs));
+            instance.getPlainAttrs().addAll(List.of(plainAttrs));
             return this;
         }
 
@@ -80,7 +80,7 @@ public class MembershipTO implements Serializable, Attributable {
         }
 
         public Builder virAttrs(final Attr... virAttrs) {
-            instance.getVirAttrs().addAll(Arrays.asList(virAttrs));
+            instance.getVirAttrs().addAll(List.of(virAttrs));
             return this;
         }
 
diff --git a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/SchemaQuery.java b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/SchemaQuery.java
index 14bc31e..24a3a52 100644
--- a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/SchemaQuery.java
+++ b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/SchemaQuery.java
@@ -20,7 +20,6 @@ package org.apache.syncope.common.rest.api.beans;
 
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 import javax.validation.constraints.NotNull;
@@ -56,7 +55,7 @@ public class SchemaQuery implements Serializable {
         }
 
         public Builder anyTypeClasses(final String... anyTypeClasses) {
-            return anyTypeClasses(Arrays.asList(anyTypeClasses));
+            return anyTypeClasses(List.of(anyTypeClasses));
         }
 
         public Builder keyword(final String keyword) {
diff --git a/common/keymaster/client-zookeeper/src/test/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperConfParamOpsITCase.java b/common/keymaster/client-zookeeper/src/test/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperConfParamOpsITCase.java
index 697173f..f50f0f5 100644
--- a/common/keymaster/client-zookeeper/src/test/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperConfParamOpsITCase.java
+++ b/common/keymaster/client-zookeeper/src/test/java/org/apache/syncope/common/keymaster/client/zookeper/ZookeeperConfParamOpsITCase.java
@@ -24,7 +24,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -72,7 +71,7 @@ public class ZookeeperConfParamOpsITCase {
         assertEquals(false, booleanValue);
 
         List<String> stringValues =
-                Arrays.asList(confParamOps.get(DOMAIN, "authentication.attributes", null, String[].class));
+                List.of(confParamOps.get(DOMAIN, "authentication.attributes", null, String[].class));
         assertNotNull(stringValues);
         List<String> actualStringValues = new ArrayList<>();
         actualStringValues.add("created");
@@ -113,7 +112,7 @@ public class ZookeeperConfParamOpsITCase {
         stringValues.add("stringValue1");
         stringValues.add("stringValue2");
         confParamOps.set(DOMAIN, key, stringValues);
-        List<String> actualStringValues = Arrays.asList(confParamOps.get(DOMAIN, key, null, String[].class));
+        List<String> actualStringValues = List.of(confParamOps.get(DOMAIN, key, null, String[].class));
         assertEquals(stringValues, actualStringValues);
 
         confParamOps.remove(DOMAIN, key);
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
index c991055..f8c97bb 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.logic;
 
 import java.lang.reflect.Method;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
@@ -144,7 +143,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupCR, GroupUR> {
     @Transactional(readOnly = true)
     public List<GroupTO> own() {
         if (adminUser.equals(AuthContextUtils.getUsername())) {
-            return Collections.emptyList();
+            return List.of();
         }
 
         return userDAO.findAllGroups(userDAO.findByUsername(AuthContextUtils.getUsername())).stream().
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/LogicInvocationHandler.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/LogicInvocationHandler.java
index f7c5fce..c3d6b38 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/LogicInvocationHandler.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/LogicInvocationHandler.java
@@ -18,15 +18,11 @@
  */
 package org.apache.syncope.core.logic;
 
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.types.AuditElements;
 import org.apache.syncope.core.provisioning.api.AuditManager;
-import org.apache.syncope.core.provisioning.api.notification.NotificationManager;
 import org.apache.syncope.core.provisioning.api.event.AfterHandlingEvent;
+import org.apache.syncope.core.provisioning.api.notification.NotificationManager;
 import org.apache.syncope.core.provisioning.java.job.AfterHandlingJob;
 import org.apache.syncope.core.spring.security.AuthContextUtils;
 import org.aspectj.lang.ProceedingJoinPoint;
@@ -38,6 +34,10 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.quartz.SchedulerFactoryBean;
 
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
 @Aspect
 public class LogicInvocationHandler {
 
@@ -66,9 +66,9 @@ public class LogicInvocationHandler {
         String event = joinPoint.getSignature().getName();
 
         boolean notificationsAvailable = notificationManager.notificationsAvailable(
-                AuditElements.EventCategoryType.LOGIC, category, null, event);
+            AuditElements.EventCategoryType.LOGIC, category, null, event);
         boolean auditRequested = auditManager.auditRequested(
-                AuthContextUtils.getUsername(), AuditElements.EventCategoryType.LOGIC, category, null, event);
+            AuthContextUtils.getUsername(), AuditElements.EventCategoryType.LOGIC, category, null, event);
 
         AuditElements.Result condition = null;
         Object output = null;
@@ -76,7 +76,7 @@ public class LogicInvocationHandler {
 
         try {
             LOG.debug("Before {}.{}({})", clazz.getSimpleName(), event,
-                    input == null || input.length == 0 ? StringUtils.EMPTY : Arrays.asList(input));
+                    input == null || input.length == 0 ? StringUtils.EMPTY : input);
 
             if (notificationsAvailable || auditRequested) {
                 try {
@@ -101,15 +101,15 @@ public class LogicInvocationHandler {
             if (notificationsAvailable || auditRequested) {
                 Map<String, Object> jobMap = new HashMap<>();
                 jobMap.put(AfterHandlingEvent.JOBMAP_KEY, new AfterHandlingEvent(
-                        AuthContextUtils.getUsername(),
-                        AuditElements.EventCategoryType.LOGIC,
-                        category,
-                        null,
-                        event,
-                        condition,
-                        before,
-                        output,
-                        input));
+                    AuthContextUtils.getUsername(),
+                    AuditElements.EventCategoryType.LOGIC,
+                    category,
+                    null,
+                    event,
+                    condition,
+                    before,
+                    output,
+                    input));
                 AfterHandlingJob.schedule(scheduler, jobMap);
             }
         }
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
index b722344..7df156a 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.logic;
 
 import java.lang.reflect.Method;
-import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -166,7 +165,7 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
             throw SyncopeClientException.build(ClientExceptionType.HasChildren);
         }
 
-        Set<String> adminRealms = Collections.singleton(realm.getFullPath());
+        Set<String> adminRealms = Set.of(realm.getFullPath());
         AnyCond keyCond = new AnyCond(AttributeCond.Type.ISNOTNULL);
         keyCond.setSchema("key");
         SearchCond allMatchingCond = SearchCond.getLeafCond(keyCond);
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
index d13b39a..bcc40c1 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
@@ -23,7 +23,6 @@ import java.io.OutputStream;
 import java.lang.reflect.Method;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -352,7 +351,7 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> {
 
         reportExecDAO.findAll(report, startedBefore, startedAfter, endedBefore, endedAfter).forEach(exec -> {
             BatchResponseItem item = new BatchResponseItem();
-            item.getHeaders().put(RESTHeaders.RESOURCE_KEY, Arrays.asList(exec.getKey()));
+            item.getHeaders().put(RESTHeaders.RESOURCE_KEY, List.of(exec.getKey()));
             batchResponseItems.add(item);
 
             try {
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
index 5e004cb..a61d833 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
@@ -26,7 +26,6 @@ import java.lang.reflect.Method;
 import java.net.InetAddress;
 import java.net.URI;
 import java.net.UnknownHostException;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -472,7 +471,7 @@ public class SyncopeLogic extends AbstractLogic<EntityTO> {
                 SyncopeConstants.FULL_ADMIN_REALMS,
                 searchCond,
                 page, size,
-                Collections.singletonList(orderByClause), AnyTypeKind.GROUP);
+                List.of(orderByClause), AnyTypeKind.GROUP);
         List<GroupTO> result = matching.stream().
                 map(group -> groupDataBinder.getGroupTO(group, false)).collect(Collectors.toList());
 
@@ -503,7 +502,7 @@ public class SyncopeLogic extends AbstractLogic<EntityTO> {
                     uwfAdapter.getPrefix(),
                     gwfAdapter.getPrefix(),
                     awfAdapter.getPrefix());
-            LOG.debug("Interal storage content successfully exported");
+            LOG.debug("Internal storage content successfully exported");
         } catch (Exception e) {
             LOG.error("While exporting internal storage content", e);
         }
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
index f5a80f3..a8b18fa 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.logic;
 
 import java.lang.reflect.Method;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -387,7 +386,7 @@ public class TaskLogic extends AbstractExecutableLogic<TaskTO> {
 
         taskExecDAO.findAll(task, startedBefore, startedAfter, endedBefore, endedAfter).forEach(exec -> {
             BatchResponseItem item = new BatchResponseItem();
-            item.getHeaders().put(RESTHeaders.RESOURCE_KEY, Arrays.asList(exec.getKey()));
+            item.getHeaders().put(RESTHeaders.RESOURCE_KEY, List.of(exec.getKey()));
             batchResponseItems.add(item);
 
             try {
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
index af026df..46819fd 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.logic;
 
 import java.lang.reflect.Method;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
@@ -171,7 +170,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserCR, UserUR> {
 
         // Ensures that, if the self update above moves the user into a status from which no authentication
         // is possible, the existing Access Token is clean up to avoid issues with future authentications
-        List<String> authStatuses = Arrays.asList(confParamOps.get(AuthContextUtils.getDomain(),
+        List<String> authStatuses = List.of(confParamOps.get(AuthContextUtils.getDomain(),
                 "authentication.statuses", new String[] {}, String[].class));
         if (!authStatuses.contains(updated.getEntity().getStatus())) {
             String accessToken = accessTokenDAO.findByOwner(updated.getEntity().getUsername()).getKey();
@@ -262,7 +261,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserCR, UserUR> {
                 updated.getRight(),
                 Collections.<LogicActions>emptyList(),
                 false,
-                Collections.<String>emptySet());
+                Set.of());
     }
 
     @PreAuthorize("isAuthenticated() and not(hasRole('" + IdRepoEntitlement.MUST_CHANGE_PASSWORD + "'))")
@@ -275,7 +274,7 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserCR, UserUR> {
                 updated.getRight(),
                 Collections.<LogicActions>emptyList(),
                 false,
-                Collections.<String>emptySet());
+                Set.of());
     }
 
     @PreAuthorize("hasRole('" + IdRepoEntitlement.MUST_CHANGE_PASSWORD + "')")
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/audit/DefaultAuditAppender.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/audit/DefaultAuditAppender.java
index 0fdd0b5..45b28a3 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/audit/DefaultAuditAppender.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/audit/DefaultAuditAppender.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.logic.audit;
 
-import java.util.Collections;
 import java.util.Set;
 import org.apache.logging.log4j.core.appender.rewrite.RewritePolicy;
 import org.apache.syncope.common.lib.types.AuditLoggerName;
@@ -39,7 +38,7 @@ public abstract class DefaultAuditAppender extends AbstractAuditAppender {
 
     @Override
     public Set<AuditLoggerName> getEvents() {
-        return Collections.emptySet();
+        return Set.of();
     }
 
     @Override
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/audit/DefaultRewriteAuditAppender.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/audit/DefaultRewriteAuditAppender.java
index a937cc9..aa4220e 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/audit/DefaultRewriteAuditAppender.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/audit/DefaultRewriteAuditAppender.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.logic.audit;
 
-import java.util.Collections;
 import java.util.Set;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.LogManager;
@@ -53,7 +52,7 @@ public abstract class DefaultRewriteAuditAppender extends AbstractAuditAppender
 
     @Override
     public Set<AuditLoggerName> getEvents() {
-        return Collections.emptySet();
+        return Set.of();
     }
 
     @Override
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RESTCXFContext.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RESTCXFContext.java
index 978d99f..545fde2 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RESTCXFContext.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RESTCXFContext.java
@@ -21,10 +21,11 @@ package org.apache.syncope.core.rest.cxf;
 import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
 import com.fasterxml.jackson.jaxrs.yaml.JacksonJaxbYAMLProvider;
 import io.swagger.v3.oas.models.security.SecurityScheme;
-import java.util.Arrays;
-import java.util.Collections;
+
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.Executor;
 import javax.annotation.Resource;
 import javax.servlet.ServletRequestListener;
@@ -85,14 +86,14 @@ public class RESTCXFContext {
     @Bean
     public JAXBElementProvider<?> jaxbProvider() {
         JAXBElementProvider<?> jaxbProvider = new JAXBElementProvider<>();
-        jaxbProvider.setNamespacePrefixes(Collections.singletonMap(SyncopeConstants.NS, SyncopeConstants.NS_PREFIX));
+        jaxbProvider.setNamespacePrefixes(Map.of(SyncopeConstants.NS, SyncopeConstants.NS_PREFIX));
 
         DocumentDepthProperties documentDepthProperties = new DocumentDepthProperties();
         documentDepthProperties.setInnerElementCountThreshold(500);
         jaxbProvider.setDepthProperties(documentDepthProperties);
 
         jaxbProvider.setCollectionWrapperMap(
-                Collections.singletonMap("org.apache.syncope.common.lib.policy.PolicyTO", "policies"));
+                Map.of("org.apache.syncope.common.lib.policy.PolicyTO", "policies"));
 
         return jaxbProvider;
     }
@@ -190,7 +191,7 @@ public class RESTCXFContext {
         openapiFeature.setContactEmail("dev@syncope.apache.org");
         openapiFeature.setContactUrl("http://syncope.apache.org");
         openapiFeature.setScan(false);
-        openapiFeature.setResourcePackages(Collections.singleton("org.apache.syncope.common.rest.api.service"));
+        openapiFeature.setResourcePackages(Set.of("org.apache.syncope.common.rest.api.service"));
 
         SyncopeOpenApiCustomizer openApiCustomizer = new SyncopeOpenApiCustomizer(ctx.getEnvironment());
         openApiCustomizer.setDynamicBasePath(false);
@@ -218,7 +219,7 @@ public class RESTCXFContext {
         restContainer.setBus(bus);
         restContainer.setAddress("/");
         restContainer.setStaticSubresourceResolution(true);
-        restContainer.setBasePackages(Arrays.asList(
+        restContainer.setBasePackages(List.of(
                 "org.apache.syncope.common.rest.api.service",
                 "org.apache.syncope.core.rest.cxf.service"));
 
@@ -228,7 +229,7 @@ public class RESTCXFContext {
         properties.put("convert.wadl.resources.to.dom", "false");
         restContainer.setProperties(properties);
 
-        restContainer.setProviders(Arrays.asList(
+        restContainer.setProviders(List.of(
                 dateParamConverterProvider(),
                 jaxbProvider(),
                 jsonProvider(),
@@ -240,15 +241,15 @@ public class RESTCXFContext {
                 addETagFilter(),
                 wadlGenerator()));
 
-        restContainer.setInInterceptors(Arrays.asList(
+        restContainer.setInInterceptors(List.of(
                 gzipInInterceptor(),
                 validationInInterceptor()));
 
-        restContainer.setOutInterceptors(Arrays.asList(
+        restContainer.setOutInterceptors(List.of(
                 gzipOutInterceptor(),
                 validationOutInterceptor()));
 
-        restContainer.setFeatures(Arrays.asList(openapiFeature()));
+        restContainer.setFeatures(List.of(openapiFeature()));
 
         restContainer.setApplicationContext(ctx);
         return restContainer.create();
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeOpenApiCustomizer.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeOpenApiCustomizer.java
index 1255571..e88e663 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeOpenApiCustomizer.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeOpenApiCustomizer.java
@@ -31,8 +31,6 @@ import io.swagger.v3.oas.models.responses.ApiResponses;
 import io.swagger.v3.oas.models.servers.Server;
 import java.net.URL;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -78,7 +76,7 @@ public class SyncopeOpenApiCustomizer extends OpenApiCustomizer {
                         try {
                             javaDocProvider = new JavaDocProvider(javaDocPaths);
                         } catch (Exception e) {
-                            LOG.error("Could not set javadoc paths from {}", Arrays.asList(javaDocPaths), e);
+                            LOG.error("Could not set javadoc paths from {}", List.of(javaDocPaths), e);
                         }
                     }
                 } else {
@@ -103,7 +101,7 @@ public class SyncopeOpenApiCustomizer extends OpenApiCustomizer {
                 JAXRSUtils.getCurrentMessage(), null, MessageContext.class);
 
         String url = StringUtils.substringBeforeLast(ctx.getUriInfo().getRequestUri().getRawPath(), "/");
-        configuration.getOpenAPI().setServers(Collections.singletonList(new Server().url(url)));
+        configuration.getOpenAPI().setServers(List.of(new Server().url(url)));
 
         return configuration;
     }
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WadlGenerator.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WadlGenerator.java
index ba6a35f..8356a9d 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WadlGenerator.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WadlGenerator.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.rest.cxf;
 import java.lang.annotation.Annotation;
 import java.net.URL;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -66,7 +65,7 @@ public class WadlGenerator extends org.apache.cxf.jaxrs.model.wadl.WadlGenerator
                         try {
                             super.setJavaDocPaths(javaDocPaths);
                         } catch (Exception e) {
-                            LOG.error("Could not set javadoc paths from {}", Arrays.asList(javaDocPaths), e);
+                            LOG.error("Could not set javadoc paths from {}", List.of(javaDocPaths), e);
                         }
                     }
                 } else {
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/batch/BatchItemRequest.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/batch/BatchItemRequest.java
index cc1cd22..75002c3 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/batch/BatchItemRequest.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/batch/BatchItemRequest.java
@@ -20,9 +20,9 @@ package org.apache.syncope.core.rest.cxf.batch;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.Enumeration;
+import java.util.List;
 import java.util.stream.Collectors;
 import javax.servlet.ReadListener;
 import javax.servlet.ServletInputStream;
@@ -134,7 +134,7 @@ public class BatchItemRequest extends HttpServletRequestWrapper {
                 ? Collections.enumeration(
                         batchItem.getHeaders().get(name).stream().map(Object::toString).collect(Collectors.toList()))
                 : HttpHeaders.CONTENT_TYPE.equals(name) || HttpHeaders.ACCEPT.equals(name)
-                ? Collections.enumeration(Arrays.asList(MediaType.ALL_VALUE))
+                ? Collections.enumeration(List.of(MediaType.ALL_VALUE))
                 : super.getHeaders(name);
     }
 
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/batch/BatchItemResponse.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/batch/BatchItemResponse.java
index e16fed9..b1dc4e0 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/batch/BatchItemResponse.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/batch/BatchItemResponse.java
@@ -23,7 +23,6 @@ import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -162,7 +161,7 @@ public class BatchItemResponse implements HttpServletResponse {
     public Collection<String> getHeaders(final String name) {
         return headers.containsKey(name)
                 ? headers.get(name).stream().map(Object::toString).collect(Collectors.toList())
-                : Collections.emptyList();
+                : List.of();
     }
 
     @Override
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
index 5ec0de0..24e80d0 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.rest.cxf.service;
 
-import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Optional;
@@ -239,7 +238,7 @@ public abstract class AbstractAnyService<TO extends AnyTO, CR extends AnyCR, UR
             batchResponseItems = req.getResources().stream().map(resource -> {
                 BatchResponseItem item = new BatchResponseItem();
 
-                item.getHeaders().put(RESTHeaders.RESOURCE_KEY, Arrays.asList(resource));
+                item.getHeaders().put(RESTHeaders.RESOURCE_KEY, List.of(resource));
 
                 item.setStatus(updated.getEntity().getResources().contains(resource)
                         ? Response.Status.BAD_REQUEST.getStatusCode()
@@ -248,7 +247,7 @@ public abstract class AbstractAnyService<TO extends AnyTO, CR extends AnyCR, UR
                 if (getPreference() == Preference.RETURN_NO_CONTENT) {
                     item.getHeaders().put(
                             RESTHeaders.PREFERENCE_APPLIED,
-                            Arrays.asList(Preference.RETURN_NO_CONTENT.toString()));
+                            List.of(Preference.RETURN_NO_CONTENT.toString()));
                 } else {
                     item.setContent(POJOHelper.serialize(updated.getEntity()));
                 }
@@ -260,18 +259,18 @@ public abstract class AbstractAnyService<TO extends AnyTO, CR extends AnyCR, UR
                     map(status -> {
                         BatchResponseItem item = new BatchResponseItem();
 
-                        item.getHeaders().put(RESTHeaders.RESOURCE_KEY, Arrays.asList(status.getResource()));
+                        item.getHeaders().put(RESTHeaders.RESOURCE_KEY, List.of(status.getResource()));
 
                         item.setStatus(status.getStatus().getHttpStatus());
 
                         if (status.getFailureReason() != null) {
-                            item.getHeaders().put(RESTHeaders.ERROR_INFO, Arrays.asList(status.getFailureReason()));
+                            item.getHeaders().put(RESTHeaders.ERROR_INFO, List.of(status.getFailureReason()));
                         }
 
                         if (getPreference() == Preference.RETURN_NO_CONTENT) {
                             item.getHeaders().put(
                                     RESTHeaders.PREFERENCE_APPLIED,
-                                    Arrays.asList(Preference.RETURN_NO_CONTENT.toString()));
+                                    List.of(Preference.RETURN_NO_CONTENT.toString()));
                         } else {
                             item.setContent(POJOHelper.serialize(updated.getEntity()));
                         }
@@ -328,7 +327,7 @@ public abstract class AbstractAnyService<TO extends AnyTO, CR extends AnyCR, UR
             batchResponseItems = req.getResources().stream().map(resource -> {
                 BatchResponseItem item = new BatchResponseItem();
 
-                item.getHeaders().put(RESTHeaders.RESOURCE_KEY, Arrays.asList(resource));
+                item.getHeaders().put(RESTHeaders.RESOURCE_KEY, List.of(resource));
 
                 item.setStatus(updated.getEntity().getResources().contains(resource)
                         ? Response.Status.OK.getStatusCode()
@@ -337,7 +336,7 @@ public abstract class AbstractAnyService<TO extends AnyTO, CR extends AnyCR, UR
                 if (getPreference() == Preference.RETURN_NO_CONTENT) {
                     item.getHeaders().put(
                             RESTHeaders.PREFERENCE_APPLIED,
-                            Arrays.asList(Preference.RETURN_NO_CONTENT.toString()));
+                            List.of(Preference.RETURN_NO_CONTENT.toString()));
                 } else {
                     item.setContent(POJOHelper.serialize(updated.getEntity()));
                 }
@@ -349,18 +348,18 @@ public abstract class AbstractAnyService<TO extends AnyTO, CR extends AnyCR, UR
                     map(status -> {
                         BatchResponseItem item = new BatchResponseItem();
 
-                        item.getHeaders().put(RESTHeaders.RESOURCE_KEY, Arrays.asList(status.getResource()));
+                        item.getHeaders().put(RESTHeaders.RESOURCE_KEY, List.of(status.getResource()));
 
                         item.setStatus(status.getStatus().getHttpStatus());
 
                         if (status.getFailureReason() != null) {
-                            item.getHeaders().put(RESTHeaders.ERROR_INFO, Arrays.asList(status.getFailureReason()));
+                            item.getHeaders().put(RESTHeaders.ERROR_INFO, List.of(status.getFailureReason()));
                         }
 
                         if (getPreference() == Preference.RETURN_NO_CONTENT) {
                             item.getHeaders().put(
                                     RESTHeaders.PREFERENCE_APPLIED,
-                                    Arrays.asList(Preference.RETURN_NO_CONTENT.toString()));
+                                    List.of(Preference.RETURN_NO_CONTENT.toString()));
                         } else {
                             item.setContent(POJOHelper.serialize(updated.getEntity()));
                         }
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractServiceImpl.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractServiceImpl.java
index 4ed20f4..2e2f245 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractServiceImpl.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractServiceImpl.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.rest.cxf.service;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.EntityTag;
@@ -180,7 +179,7 @@ abstract class AbstractServiceImpl implements JAXRSService {
 
     protected List<OrderByClause> getOrderByClauses(final String orderBy) {
         if (StringUtils.isBlank(orderBy)) {
-            return Collections.<OrderByClause>emptyList();
+            return List.of();
         }
 
         List<OrderByClause> result = new ArrayList<>();
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AllowedSchemas.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AllowedSchemas.java
index aa3eee1..0e1bd9b 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AllowedSchemas.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AllowedSchemas.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.persistence.api.dao;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -38,7 +37,7 @@ public class AllowedSchemas<S extends Schema> {
     }
 
     public Set<S> getForMembership(final Group group) {
-        return forMemberships.get(group) == null ? Collections.<S>emptySet() : forMemberships.get(group);
+        return forMemberships.get(group) == null ? Set.of() : forMemberships.get(group);
     }
 
     public Map<Group, Set<S>> getForMemberships() {
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/LinkingMappingItem.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/LinkingMappingItem.java
index e4fb71a..6689bfc 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/LinkingMappingItem.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/LinkingMappingItem.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.persistence.api.entity;
 
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.common.lib.types.MappingPurpose;
 import org.apache.syncope.core.persistence.api.entity.resource.Mapping;
@@ -139,6 +138,6 @@ public class LinkingMappingItem implements MappingItem {
 
     @Override
     public List<? extends Implementation> getTransformers() {
-        return Collections.emptyList();
+        return List.of();
     }
 }
diff --git a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractJPAJSONAnyDAO.java b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractJPAJSONAnyDAO.java
index f8570e2..7b38539 100644
--- a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractJPAJSONAnyDAO.java
+++ b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractJPAJSONAnyDAO.java
@@ -120,7 +120,7 @@ abstract class AbstractJPAJSONAnyDAO extends AbstractDAO<AbstractEntity> impleme
 
         if (schema == null) {
             LOG.error("No PlainSchema");
-            return Collections.<A>emptyList();
+            return List.of();
         }
 
         Query query = entityManager().createNativeQuery(
@@ -193,7 +193,7 @@ abstract class AbstractJPAJSONAnyDAO extends AbstractDAO<AbstractEntity> impleme
 
         if (derSchema == null) {
             LOG.error("No DerSchema");
-            return Collections.<A>emptyList();
+            return List.of();
         }
 
         Parser parser = new Parser(new StringReader(derSchema.getExpression()));
@@ -239,7 +239,7 @@ abstract class AbstractJPAJSONAnyDAO extends AbstractDAO<AbstractEntity> impleme
 
         if (attrValues.size() != identifiers.size()) {
             LOG.error("Ambiguous JEXL expression resolution: literals and values have different size");
-            return Collections.emptyList();
+            return List.of();
         }
 
         Map<String, List<Object>> clauses = new LinkedHashMap<>();
diff --git a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONPlainSchemaDAO.java b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONPlainSchemaDAO.java
index 63349ba..cea2564 100644
--- a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONPlainSchemaDAO.java
+++ b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONPlainSchemaDAO.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.persistence.jpa.dao;
 
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.PlainAttr;
 import org.apache.syncope.core.persistence.api.entity.PlainSchema;
@@ -28,7 +27,7 @@ public class JPAJSONPlainSchemaDAO extends JPAPlainSchemaDAO {
     @Override
     public <T extends PlainAttr<?>> List<T> findAttrs(final PlainSchema schema, final Class<T> reference) {
         // not possible
-        return Collections.emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnyDAO.java b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnyDAO.java
index 22d52e7..883f6a9 100644
--- a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnyDAO.java
+++ b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnyDAO.java
@@ -19,8 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.dao;
 
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -78,7 +76,7 @@ public class MyJPAJSONAnyDAO extends AbstractJPAJSONAnyDAO {
             } else {
                 ((JSONPlainAttr) container).add(attrValue);
             }
-            return "JSON_CONTAINS(plainAttrs, '" + POJOHelper.serialize(Arrays.asList(container)) + "')";
+            return "JSON_CONTAINS(plainAttrs, '" + POJOHelper.serialize(List.of(container)) + "')";
         }
     }
 
@@ -95,7 +93,7 @@ public class MyJPAJSONAnyDAO extends AbstractJPAJSONAnyDAO {
             final Map<String, List<Object>> clauses) {
 
         if (clauses.isEmpty()) {
-            return Collections.emptyList();
+            return List.of();
         }
 
         Set<Object> result = new HashSet<>();
diff --git a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnySearchDAO.java b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnySearchDAO.java
index a4fa998..51fc984 100644
--- a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnySearchDAO.java
+++ b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONAnySearchDAO.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.persistence.jpa.dao;
 
-import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -143,7 +142,7 @@ public class MyJPAJSONAnySearchDAO extends AbstractJPAJSONAnySearchDAO {
                 }
 
                 query.append("JSON_CONTAINS(plainAttrs, '").
-                        append(POJOHelper.serialize(Arrays.asList(container))).
+                        append(POJOHelper.serialize(List.of(container))).
                         append("')");
             } else {
                 String key = key(schema.getType());
diff --git a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnyDAO.java b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnyDAO.java
index ed1664b..93d9b2d 100644
--- a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnyDAO.java
+++ b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnyDAO.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.dao;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.StringJoiner;
@@ -69,7 +68,7 @@ public class PGJPAJSONAnyDAO extends AbstractJPAJSONAnyDAO {
             } else {
                 ((JSONPlainAttr) container).add(attrValue);
             }
-            return "plainAttrs @> '" + POJOHelper.serialize(Arrays.asList(container)) + "'::jsonb";
+            return "plainAttrs @> '" + POJOHelper.serialize(List.of(container)) + "'::jsonb";
         }
     }
 
diff --git a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnySearchDAO.java b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnySearchDAO.java
index b715bc0..487a1d1 100644
--- a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnySearchDAO.java
+++ b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONAnySearchDAO.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.dao;
 
 import java.text.ParseException;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -137,7 +136,7 @@ public class PGJPAJSONAnySearchDAO extends AbstractJPAJSONAnySearchDAO {
                 }
 
                 query.append("plainAttrs @> '").
-                        append(POJOHelper.serialize(Arrays.asList(container))).
+                        append(POJOHelper.serialize(List.of(container))).
                         append("'::jsonb");
             } else {
                 String key = key(schema.getType());
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/DomainConfFactory.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/DomainConfFactory.java
index 1718a87..940d87b 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/DomainConfFactory.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/DomainConfFactory.java
@@ -22,7 +22,8 @@ import com.zaxxer.hikari.HikariConfig;
 import com.zaxxer.hikari.HikariDataSource;
 import java.io.ByteArrayInputStream;
 import java.nio.charset.StandardCharsets;
-import java.util.Collections;
+import java.util.Map;
+
 import javax.persistence.EntityManagerFactory;
 import javax.sql.DataSource;
 import org.apache.syncope.common.keymaster.client.api.model.Domain;
@@ -133,7 +134,7 @@ public class DomainConfFactory implements DomainRegistry, EnvironmentAware {
                 addPropertyValue("jpaVendorAdapter", vendorAdapter).
                 addPropertyReference("commonEntityManagerFactoryConf", "commonEMFConf");
         if (env.containsProperty("openjpaMetaDataFactory")) {
-            emf.addPropertyValue("jpaPropertyMap", Collections.singletonMap(
+            emf.addPropertyValue("jpaPropertyMap", Map.of(
                     "openjpa.MetaDataFactory",
                     env.getProperty("openjpaMetaDataFactory").replace("##orm##", domain.getOrm())));
         }
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/MasterDomain.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/MasterDomain.java
index c60b124..b411fd3 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/MasterDomain.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/MasterDomain.java
@@ -22,7 +22,8 @@ import com.zaxxer.hikari.HikariConfig;
 import com.zaxxer.hikari.HikariDataSource;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.Collections;
+import java.util.Map;
+
 import javax.sql.DataSource;
 import org.apache.syncope.core.persistence.jpa.spring.CommonEntityManagerFactoryConf;
 import org.apache.syncope.core.persistence.jpa.spring.DomainEntityManagerFactoryBean;
@@ -153,7 +154,7 @@ public class MasterDomain implements EnvironmentAware {
         masterEntityManagerFactory.setCommonEntityManagerFactoryConf(commonEMFConf);
 
         if (env.containsProperty("openjpaMetaDataFactory")) {
-            masterEntityManagerFactory.setJpaPropertyMap(Collections.singletonMap(
+            masterEntityManagerFactory.setJpaPropertyMap(Map.of(
                     "openjpa.MetaDataFactory",
                     env.getProperty("openjpaMetaDataFactory").replace("##orm##", orm)));
         }
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
index 59605e6..905c7ea 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
@@ -32,7 +32,6 @@ import java.sql.SQLException;
 import java.sql.Timestamp;
 import java.sql.Types;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
@@ -51,6 +50,8 @@ import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.sax.SAXTransformerFactory;
 import javax.xml.transform.sax.TransformerHandler;
 import javax.xml.transform.stream.StreamResult;
+
+import org.apache.commons.collections4.SetUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.core.provisioning.api.utils.FormatUtils;
@@ -90,19 +91,19 @@ public class XMLContentExporter implements ContentExporter {
 
     private static final Logger LOG = LoggerFactory.getLogger(XMLContentExporter.class);
 
-    private static final Set<String> TABLE_PREFIXES_TO_BE_EXCLUDED = new HashSet<>(Arrays.asList(new String[] {
+    private static final Set<String> TABLE_PREFIXES_TO_BE_EXCLUDED = SetUtils.hashSet(
         "QRTZ_", "LOGGING", JPAReportExec.TABLE, JPATaskExec.TABLE,
         JPAUser.TABLE, JPAUPlainAttr.TABLE, JPAUPlainAttrValue.TABLE, JPAUPlainAttrUniqueValue.TABLE,
         JPAURelationship.TABLE, JPAUMembership.TABLE,
         JPAAnyObject.TABLE, JPAAPlainAttr.TABLE, JPAAPlainAttrValue.TABLE, JPAAPlainAttrUniqueValue.TABLE,
         JPAARelationship.TABLE, JPAAMembership.TABLE, JPAAccessToken.TABLE
-    }));
+    );
 
     private static final Map<String, String> TABLES_TO_BE_FILTERED =
-            Collections.singletonMap("TASK", "DTYPE <> 'PropagationTask'");
+            Map.of("TASK", "DTYPE <> 'PropagationTask'");
 
     private static final Map<String, Set<String>> COLUMNS_TO_BE_NULLIFIED =
-            Collections.singletonMap("SYNCOPEGROUP", Collections.singleton("USEROWNER_ID"));
+            Map.of("SYNCOPEGROUP", Set.of("USEROWNER_ID"));
 
     @Autowired
     private DomainHolder domainHolder;
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
index ffa141f..b9ee51d 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
@@ -197,7 +197,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
 
         if (schema == null) {
             LOG.error("No PlainSchema");
-            return Collections.<A>emptyList();
+            return List.of();
         }
 
         String entityName = schema.isUniqueConstraint()
@@ -314,7 +314,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
 
         if (attrValues.size() != identifiers.size()) {
             LOG.error("Ambiguous JEXL expression resolution: literals and values have different size");
-            return Collections.emptySet();
+            return Set.of();
         }
 
         // clauses to be used with INTERSECTed queries
@@ -392,7 +392,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
     public List<A> findByDerAttrValue(final DerSchema schema, final String value, final boolean ignoreCaseMatch) {
         if (schema == null) {
             LOG.error("No DerSchema");
-            return Collections.<A>emptyList();
+            return List.of();
         }
 
         // query string
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java
index 19f8af1..8ad9157 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.persistence.jpa.dao;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
@@ -127,7 +126,7 @@ public abstract class AbstractAnySearchDAO extends AbstractDAO<Any<?>> implement
 
     @Override
     public <T extends Any<?>> List<T> search(final SearchCond cond, final AnyTypeKind kind) {
-        return search(cond, Collections.<OrderByClause>emptyList(), kind);
+        return search(cond, List.of(), kind);
     }
 
     @Override
@@ -332,13 +331,13 @@ public abstract class AbstractAnySearchDAO extends AbstractDAO<Any<?>> implement
 
         if (adminRealms == null || adminRealms.isEmpty()) {
             LOG.error("No realms provided");
-            return Collections.<T>emptyList();
+            return List.of();
         }
 
         LOG.debug("Search condition:\n{}", cond);
         if (cond == null || !cond.isValid()) {
             LOG.error("Invalid search condition:\n{}", cond);
-            return Collections.<T>emptyList();
+            return List.of();
         }
 
         List<OrderByClause> effectiveOrderBy;
@@ -346,7 +345,7 @@ public abstract class AbstractAnySearchDAO extends AbstractDAO<Any<?>> implement
             OrderByClause keyClause = new OrderByClause();
             keyClause.setField(kind == AnyTypeKind.USER ? "username" : "name");
             keyClause.setDirection(OrderByClause.Direction.ASC);
-            effectiveOrderBy = Collections.singletonList(keyClause);
+            effectiveOrderBy = List.of(keyClause);
         } else {
             effectiveOrderBy = orderBy.stream().
                     filter(clause -> !ArrayUtils.contains(ORDER_BY_NOT_ALLOWED, clause.getField())).
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
index ab4c258..6f9f592 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
@@ -121,7 +121,7 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
         Map<String, Set<String>> authorizations = AuthContextUtils.getAuthorizations();
         Set<String> authRealms = authorizations.containsKey(AnyEntitlement.READ.getFor(anyObject.getType().getKey()))
                 ? authorizations.get(AnyEntitlement.READ.getFor(anyObject.getType().getKey()))
-                : Collections.emptySet();
+                : Set.of();
         boolean authorized = authRealms.stream().
                 anyMatch(realm -> anyObject.getRealm().getFullPath().startsWith(realm));
         if (!authorized) {
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
index db705aa..90ef680 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.dao;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
@@ -210,7 +209,7 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
             LOG.error("While searching for {}", kind, e);
         }
 
-        return Collections.emptyList();
+        return List.of();
     }
 
     protected int setParameter(final List<Object> parameters, final Object parameter) {
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
index 695dfa7..8702a27 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.persistence.jpa.dao;
 
-import java.util.Collections;
 import java.util.List;
 import javax.persistence.TypedQuery;
 import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
@@ -96,13 +95,13 @@ public class JPAAnyTypeClassDAO extends AbstractDAO<AnyTypeClass> implements Any
             return;
         }
 
-        for (PlainSchema schema : plainSchemaDAO.findByAnyTypeClasses(Collections.singletonList(anyTypeClass))) {
+        for (PlainSchema schema : plainSchemaDAO.findByAnyTypeClasses(List.of(anyTypeClass))) {
             schema.setAnyTypeClass(null);
         }
-        for (DerSchema schema : derSchemaDAO.findByAnyTypeClasses(Collections.singletonList(anyTypeClass))) {
+        for (DerSchema schema : derSchemaDAO.findByAnyTypeClasses(List.of(anyTypeClass))) {
             schema.setAnyTypeClass(null);
         }
-        for (VirSchema schema : virSchemaDAO.findByAnyTypeClasses(Collections.singletonList(anyTypeClass))) {
+        for (VirSchema schema : virSchemaDAO.findByAnyTypeClasses(List.of(anyTypeClass))) {
             schema.setAnyTypeClass(null);
         }
 
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java
index f4d7973..4be0788 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.persistence.jpa.dao;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -81,7 +80,7 @@ public class JPAConnInstanceDAO extends AbstractDAO<ConnInstance> implements Con
     public List<ConnInstance> findAll() {
         final Set<String> authRealms = AuthContextUtils.getAuthorizations().get(IdMEntitlement.CONNECTOR_LIST);
         if (authRealms == null || authRealms.isEmpty()) {
-            return Collections.emptyList();
+            return List.of();
         }
 
         TypedQuery<ConnInstance> query = entityManager().createQuery(
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
index a366f53..6e07589 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.persistence.jpa.dao;
 
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
@@ -182,7 +181,7 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource> implem
     public List<ExternalResource> findAll() {
         final Set<String> authRealms = AuthContextUtils.getAuthorizations().get(IdMEntitlement.RESOURCE_LIST);
         if (authRealms == null || authRealms.isEmpty()) {
-            return Collections.emptyList();
+            return List.of();
         }
 
         TypedQuery<ExternalResource> query = entityManager().createQuery(
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
index efc188c..1fb835a 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
@@ -41,7 +41,6 @@ import org.apache.syncope.core.persistence.api.dao.GroupDAO;
 import org.apache.syncope.core.persistence.api.dao.PlainAttrDAO;
 import org.apache.syncope.core.persistence.api.dao.UserDAO;
 import org.apache.syncope.core.persistence.api.dao.search.AssignableCond;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
@@ -133,7 +132,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
         Map<String, Set<String>> authorizations = AuthContextUtils.getAuthorizations();
         Set<String> authRealms = authorizations.containsKey(IdRepoEntitlement.GROUP_READ)
                 ? authorizations.get(IdRepoEntitlement.GROUP_READ)
-                : Collections.emptySet();
+                : Set.of();
 
         boolean authorized = authRealms.stream().anyMatch(realm -> group.getRealm().getFullPath().startsWith(realm)
                 || realm.equals(RealmUtils.getGroupOwnerRealm(group.getRealm().getFullPath(), group.getKey())));
@@ -169,7 +168,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
     public List<Group> findOwnedByUser(final String userKey) {
         User owner = userDAO.find(userKey);
         if (owner == null) {
-            return Collections.<Group>emptyList();
+            return List.of();
         }
 
         StringBuilder queryString = new StringBuilder("SELECT e FROM ").append(anyUtils().anyClass().getSimpleName())
@@ -188,7 +187,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
     public List<Group> findOwnedByGroup(final String groupKey) {
         Group owner = find(groupKey);
         if (owner == null) {
-            return Collections.<Group>emptyList();
+            return List.of();
         }
 
         TypedQuery<Group> query = entityManager().createQuery(
@@ -258,7 +257,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
                         cond,
                         page,
                         AnyDAO.DEFAULT_PAGE_SIZE,
-                        Collections.<OrderByClause>emptyList(),
+                        List.of(),
                         AnyTypeKind.USER);
 
                 matching.forEach(user -> {
@@ -282,7 +281,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
                         cond,
                         page,
                         AnyDAO.DEFAULT_PAGE_SIZE,
-                        Collections.<OrderByClause>emptyList(),
+                        List.of(),
                         AnyTypeKind.ANY_OBJECT);
 
                 matching.forEach(anyObject -> {
@@ -501,7 +500,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
     @SuppressWarnings("unchecked")
     public List<String> findUDynMembers(final Group group) {
         if (group.getUDynMembership() == null) {
-            return Collections.emptyList();
+            return List.of();
         }
 
         Query query = entityManager().createNativeQuery(
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPANotificationDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPANotificationDAO.java
index dac7d8d..14f463d 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPANotificationDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPANotificationDAO.java
@@ -18,13 +18,11 @@
  */
 package org.apache.syncope.core.persistence.jpa.dao;
 
-import java.util.Collections;
 import java.util.List;
 import javax.persistence.TypedQuery;
 import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.syncope.core.persistence.api.dao.NotificationDAO;
 import org.apache.syncope.core.persistence.api.dao.TaskDAO;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.entity.Entity;
 import org.apache.syncope.core.persistence.api.entity.Implementation;
 import org.apache.syncope.core.persistence.api.entity.MailTemplate;
@@ -87,7 +85,7 @@ public class JPANotificationDAO extends AbstractDAO<Notification> implements Not
         }
 
         taskDAO.findAll(
-                TaskType.NOTIFICATION, null, notification, null, null, -1, -1, Collections.<OrderByClause>emptyList()).
+                TaskType.NOTIFICATION, null, notification, null, null, -1, -1, List.of()).
                 stream().map(Entity::getKey).forEach(this::delete);
 
         entityManager().remove(notification);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
index 83a1825..48f5474 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.dao;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import javax.persistence.Query;
 import javax.persistence.TypedQuery;
@@ -149,7 +148,7 @@ public class JPARoleDAO extends AbstractDAO<Role> implements RoleDAO {
     @SuppressWarnings("unchecked")
     public List<String> findDynMembers(final Role role) {
         if (role.getDynMembership() == null) {
-            return Collections.emptyList();
+            return List.of();
         }
 
         Query query = entityManager().createNativeQuery("SELECT any_id FROM " + DYNMEMB_TABLE + " WHERE role_id=?");
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
index 1d21504..4d9dac3 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.persistence.jpa.dao;
 
 import java.lang.reflect.Field;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import javax.persistence.DiscriminatorValue;
 import javax.persistence.ManyToOne;
@@ -203,7 +202,7 @@ public class JPATaskDAO extends AbstractDAO<Task> implements TaskDAO {
     @Transactional(readOnly = true)
     @Override
     public <T extends Task> List<T> findAll(final TaskType type) {
-        return findAll(type, null, null, null, null, -1, -1, Collections.<OrderByClause>emptyList());
+        return findAll(type, null, null, null, null, -1, -1, List.of());
     }
 
     private StringBuilder buildFindAllQuery(
@@ -460,7 +459,7 @@ public class JPATaskDAO extends AbstractDAO<Task> implements TaskDAO {
 
     @Override
     public void deleteAll(final ExternalResource resource, final TaskType type) {
-        findAll(type, resource, null, null, null, -1, -1, Collections.<OrderByClause>emptyList()).
+        findAll(type, resource, null, null, null, -1, -1, List.of()).
                 stream().map(Entity::getKey).forEach(this::delete);
     }
 
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
index 66e878f..0c36181 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.persistence.jpa.dao;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
@@ -159,7 +158,7 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
             Map<String, Set<String>> authorizations = AuthContextUtils.getAuthorizations();
             Set<String> authRealms = authorizations.containsKey(IdRepoEntitlement.USER_READ)
                     ? authorizations.get(IdRepoEntitlement.USER_READ)
-                    : Collections.emptySet();
+                    : Set.of();
             boolean authorized = authRealms.stream().
                     anyMatch(realm -> user.getRealm().getFullPath().startsWith(realm));
             if (!authorized) {
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java
index d13ca58..332423b 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java
@@ -104,7 +104,7 @@ public abstract class AbstractPlainAttr<O extends Any<?>> extends AbstractGenera
         if (getUniqueValue() == null) {
             result = getValues().stream().map(PlainAttrValue::getValueAsString).collect(Collectors.toList());
         } else {
-            result = Collections.singletonList(getUniqueValue().getValueAsString());
+            result = List.of(getUniqueValue().getValueAsString());
         }
 
         return Collections.unmodifiableList(result);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java
index 72fcd0c..5affad4 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.persistence.jpa.entity;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
@@ -186,7 +185,7 @@ public class JPAConnInstance extends AbstractGeneratedKeyEntity implements ConnI
     public Set<ConnConfProperty> getConf() {
         Set<ConnConfProperty> configuration = new HashSet<>();
         if (!StringUtils.isBlank(jsonConf)) {
-            configuration.addAll(Arrays.asList(POJOHelper.deserialize(jsonConf, ConnConfProperty[].class)));
+            configuration.addAll(List.of(POJOHelper.deserialize(jsonConf, ConnConfProperty[].class)));
         }
 
         return configuration;
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAGatewayRoute.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAGatewayRoute.java
index 7cc097a..9b938fb 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAGatewayRoute.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAGatewayRoute.java
@@ -19,8 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.entity;
 
 import java.net.URI;
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
@@ -98,8 +96,8 @@ public class JPAGatewayRoute extends AbstractGeneratedKeyEntity implements Gatew
     @Override
     public List<GatewayRouteFilter> getFilters() {
         return filters == null
-                ? Collections.emptyList()
-                : Arrays.asList(POJOHelper.deserialize(filters, GatewayRouteFilter[].class));
+                ? List.of()
+                : List.of(POJOHelper.deserialize(filters, GatewayRouteFilter[].class));
     }
 
     @Override
@@ -110,8 +108,8 @@ public class JPAGatewayRoute extends AbstractGeneratedKeyEntity implements Gatew
     @Override
     public List<GatewayRoutePredicate> getPredicates() {
         return predicates == null
-                ? Collections.emptyList()
-                : Arrays.asList(POJOHelper.deserialize(predicates, GatewayRoutePredicate[].class));
+                ? List.of()
+                : List.of(POJOHelper.deserialize(predicates, GatewayRoutePredicate[].class));
     }
 
     @Override
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
index c0a7175..020d4a5 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
@@ -19,8 +19,6 @@
 package org.apache.syncope.core.persistence.jpa.entity.resource;
 
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
@@ -212,7 +210,7 @@ public class JPAExternalResource extends AbstractProvidedKeyEntity implements Ex
 
     @Override
     public List<? extends Provision> getProvisions() {
-        return provisions == null ? Collections.emptyList() : provisions;
+        return provisions == null ? List.of() : provisions;
     }
 
     @Override
@@ -335,7 +333,7 @@ public class JPAExternalResource extends AbstractProvidedKeyEntity implements Ex
     public Set<ConnConfProperty> getConfOverride() {
         Set<ConnConfProperty> confOverride = new HashSet<>();
         if (!StringUtils.isBlank(jsonConf)) {
-            confOverride.addAll(Arrays.asList(POJOHelper.deserialize(jsonConf, ConnConfProperty[].class)));
+            confOverride.addAll(List.of(POJOHelper.deserialize(jsonConf, ConnConfProperty[].class)));
         }
 
         return confOverride;
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPropagationTask.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPropagationTask.java
index ce029d8..d4438c2 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPropagationTask.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPropagationTask.java
@@ -18,8 +18,8 @@
  */
 package org.apache.syncope.core.persistence.jpa.entity.task;
 
-import java.util.Arrays;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import javax.persistence.DiscriminatorValue;
 import javax.persistence.Entity;
@@ -113,7 +113,7 @@ public class JPAPropagationTask extends AbstractTask implements PropagationTask
     public Set<Attribute> getAttributes() {
         Set<Attribute> result = new HashSet<>();
         if (StringUtils.isNotBlank(this.attributes)) {
-            result.addAll(Arrays.asList(POJOHelper.deserialize(this.attributes, Attribute[].class)));
+            result.addAll(List.of(POJOHelper.deserialize(this.attributes, Attribute[].class)));
         }
 
         return result;
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyConfParamOps.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyConfParamOps.java
index f245b64..55e92bd 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyConfParamOps.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyConfParamOps.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.persistence.jpa;
 
-import java.util.Collections;
 import java.util.Map;
 import org.apache.syncope.common.keymaster.client.api.ConfParamOps;
 import org.springframework.stereotype.Component;
@@ -28,7 +27,7 @@ public class DummyConfParamOps implements ConfParamOps {
 
     @Override
     public Map<String, Object> list(final String domain) {
-        return Collections.emptyMap();
+        return Map.of();
     }
 
     @Override
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyDomainOps.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyDomainOps.java
index 89832a1..8570724 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyDomainOps.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyDomainOps.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.persistence.jpa;
 
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.common.keymaster.client.api.DomainOps;
 import org.apache.syncope.common.keymaster.client.api.model.Domain;
@@ -35,7 +34,7 @@ public class DummyDomainOps implements DomainOps {
 
     @Override
     public List<Domain> list() {
-        return Collections.emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyImplementationLookup.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyImplementationLookup.java
index 1eb02d6..2deb831 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyImplementationLookup.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/DummyImplementationLookup.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.persistence.jpa;
 
-import java.util.Collections;
 import java.util.Set;
 import org.apache.syncope.common.lib.policy.AccountRuleConf;
 import org.apache.syncope.common.lib.policy.PasswordRuleConf;
@@ -47,12 +46,12 @@ public class DummyImplementationLookup implements ImplementationLookup {
 
     @Override
     public Set<String> getClassNames(final String type) {
-        return Collections.emptySet();
+        return Set.of();
     }
 
     @Override
     public Set<Class<?>> getJWTSSOProviderClasses() {
-        return Collections.emptySet();
+        return Set.of();
     }
 
     @Override
@@ -92,6 +91,6 @@ public class DummyImplementationLookup implements ImplementationLookup {
 
     @Override
     public Set<Class<?>> getAuditAppenderClasses() {
-        return Collections.emptySet();
+        return Set.of();
     }
 }
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
index 65a8b55..bfdf59f 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
@@ -24,7 +24,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -205,13 +204,13 @@ public class AnySearchTest extends AbstractTest {
         assertTrue(cond.isValid());
 
         List<User> users = searchDAO.search(SyncopeConstants.FULL_ADMIN_REALMS,
-                cond, 1, 2, Collections.<OrderByClause>emptyList(),
+                cond, 1, 2, List.of(),
                 AnyTypeKind.USER);
         assertNotNull(users);
         assertEquals(1, users.size());
 
         users = searchDAO.search(SyncopeConstants.FULL_ADMIN_REALMS,
-                cond, 2, 2, Collections.<OrderByClause>emptyList(),
+                cond, 2, 2, List.of(),
                 AnyTypeKind.USER);
         assertNotNull(users);
         assertTrue(users.isEmpty());
@@ -481,7 +480,7 @@ public class AnySearchTest extends AbstractTest {
         orderByClause.setField("name");
 
         List<Group> groups = searchDAO.search(
-                searchCondition, Collections.singletonList(orderByClause), AnyTypeKind.GROUP);
+                searchCondition, List.of(orderByClause), AnyTypeKind.GROUP);
         assertEquals(
                 searchDAO.count(SyncopeConstants.FULL_ADMIN_REALMS, searchCondition, AnyTypeKind.GROUP),
                 groups.size());
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GatewayRouteTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GatewayRouteTest.java
index 7fdab60..abdf50d 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GatewayRouteTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GatewayRouteTest.java
@@ -23,7 +23,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
 import java.net.URI;
-import java.util.Arrays;
 import java.util.List;
 import java.util.UUID;
 import javax.ws.rs.HttpMethod;
@@ -68,9 +67,9 @@ public class GatewayRouteTest extends AbstractTest {
         GatewayRoute route = entityFactory.newEntity(GatewayRoute.class);
         route.setName("just for test");
         route.setTarget(URI.create("http://httpbin.org:80"));
-        route.setPredicates(Arrays.asList(new GatewayRoutePredicate.Builder().
+        route.setPredicates(List.of(new GatewayRoutePredicate.Builder().
                 factory(PredicateFactory.METHOD).args(HttpMethod.GET).build()));
-        route.setFilters(Arrays.asList(new GatewayRouteFilter.Builder().
+        route.setFilters(List.of(new GatewayRouteFilter.Builder().
                 factory(FilterFactory.ADD_REQUEST_HEADER).args("X-Request-Foo, Bar").build()));
         route.setStatus(GatewayRouteStatus.DRAFT);
 
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RemediationTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RemediationTest.java
index 15e3e5b..4dfabbd 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RemediationTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RemediationTest.java
@@ -24,7 +24,6 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
-import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Set;
@@ -55,7 +54,7 @@ public class RemediationTest extends AbstractTest {
 
     @Test
     public void findAll() {
-        List<Remediation> remediations = remediationDAO.findAll(1, 1, Collections.emptyList());
+        List<Remediation> remediations = remediationDAO.findAll(1, 1, List.of());
         assertTrue(remediations.isEmpty());
     }
 
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java
index 803984e..d9257fc 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java
@@ -24,7 +24,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -34,7 +33,6 @@ import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
 import org.apache.syncope.core.persistence.api.dao.TaskDAO;
 import org.apache.syncope.core.persistence.api.dao.UserDAO;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import org.apache.syncope.core.persistence.api.entity.task.PropagationTask;
 import org.apache.syncope.core.persistence.api.entity.task.Task;
@@ -68,7 +66,7 @@ public class TaskTest extends AbstractTest {
     @Test
     public void findPaginated() {
         List<Task> tasks = taskDAO.findAll(
-                TaskType.PROPAGATION, null, null, null, null, 1, 2, Collections.<OrderByClause>emptyList());
+                TaskType.PROPAGATION, null, null, null, null, 1, 2, List.of());
         assertNotNull(tasks);
         assertEquals(2, tasks.size());
 
@@ -77,7 +75,7 @@ public class TaskTest extends AbstractTest {
         }
 
         tasks = taskDAO.findAll(
-                TaskType.PROPAGATION, null, null, null, null, 2, 2, Collections.<OrderByClause>emptyList());
+                TaskType.PROPAGATION, null, null, null, null, 2, 2, List.of());
         assertNotNull(tasks);
         assertEquals(2, tasks.size());
 
@@ -86,7 +84,7 @@ public class TaskTest extends AbstractTest {
         }
 
         tasks = taskDAO.findAll(
-                TaskType.PROPAGATION, null, null, null, null, 1000, 2, Collections.<OrderByClause>emptyList());
+                TaskType.PROPAGATION, null, null, null, null, 1000, 2, List.of());
         assertNotNull(tasks);
         assertTrue(tasks.isEmpty());
 
@@ -144,7 +142,7 @@ public class TaskTest extends AbstractTest {
         resource = resourceDAO.find(resource.getKey());
         assertNotNull(resource);
         assertFalse(taskDAO.findAll(
-                TaskType.PROPAGATION, resource, null, null, null, -1, -1, Collections.<OrderByClause>emptyList()).
+                TaskType.PROPAGATION, resource, null, null, null, -1, -1, List.of()).
                 contains(task));
     }
 }
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
index c25aead..9f38789 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
@@ -26,10 +26,10 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.stream.Collectors;
 import javax.persistence.Query;
 import org.apache.syncope.common.lib.SyncopeConstants;
@@ -235,7 +235,7 @@ public class GroupTest extends AbstractTest {
         // 3. verify that expected users have the created group dynamically assigned
         List<String> members = groupDAO.findUDynMembers(actual);
         assertEquals(2, members.size());
-        assertEquals(new HashSet<>(Arrays.asList("c9b2dec2-00a7-4855-97c0-d854842b4b24", newUserKey)),
+        assertEquals(Set.of("c9b2dec2-00a7-4855-97c0-d854842b4b24", newUserKey),
                 new HashSet<>(members));
 
         user = userDAO.findByUsername("bellini");
@@ -339,7 +339,7 @@ public class GroupTest extends AbstractTest {
                 -> "PRINTER".equals(anyObjectDAO.find(object).getType().getKey())).collect(Collectors.toList());
         assertEquals(2, members.size());
         assertEquals(
-                new HashSet<>(Arrays.asList("fc6dbc3a-6c07-4965-8781-921e7401a4a5", newAnyObjectKey)),
+                Set.of("fc6dbc3a-6c07-4965-8781-921e7401a4a5", newAnyObjectKey),
                 new HashSet<>(members));
 
         anyObject = anyObjectDAO.find("fc6dbc3a-6c07-4965-8781-921e7401a4a5");
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
index fcb024a..32bcd63 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
@@ -24,7 +24,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -37,7 +36,6 @@ import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
 import org.apache.syncope.core.persistence.api.dao.TaskDAO;
 import org.apache.syncope.core.persistence.api.dao.UserDAO;
 import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.entity.ConnInstance;
 import org.apache.syncope.core.persistence.api.entity.Entity;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
@@ -217,7 +215,7 @@ public class ResourceTest extends AbstractTest {
 
         // Get tasks
         List<PropagationTask> propagationTasks = taskDAO.findAll(
-                TaskType.PROPAGATION, resource, null, null, null, -1, -1, Collections.<OrderByClause>emptyList());
+                TaskType.PROPAGATION, resource, null, null, null, -1, -1, List.of());
         assertFalse(propagationTasks.isEmpty());
 
         // delete resource
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
index c788326..b69c5b9 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/RoleTest.java
@@ -24,10 +24,11 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
+
 import javax.persistence.Query;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.IdRepoEntitlement;
@@ -137,7 +138,7 @@ public class RoleTest extends AbstractTest {
         List<String> members = roleDAO.findDynMembers(actual);
         assertEquals(2, members.size());
         assertEquals(
-                new HashSet<>(Arrays.asList("c9b2dec2-00a7-4855-97c0-d854842b4b24", newUserKey)),
+                Set.of("c9b2dec2-00a7-4855-97c0-d854842b4b24", newUserKey),
                 new HashSet<>(members));
 
         user = userDAO.find("c9b2dec2-00a7-4855-97c0-d854842b4b24");
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/TaskTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/TaskTest.java
index beabab3..3656449 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/TaskTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/TaskTest.java
@@ -25,7 +25,6 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
@@ -137,7 +136,7 @@ public class TaskTest extends AbstractTest {
 
         resource = resourceDAO.find("ws-target-resource-1");
         assertTrue(taskDAO.findAll(
-                TaskType.PROPAGATION, resource, null, null, null, -1, -1, Collections.<OrderByClause>emptyList()).
+                TaskType.PROPAGATION, resource, null, null, null, -1, -1, List.of()).
                 contains(task));
     }
 
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/PropagationByResource.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/PropagationByResource.java
index cafc603..70bcf01 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/PropagationByResource.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/PropagationByResource.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.provisioning.api;
 
 import java.io.Serializable;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -250,7 +249,7 @@ public class PropagationByResource implements Serializable {
      * @return resource matching the given type
      */
     public final Set<String> get(final ResourceOperation type) {
-        Set<String> result = Collections.<String>emptySet();
+        Set<String> result = Set.of();
 
         switch (type) {
             case CREATE:
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java
index e778639..48612eb 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AsyncConnectorFacade.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.provisioning.java;
 
-import java.util.Collections;
 import java.util.Set;
 import java.util.concurrent.Future;
 import org.identityconnectors.common.security.GuardedString;
@@ -129,7 +128,7 @@ public class AsyncConnectorFacade {
 
     @Async
     public Future<Set<ObjectClassInfo>> getObjectClassInfo(final ConnectorFacade connector) {
-        Set<ObjectClassInfo> result = Collections.emptySet();
+        Set<ObjectClassInfo> result = Set.of();
 
         try {
             result = connector.schema().getObjectClassInfo();
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
index 3f601e0..e05406a 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.provisioning.java;
 
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -65,7 +64,7 @@ public class DefaultAnyObjectProvisioningManager implements AnyObjectProvisionin
     public Pair<String, List<PropagationStatus>> create(
             final AnyObjectCR anyObjectCR, final boolean nullPriorityAsync) {
 
-        return create(anyObjectCR, Collections.<String>emptySet(), nullPriorityAsync);
+        return create(anyObjectCR, Set.of(), nullPriorityAsync);
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
@@ -91,7 +90,7 @@ public class DefaultAnyObjectProvisioningManager implements AnyObjectProvisionin
     public Pair<AnyObjectUR, List<PropagationStatus>> update(
             final AnyObjectUR anyObjectUR, final boolean nullPriorityAsync) {
 
-        return update(anyObjectUR, Collections.<String>emptySet(), nullPriorityAsync);
+        return update(anyObjectUR, Set.of(), nullPriorityAsync);
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
@@ -116,7 +115,7 @@ public class DefaultAnyObjectProvisioningManager implements AnyObjectProvisionin
 
     @Override
     public List<PropagationStatus> delete(final String key, final boolean nullPriorityAsync) {
-        return delete(key, Collections.<String>emptySet(), nullPriorityAsync);
+        return delete(key, Set.of(), nullPriorityAsync);
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
index f43ce93..c1d0ada 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
@@ -22,7 +22,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Set;
 import java.util.stream.Collectors;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -77,7 +76,7 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
                 null,
                 created.getPropByRes(),
                 groupCR.getVirAttrs(),
-                Collections.<String>emptySet());
+                Set.of());
         PropagationReporter propagationReporter = taskExecutor.execute(tasks, nullPriorityAsync);
 
         return Pair.of(created.getResult(), propagationReporter.getStatuses());
@@ -113,7 +112,7 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
     public Pair<GroupUR, List<PropagationStatus>> update(
             final GroupUR groupUR, final boolean nullPriorityAsync) {
 
-        return update(groupUR, Collections.<String>emptySet(), nullPriorityAsync);
+        return update(groupUR, Set.of(), nullPriorityAsync);
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
@@ -138,7 +137,7 @@ public class DefaultGroupProvisioningManager implements GroupProvisioningManager
 
     @Override
     public List<PropagationStatus> delete(final String key, final boolean nullPriorityAsync) {
-        return delete(key, Collections.<String>emptySet(), nullPriorityAsync);
+        return delete(key, Set.of(), nullPriorityAsync);
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
index 9847ed4..c389da1 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.provisioning.java;
 
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -76,7 +75,7 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
 
     @Override
     public Pair<String, List<PropagationStatus>> create(final UserCR userCR, final boolean nullPriorityAsync) {
-        return create(userCR, false, null, Collections.<String>emptySet(), nullPriorityAsync);
+        return create(userCR, false, null, Set.of(), nullPriorityAsync);
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
@@ -173,7 +172,7 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
 
     @Override
     public List<PropagationStatus> delete(final String key, final boolean nullPriorityAsync) {
-        return delete(key, Collections.<String>emptySet(), nullPriorityAsync);
+        return delete(key, Set.of(), nullPriorityAsync);
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DerAttrHandlerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DerAttrHandlerImpl.java
index af4f57a..2d5788d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DerAttrHandlerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DerAttrHandlerImpl.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.provisioning.java;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
@@ -69,7 +68,7 @@ public class DerAttrHandlerImpl implements DerAttrHandler {
             return null;
         }
 
-        return getValues(any, Collections.singleton(schema)).get(schema);
+        return getValues(any, Set.of(schema)).get(schema);
     }
 
     @Override
@@ -81,7 +80,7 @@ public class DerAttrHandlerImpl implements DerAttrHandler {
             return null;
         }
 
-        return getValues(any, Collections.singleton(schema)).get(schema);
+        return getValues(any, Set.of(schema)).get(schema);
     }
 
     @Override
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/MappingManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/MappingManagerImpl.java
index 921ee50..c030a6f 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/MappingManagerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/MappingManagerImpl.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.provisioning.java;
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.Base64;
-import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
@@ -456,7 +455,7 @@ public class MappingManagerImpl implements MappingManager {
         }
         if (references.isEmpty()) {
             LOG.warn("Could not determine the reference instance for {}", mapItem.getIntAttrName());
-            return Pair.of(schemaType, Collections.<PlainAttrValue>emptyList());
+            return Pair.of(schemaType, List.of());
         }
 
         List<PlainAttrValue> values = new ArrayList<>();
@@ -655,7 +654,7 @@ public class MappingManagerImpl implements MappingManager {
                     any);
         } catch (ParseException e) {
             LOG.error("Invalid intAttrName '{}' specified, ignoring", mapItem.getIntAttrName(), e);
-            intValues = Pair.of(AttrSchemaType.String, Collections.<PlainAttrValue>emptyList());
+            intValues = Pair.of(AttrSchemaType.String, List.of());
         }
         return Optional.ofNullable(intValues.getRight().isEmpty()
                 ? null
@@ -681,7 +680,7 @@ public class MappingManagerImpl implements MappingManager {
                 values = transformer.beforePull(mapItem, anyTO, values);
             }
         }
-        values = Optional.ofNullable(values).orElse(Collections.emptyList());
+        values = Optional.ofNullable(values).orElse(List.of());
 
         IntAttrName intAttrName;
         try {
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/VirAttrHandlerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/VirAttrHandlerImpl.java
index 446bf83..7d34b29 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/VirAttrHandlerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/VirAttrHandlerImpl.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.provisioning.java;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -152,11 +151,11 @@ public class VirAttrHandlerImpl implements VirAttrHandler {
                 findAllowedSchemas(any, VirSchema.class).forSelfContains(schema)) {
 
             LOG.debug("{} not allowed for {}", schema, any);
-            return Collections.emptyList();
+            return List.of();
         }
 
-        List<String> result = getValues(any, Collections.singleton(schema)).get(schema);
-        return result == null ? Collections.emptyList() : result;
+        List<String> result = getValues(any, Set.of(schema)).get(schema);
+        return result == null ? List.of() : result;
     }
 
     @Override
@@ -165,11 +164,11 @@ public class VirAttrHandlerImpl implements VirAttrHandler {
                 findAllowedSchemas(any, VirSchema.class).getForMembership(membership.getRightEnd()).contains(schema)) {
 
             LOG.debug("{} not allowed for {}", schema, any);
-            return Collections.emptyList();
+            return List.of();
         }
 
-        List<String> result = getValues(any, Collections.singleton(schema)).get(schema);
-        return result == null ? Collections.emptyList() : result;
+        List<String> result = getValues(any, Set.of(schema)).get(schema);
+        return result == null ? List.of() : result;
     }
 
     @Override
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
index 04e472a..370be9e 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
@@ -81,7 +81,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -170,19 +169,19 @@ abstract class AbstractAnyDataBinder {
     }
 
     private void fillAttr(
-        final List<String> values,
-        final AnyUtils anyUtils,
-        final PlainSchema schema,
-        final PlainAttr<?> attr,
-        final SyncopeClientException invalidValues) {
+            final List<String> values,
+            final AnyUtils anyUtils,
+            final PlainSchema schema,
+            final PlainAttr<?> attr,
+            final SyncopeClientException invalidValues) {
 
         // if schema is multivalue, all values are considered for addition;
         // otherwise only the fist one - if provided - is considered
         List<String> valuesProvided = schema.isMultivalue()
-            ? values
-            : (values.isEmpty()
-            ? Collections.<String>emptyList()
-            : Collections.singletonList(values.get(0)));
+                ? values
+                : (values.isEmpty() || values.get(0) == null
+                ? List.of()
+                : List.of(values.get(0)));
 
         valuesProvided.forEach(value -> {
             if (StringUtils.isBlank(value)) {
@@ -192,8 +191,8 @@ abstract class AbstractAnyDataBinder {
                     attr.add(value, anyUtils);
                 } catch (InvalidPlainAttrValueException e) {
                     String valueToPrint = value.length() > 40
-                        ? value.substring(0, 20) + "..."
-                        : value;
+                            ? value.substring(0, 20) + "..."
+                            : value;
                     LOG.warn("Invalid value for attribute " + schema.getKey() + ": " + valueToPrint, e);
 
                     invalidValues.getElements().add(schema.getKey() + ": " + valueToPrint + " - " + e.getMessage());
@@ -214,13 +213,13 @@ abstract class AbstractAnyDataBinder {
             }
             if (intAttrName != null && intAttrName.getSchema() != null) {
                 AttrSchemaType schemaType = intAttrName.getSchema() instanceof PlainSchema
-                    ? ((PlainSchema) intAttrName.getSchema()).getType()
-                    : AttrSchemaType.String;
+                        ? ((PlainSchema) intAttrName.getSchema()).getType()
+                        : AttrSchemaType.String;
 
                 Pair<AttrSchemaType, List<PlainAttrValue>> intValues =
-                    mappingManager.getIntValues(provision, mapItem, intAttrName, schemaType, any);
+                        mappingManager.getIntValues(provision, mapItem, intAttrName, schemaType, any);
                 if (intValues.getRight().isEmpty()
-                    && JexlUtils.evaluateMandatoryCondition(mapItem.getMandatoryCondition(), any)) {
+                        && JexlUtils.evaluateMandatoryCondition(mapItem.getMandatoryCondition(), any)) {
 
                     missingAttrNames.add(mapItem.getIntAttrName());
                 }
@@ -231,7 +230,7 @@ abstract class AbstractAnyDataBinder {
     }
 
     private SyncopeClientException checkMandatoryOnResources(
-        final Any<?> any, final Collection<? extends ExternalResource> resources) {
+            final Any<?> any, final Collection<? extends ExternalResource> resources) {
 
         SyncopeClientException reqValMissing = SyncopeClientException.build(ClientExceptionType.RequiredValuesMissing);
 
@@ -251,14 +250,14 @@ abstract class AbstractAnyDataBinder {
     }
 
     private void checkMandatory(
-        final PlainSchema schema,
-        final PlainAttr<?> attr,
-        final Any<?> any,
-        final SyncopeClientException reqValMissing) {
+            final PlainSchema schema,
+            final PlainAttr<?> attr,
+            final Any<?> any,
+            final SyncopeClientException reqValMissing) {
 
         if (attr == null
-            && !schema.isReadonly()
-            && JexlUtils.evaluateMandatoryCondition(schema.getMandatoryCondition(), any)) {
+                && !schema.isReadonly()
+                && JexlUtils.evaluateMandatoryCondition(schema.getMandatoryCondition(), any)) {
 
             LOG.error("Mandatory schema " + schema.getKey() + " not provided with values");
 
@@ -272,15 +271,15 @@ abstract class AbstractAnyDataBinder {
         // Check if there is some mandatory schema defined for which no value has been provided
         AllowedSchemas<PlainSchema> allowedPlainSchemas = anyUtils.dao().findAllowedSchemas(any, PlainSchema.class);
         allowedPlainSchemas.getForSelf()
-            .forEach(schema -> checkMandatory(schema, any.getPlainAttr(schema.getKey())
+                .forEach(schema -> checkMandatory(schema, any.getPlainAttr(schema.getKey())
                 .orElse(null), any, reqValMissing));
         if (any instanceof GroupableRelatable) {
             allowedPlainSchemas.getForMemberships().forEach((group, schemas) -> {
                 GroupableRelatable<?, ?, ?, ?, ?> groupable = GroupableRelatable.class.cast(any);
                 Membership<?> membership = groupable.getMembership(group.getKey()).orElse(null);
                 schemas
-                    .forEach(schema -> checkMandatory(schema, groupable.getPlainAttr(schema.getKey(), membership)
-                            .orElse(null),
+                        .forEach(schema -> checkMandatory(schema, groupable.getPlainAttr(schema.getKey(), membership)
+                        .orElse(null),
                         any, reqValMissing));
             });
         }
@@ -288,24 +287,24 @@ abstract class AbstractAnyDataBinder {
         return reqValMissing;
     }
 
-    @SuppressWarnings({"unchecked", "rawtypes"})
+    @SuppressWarnings({ "unchecked", "rawtypes" })
     protected void processAttrPatch(
-        final Any any,
-        final AttrPatch patch,
-        final PlainSchema schema,
-        final PlainAttr<?> attr,
-        final AnyUtils anyUtils,
-        final Collection<ExternalResource> resources,
-        final PropagationByResource propByRes,
-        final SyncopeClientException invalidValues) {
+            final Any any,
+            final AttrPatch patch,
+            final PlainSchema schema,
+            final PlainAttr<?> attr,
+            final AnyUtils anyUtils,
+            final Collection<ExternalResource> resources,
+            final PropagationByResource propByRes,
+            final SyncopeClientException invalidValues) {
 
         switch (patch.getOperation()) {
             case ADD_REPLACE:
                 // 1.1 remove values
                 if (attr.getSchema().isUniqueConstraint()) {
                     if (attr.getUniqueValue() != null
-                        && !patch.getAttr().getValues().isEmpty()
-                        && !patch.getAttr().getValues().get(0).equals(attr.getUniqueValue().getValueAsString())) {
+                            && !patch.getAttr().getValues().isEmpty()
+                            && !patch.getAttr().getValues().get(0).equals(attr.getUniqueValue().getValueAsString())) {
 
                         plainAttrValueDAO.deleteAll(attr, anyUtils);
                     }
@@ -316,8 +315,8 @@ abstract class AbstractAnyDataBinder {
                 // 1.2 add values
                 List<String> valuesToBeAdded = patch.getAttr().getValues();
                 if (!valuesToBeAdded.isEmpty()
-                    && (!schema.isUniqueConstraint() || attr.getUniqueValue() == null
-                    || !valuesToBeAdded.get(0).equals(attr.getUniqueValue().getValueAsString()))) {
+                        && (!schema.isUniqueConstraint() || attr.getUniqueValue() == null
+                        || !valuesToBeAdded.get(0).equals(attr.getUniqueValue().getValueAsString()))) {
 
                     fillAttr(valuesToBeAdded, anyUtils, schema, attr, invalidValues);
                 }
@@ -335,9 +334,9 @@ abstract class AbstractAnyDataBinder {
         }
 
         resources.stream().
-            filter(resource -> resource.getProvision(any.getType()).isPresent()
+                filter(resource -> resource.getProvision(any.getType()).isPresent()
                 && resource.getProvision(any.getType()).get().getMapping() != null).
-            forEach(resource -> MappingUtils.getPropagationItems(
+                forEach(resource -> MappingUtils.getPropagationItems(
                 resource.getProvision(any.getType()).get().getMapping().getItems()).stream().
                 filter(item -> (schema.getKey().equals(item.getIntAttrName()))).
                 forEach(item -> {
@@ -349,12 +348,12 @@ abstract class AbstractAnyDataBinder {
                 }));
     }
 
-    @SuppressWarnings({"unchecked", "rawtypes"})
+    @SuppressWarnings({ "unchecked", "rawtypes" })
     protected PropagationByResource fill(
-        final Any any,
-        final AnyUR anyUR,
-        final AnyUtils anyUtils,
-        final SyncopeClientCompositeException scce) {
+            final Any any,
+            final AnyUR anyUR,
+            final AnyUtils anyUtils,
+            final SyncopeClientCompositeException scce) {
 
         PropagationByResource propByRes = new PropagationByResource();
 
@@ -401,11 +400,11 @@ abstract class AbstractAnyDataBinder {
 
         // 3. plain attributes
         anyUR.getPlainAttrs().stream().
-            filter(patch -> patch.getAttr() != null).forEach(patch -> {
+                filter(patch -> patch.getAttr() != null).forEach(patch -> {
             PlainSchema schema = getPlainSchema(patch.getAttr().getSchema());
             if (schema == null) {
                 LOG.debug("Invalid " + PlainSchema.class.getSimpleName() + " {}, ignoring...",
-                    patch.getAttr().getSchema());
+                        patch.getAttr().getSchema());
             } else {
                 PlainAttr<?> attr = (PlainAttr<?>) any.getPlainAttr(schema.getKey()).orElse(null);
                 if (attr == null) {
@@ -440,48 +439,48 @@ abstract class AbstractAnyDataBinder {
         return propByRes;
     }
 
-    @SuppressWarnings({"unchecked", "rawtypes"})
+    @SuppressWarnings({ "unchecked", "rawtypes" })
     protected void fill(
-        final Any any,
-        final AnyCR anyCR,
-        final AnyUtils anyUtils,
-        final SyncopeClientCompositeException scce) {
+            final Any any,
+            final AnyCR anyCR,
+            final AnyUtils anyUtils,
+            final SyncopeClientCompositeException scce) {
 
         // 0. aux classes
         any.getAuxClasses().clear();
         anyCR.getAuxClasses().stream().
-            map(className -> anyTypeClassDAO.find(className)).
-            forEachOrdered(auxClass -> {
-                if (auxClass == null) {
-                    LOG.debug("Invalid " + AnyTypeClass.class.getSimpleName() + " {}, ignoring...", auxClass);
-                } else {
-                    any.add(auxClass);
-                }
-            });
+                map(className -> anyTypeClassDAO.find(className)).
+                forEachOrdered(auxClass -> {
+                    if (auxClass == null) {
+                        LOG.debug("Invalid " + AnyTypeClass.class.getSimpleName() + " {}, ignoring...", auxClass);
+                    } else {
+                        any.add(auxClass);
+                    }
+                });
 
         // 1. attributes
         SyncopeClientException invalidValues = SyncopeClientException.build(ClientExceptionType.InvalidValues);
 
         anyCR.getPlainAttrs().stream().
-            filter(attrTO -> !attrTO.getValues().isEmpty()).
-            forEach(attrTO -> {
-                PlainSchema schema = getPlainSchema(attrTO.getSchema());
-                if (schema != null) {
-                    PlainAttr<?> attr = (PlainAttr<?>) any.getPlainAttr(schema.getKey()).orElse(null);
-                    if (attr == null) {
-                        attr = anyUtils.newPlainAttr();
-                        ((PlainAttr) attr).setOwner(any);
-                        attr.setSchema(schema);
-                    }
-                    fillAttr(attrTO.getValues(), anyUtils, schema, attr, invalidValues);
-
-                    if (attr.getValuesAsStrings().isEmpty()) {
-                        attr.setOwner(null);
-                    } else {
-                        any.add(attr);
+                filter(attrTO -> !attrTO.getValues().isEmpty()).
+                forEach(attrTO -> {
+                    PlainSchema schema = getPlainSchema(attrTO.getSchema());
+                    if (schema != null) {
+                        PlainAttr<?> attr = (PlainAttr<?>) any.getPlainAttr(schema.getKey()).orElse(null);
+                        if (attr == null) {
+                            attr = anyUtils.newPlainAttr();
+                            ((PlainAttr) attr).setOwner(any);
+                            attr.setSchema(schema);
+                        }
+                        fillAttr(attrTO.getValues(), anyUtils, schema, attr, invalidValues);
+
+                        if (attr.getValuesAsStrings().isEmpty()) {
+                            attr.setOwner(null);
+                        } else {
+                            any.add(attr);
+                        }
                     }
-                }
-            });
+                });
 
         if (!invalidValues.isEmpty()) {
             scce.addException(invalidValues);
@@ -508,38 +507,38 @@ abstract class AbstractAnyDataBinder {
         }
     }
 
-    @SuppressWarnings({"unchecked", "rawtypes"})
+    @SuppressWarnings({ "unchecked", "rawtypes" })
     protected void fill(
-        final Any any,
-        final Membership membership,
-        final MembershipTO membershipTO,
-        final AnyUtils anyUtils,
-        final SyncopeClientCompositeException scce) {
+            final Any any,
+            final Membership membership,
+            final MembershipTO membershipTO,
+            final AnyUtils anyUtils,
+            final SyncopeClientCompositeException scce) {
 
         SyncopeClientException invalidValues = SyncopeClientException.build(ClientExceptionType.InvalidValues);
 
         membershipTO.getPlainAttrs().stream().
-            filter(attrTO -> !attrTO.getValues().isEmpty()).
-            forEach(attrTO -> {
-                PlainSchema schema = getPlainSchema(attrTO.getSchema());
-                if (schema != null) {
-                    GroupablePlainAttr attr = (GroupablePlainAttr) GroupableRelatable.class.cast(any).
-                        getPlainAttr(schema.getKey(), membership).orElse(null);
-                    if (attr == null) {
-                        attr = anyUtils.newPlainAttr();
-                        attr.setOwner(any);
-                        attr.setMembership(membership);
-                        attr.setSchema(schema);
-                    }
-                    fillAttr(attrTO.getValues(), anyUtils, schema, attr, invalidValues);
-
-                    if (attr.getValuesAsStrings().isEmpty()) {
-                        attr.setOwner(null);
-                    } else {
-                        any.add(attr);
+                filter(attrTO -> !attrTO.getValues().isEmpty()).
+                forEach(attrTO -> {
+                    PlainSchema schema = getPlainSchema(attrTO.getSchema());
+                    if (schema != null) {
+                        GroupablePlainAttr attr = (GroupablePlainAttr) GroupableRelatable.class.cast(any).
+                                getPlainAttr(schema.getKey(), membership).orElse(null);
+                        if (attr == null) {
+                            attr = anyUtils.newPlainAttr();
+                            attr.setOwner(any);
+                            attr.setMembership(membership);
+                            attr.setSchema(schema);
+                        }
+                        fillAttr(attrTO.getValues(), anyUtils, schema, attr, invalidValues);
+
+                        if (attr.getValuesAsStrings().isEmpty()) {
+                            attr.setOwner(null);
+                        } else {
+                            any.add(attr);
+                        }
                     }
-                }
-            });
+                });
 
         if (!invalidValues.isEmpty()) {
             scce.addException(invalidValues);
@@ -547,61 +546,60 @@ abstract class AbstractAnyDataBinder {
     }
 
     protected void fillTO(
-        final AnyTO anyTO,
-        final String realmFullPath,
-        final Collection<? extends AnyTypeClass> auxClasses,
-        final Collection<? extends PlainAttr<?>> plainAttrs,
-        final Map<DerSchema, String> derAttrs,
-        final Map<VirSchema, List<String>> virAttrs,
-        final Collection<? extends ExternalResource> resources,
-        final boolean details) {
+            final AnyTO anyTO,
+            final String realmFullPath,
+            final Collection<? extends AnyTypeClass> auxClasses,
+            final Collection<? extends PlainAttr<?>> plainAttrs,
+            final Map<DerSchema, String> derAttrs,
+            final Map<VirSchema, List<String>> virAttrs,
+            final Collection<? extends ExternalResource> resources,
+            final boolean details) {
 
         anyTO.setRealm(realmFullPath);
 
         anyTO.getAuxClasses().addAll(auxClasses.stream().map(Entity::getKey).collect(Collectors.toList()));
 
-
         plainAttrs
-            .forEach(plainAttr -> anyTO.getPlainAttrs().add(new Attr.Builder(plainAttr.getSchema().getKey())
+                .forEach(plainAttr -> anyTO.getPlainAttrs().add(new Attr.Builder(plainAttr.getSchema().getKey())
                 .values(plainAttr.getValuesAsStrings()).build()));
 
         derAttrs.forEach((schema, value) -> anyTO.getDerAttrs()
-            .add(new Attr.Builder(schema.getKey()).value(value).build()));
+                .add(new Attr.Builder(schema.getKey()).value(value).build()));
 
         virAttrs.forEach((schema, values) -> anyTO.getVirAttrs()
-            .add(new Attr.Builder(schema.getKey()).values(values).build()));
+                .add(new Attr.Builder(schema.getKey()).values(values).build()));
 
         anyTO.getResources().addAll(resources.stream().map(Entity::getKey).collect(Collectors.toSet()));
     }
 
     protected RelationshipTO getRelationshipTO(final String relationshipType, final AnyObject otherEnd) {
         return new RelationshipTO.Builder().
-            type(relationshipType).otherEnd(otherEnd.getType().getKey(), otherEnd.getKey(), otherEnd.getName()).
-            build();
+                type(relationshipType).otherEnd(otherEnd.getType().getKey(), otherEnd.getKey(), otherEnd.getName()).
+                build();
     }
 
     protected MembershipTO getMembershipTO(
-        final Collection<? extends PlainAttr<?>> plainAttrs,
-        final Map<DerSchema, String> derAttrs,
-        final Map<VirSchema, List<String>> virAttrs,
-        final Membership<? extends Any<?>> membership) {
+            final Collection<? extends PlainAttr<?>> plainAttrs,
+            final Map<DerSchema, String> derAttrs,
+            final Map<VirSchema, List<String>> virAttrs,
+            final Membership<? extends Any<?>> membership) {
 
         MembershipTO membershipTO = new MembershipTO.Builder(membership.getRightEnd().getKey())
-            .groupName(membership.getRightEnd().getName())
-            .build();
+                .groupName(membership.getRightEnd().getName())
+                .build();
 
         plainAttrs.forEach(plainAttr -> membershipTO.getPlainAttrs()
-            .add(new Attr.Builder(plainAttr.getSchema().getKey())
-                .values(plainAttr.getValuesAsStrings()).
-                    build()));
+                .add(new Attr.Builder(plainAttr.getSchema().getKey())
+                        .values(plainAttr.getValuesAsStrings()).
+                        build()));
 
         derAttrs.forEach((schema, value) -> membershipTO.getDerAttrs().add(new Attr.Builder(schema.getKey()).
-            value(value).
-            build()));
+                value(value).
+                build()));
 
         virAttrs.forEach((schema, values) -> membershipTO.getVirAttrs().add(new Attr.Builder(schema.getKey()).
-            values(values).
-            build()));
+                values(values).
+                build()));
 
         return membershipTO;
     }
@@ -610,16 +608,16 @@ abstract class AbstractAnyDataBinder {
         Map<String, String> connObjectKeys = new HashMap<>();
 
         anyUtils.getAllResources(any).
-            forEach(resource -> resource.getProvision(any.getType()).
+                forEach(resource -> resource.getProvision(any.getType()).
                 filter(provision -> provision.getMapping() != null).
                 ifPresent(provision -> {
                     MappingItem connObjectKeyItem = MappingUtils.getConnObjectKeyItem(provision).
-                        orElseThrow(() -> new NotFoundException(
+                            orElseThrow(() -> new NotFoundException(
                             "ConnObjectKey mapping for " + any.getType().getKey() + " " + any.getKey()
-                                + " on resource '" + resource.getKey() + "'"));
+                            + " on resource '" + resource.getKey() + "'"));
 
                     mappingManager.getConnObjectKeyValue(any, provision).
-                        ifPresent(value -> connObjectKeys.put(resource.getKey(), value));
+                            ifPresent(value -> connObjectKeys.put(resource.getKey(), value));
                 }));
 
         return connObjectKeys;
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
index 4341e87..35c8fd9 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
@@ -316,8 +316,7 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
 
         Map<String, Set<String>> reasons = new HashMap<>();
         anyObject.getResources().forEach(
-                resource -> reasons.put(resource.getKey(),
-                        new HashSet<>(Collections.singleton(anyObject.getKey()))));
+                resource -> reasons.put(resource.getKey(), new HashSet<>(Set.of(anyObject.getKey()))));
         anyObjectDAO.findAllGroupKeys(anyObject).forEach(
                 group -> groupDAO.findAllResourceKeys(group).forEach(resource -> {
                     if (!reasons.containsKey(resource)) {
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
index 8b339d7..023c62f 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.provisioning.java.data;
 
 import java.net.URI;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
@@ -233,7 +232,7 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder {
 
         if (property.getValue() != null) {
             if (property.getValue().getClass().isArray()) {
-                connConfPropSchema.getDefaultValues().addAll(Arrays.asList((Object[]) property.getValue()));
+                connConfPropSchema.getDefaultValues().addAll(List.of((Object[]) property.getValue()));
             } else if (property.getValue() instanceof Collection<?>) {
                 connConfPropSchema.getDefaultValues().addAll((Collection<?>) property.getValue());
             } else {
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
index 7484f30..2c4ea6c 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
@@ -404,8 +404,8 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
         Collection<ExternalResource> resources = userDAO.findAllResources(user);
 
         Map<String, Set<String>> reasons = new HashMap<>();
-        user.getResources().
-                forEach(resource -> reasons.put(resource.getKey(), Set.of(user.getKey())));
+        user.getResources().forEach(
+                resource -> reasons.put(resource.getKey(), new HashSet<>(Set.of(user.getKey()))));
         userDAO.findAllGroupKeys(user).forEach(group -> groupDAO.findAllResourceKeys(group).forEach(resource -> {
             if (!reasons.containsKey(resource)) {
                 reasons.put(resource, new HashSet<>());
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/JobManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/JobManagerImpl.java
index 4d09755..a27a1dd 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/JobManagerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/JobManagerImpl.java
@@ -22,7 +22,6 @@ import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -382,7 +381,7 @@ public class JobManagerImpl implements JobManager, SyncopeCoreLoader {
                             job,
                             conf.getLeft(),
                             null,
-                            Collections.emptyMap());
+                            Map.of());
                 } catch (Exception e) {
                     LOG.error("While loading {} instance", NotificationJob.class.getSimpleName(), e);
                 }
@@ -397,7 +396,7 @@ public class JobManagerImpl implements JobManager, SyncopeCoreLoader {
                         job,
                         "0 * * * * ?",
                         null,
-                        Collections.emptyMap());
+                        Map.of());
             } catch (Exception e) {
                 LOG.error("While loading {} instance", SystemLoadReporterJob.class.getSimpleName(), e);
             }
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/GroupReportlet.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/GroupReportlet.java
index 397e8f6..dc7044c 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/GroupReportlet.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/GroupReportlet.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.provisioning.java.job.report;
 
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicReference;
@@ -35,7 +34,6 @@ import org.apache.syncope.common.lib.to.GroupTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.core.persistence.api.dao.AnyDAO;
 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.entity.group.Group;
 import org.apache.syncope.core.persistence.api.search.SearchCondConverter;
 import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
@@ -320,7 +318,7 @@ public class GroupReportlet extends AbstractReportlet {
                         SearchCondConverter.convert(this.conf.getMatchingCond()),
                         page,
                         AnyDAO.DEFAULT_PAGE_SIZE,
-                        Collections.<OrderByClause>emptyList(),
+                        List.of(),
                         AnyTypeKind.USER);
             }
 
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/ReconciliationReportlet.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/ReconciliationReportlet.java
index 3d1ea84..31231d5 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/ReconciliationReportlet.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/ReconciliationReportlet.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.provisioning.java.job.report;
 
 import java.util.Base64;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -44,7 +43,6 @@ import org.apache.syncope.core.persistence.api.dao.GroupDAO;
 import org.apache.syncope.core.persistence.api.dao.ReportletConfClass;
 import org.apache.syncope.core.persistence.api.dao.UserDAO;
 import org.apache.syncope.core.persistence.api.dao.search.AnyTypeCond;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
 import org.apache.syncope.core.persistence.api.entity.Any;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
@@ -255,7 +253,7 @@ public class ReconciliationReportlet extends AbstractReportlet {
     private Set<Object> getValues(final Attribute attr) {
         Set<Object> values;
         if (attr.getValue() == null || attr.getValue().isEmpty()) {
-            values = Collections.emptySet();
+            values = Set.of();
         } else if (attr.getValue().get(0) instanceof byte[]) {
             values = new HashSet<>(attr.getValue().size());
             attr.getValue().forEach(single -> values.add(Base64.getEncoder().encode((byte[]) single)));
@@ -319,11 +317,11 @@ public class ReconciliationReportlet extends AbstractReportlet {
                         syncopeAttrs.keySet().stream().
                                 filter(syncopeAttr -> !resourceAttrs.containsKey(syncopeAttr)).
                                 forEach(name -> misaligned.add(new Misaligned(
-                                        resource.getKey(),
-                                        connObjectKeyValue,
-                                        name,
-                                        syncopeAttrs.get(name),
-                                        Collections.emptySet())));
+                                resource.getKey(),
+                                connObjectKeyValue,
+                                name,
+                                syncopeAttrs.get(name),
+                                Set.of())));
 
                         resourceAttrs.forEach((key, values) -> {
                             if (syncopeAttrs.containsKey(key)) {
@@ -340,7 +338,7 @@ public class ReconciliationReportlet extends AbstractReportlet {
                                         resource.getKey(),
                                         connObjectKeyValue,
                                         key,
-                                        Collections.emptySet(),
+                                        Set.of(),
                                         values));
                             }
                         });
@@ -402,7 +400,7 @@ public class ReconciliationReportlet extends AbstractReportlet {
                         cond,
                         page,
                         PAGE_SIZE,
-                        Collections.<OrderByClause>emptyList(),
+                        List.of(),
                         AnyTypeKind.USER));
             }
         }
@@ -442,7 +440,7 @@ public class ReconciliationReportlet extends AbstractReportlet {
                         cond,
                         page,
                         PAGE_SIZE,
-                        Collections.<OrderByClause>emptyList(),
+                        List.of(),
                         AnyTypeKind.GROUP));
             }
         }
@@ -477,7 +475,7 @@ public class ReconciliationReportlet extends AbstractReportlet {
                             cond,
                             page,
                             PAGE_SIZE,
-                            Collections.<OrderByClause>emptyList(),
+                            List.of(),
                             AnyTypeKind.ANY_OBJECT));
                 }
 
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/UserReportlet.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/UserReportlet.java
index 31f42bd..94f5e27 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/UserReportlet.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/UserReportlet.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.provisioning.java.job.report;
 
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicReference;
@@ -37,7 +36,6 @@ import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.core.persistence.api.dao.AnyDAO;
 import org.apache.syncope.core.persistence.api.dao.UserDAO;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.entity.user.User;
 import org.apache.syncope.core.persistence.api.search.SearchCondConverter;
 import org.apache.syncope.core.provisioning.api.utils.FormatUtils;
@@ -382,7 +380,7 @@ public class UserReportlet extends AbstractReportlet {
                         SearchCondConverter.convert(this.conf.getMatchingCond()),
                         page,
                         AnyDAO.DEFAULT_PAGE_SIZE,
-                        Collections.<OrderByClause>emptyList(),
+                        List.of(),
                         AnyTypeKind.USER);
             }
 
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/DefaultNotificationManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/DefaultNotificationManager.java
index 19aeaad..3e2be3e 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/DefaultNotificationManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/DefaultNotificationManager.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.provisioning.java.notification;
 import java.io.StringWriter;
 import java.text.ParseException;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -50,7 +49,6 @@ import org.apache.syncope.core.persistence.api.dao.NotificationDAO;
 import org.apache.syncope.core.persistence.api.dao.TaskDAO;
 import org.apache.syncope.core.persistence.api.dao.UserDAO;
 import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.entity.Any;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.DerSchema;
@@ -184,7 +182,7 @@ public class DefaultNotificationManager implements NotificationManager {
         if (notification.getRecipientsFIQL() != null) {
             recipients.addAll(searchDAO.<User>search(
                     SearchCondConverter.convert(notification.getRecipientsFIQL()),
-                    Collections.<OrderByClause>emptyList(), AnyTypeKind.USER));
+                    List.of(), AnyTypeKind.USER));
         }
 
         if (notification.isSelfAsRecipient() && any instanceof User) {
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java
index 33bab0b..53619c7 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java
@@ -19,9 +19,7 @@
 package org.apache.syncope.core.provisioning.java.propagation;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
@@ -300,7 +298,7 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
              * update, this entity used to have the current resource assigned by more than one mean (for example,
              * two different memberships with the same resource).
              */
-            Collection<String> resources = Collections.emptySet();
+            Collection<String> resources = Set.of();
             if (task.getEntityKey() != null && task.getAnyTypeKind() != null) {
                 switch (task.getAnyTypeKind()) {
                     case USER:
@@ -365,7 +363,7 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
         }
         Set<Attribute> attributes = new HashSet<>();
         if (StringUtils.isNotBlank(taskInfo.getAttributes())) {
-            attributes.addAll(Arrays.asList(POJOHelper.deserialize(taskInfo.getAttributes(), Attribute[].class)));
+            attributes.addAll(List.of(POJOHelper.deserialize(taskInfo.getAttributes(), Attribute[].class)));
         }
         task.setAttributes(attributes);
 
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
index 3c675fb..f5547d7 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
@@ -59,7 +59,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -168,7 +167,7 @@ public class PropagationManagerImpl implements PropagationManager {
             final Collection<String> noPropResourceKeys) {
 
         if (propByRes == null || propByRes.isEmpty()) {
-            return Collections.<PropagationTaskInfo>emptyList();
+            return List.of();
         }
 
         if (noPropResourceKeys != null) {
@@ -375,11 +374,11 @@ public class PropagationManagerImpl implements PropagationManager {
 
         propByRes.asMap().forEach((resourceKey, operation) -> {
             ExternalResource resource = resourceDAO.find(resourceKey);
-            Provision provision = Optional.ofNullable(resource)
-                    .map(externalResource -> externalResource.getProvision(any.getType())
-                    .orElse(null)).orElse(null);
+            Provision provision = Optional.ofNullable(resource).
+                    map(externalResource -> externalResource.getProvision(any.getType()).
+                    orElse(null)).orElse(null);
             List<? extends Item> mappingItems = provision == null
-                    ? Collections.<Item>emptyList()
+                    ? List.of()
                     : MappingUtils.getPropagationItems(provision.getMapping().getItems());
 
             if (resource == null) {
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
index 950d7e8..f1d529c 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
@@ -19,9 +19,10 @@
 package org.apache.syncope.core.provisioning.java.pushpull;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Date;
 import java.util.List;
+import java.util.Set;
+
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.syncope.common.lib.AnyOperations;
 import org.apache.syncope.common.lib.request.AnyCR;
@@ -181,7 +182,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
         if (!profile.getTask().isPerformCreate()) {
             LOG.debug("PullTask not configured for create");
             finalize(UnmatchingRule.toEventName(UnmatchingRule.ASSIGN), Result.SUCCESS, null, null, delta);
-            return Collections.<ProvisioningReport>emptyList();
+            return List.of();
         }
 
         AnyCR anyCR = connObjectUtils.getAnyCR(delta.getObject(), profile.getTask(), provision, anyUtils);
@@ -205,7 +206,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
             create(anyCR, delta, UnmatchingRule.toEventName(UnmatchingRule.ASSIGN), provision, result);
         }
 
-        return Collections.singletonList(result);
+        return List.of(result);
     }
 
     protected List<ProvisioningReport> provision(
@@ -215,7 +216,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
         if (!profile.getTask().isPerformCreate()) {
             LOG.debug("PullTask not configured for create");
             finalize(UnmatchingRule.toEventName(UnmatchingRule.PROVISION), Result.SUCCESS, null, null, delta);
-            return Collections.<ProvisioningReport>emptyList();
+            return List.of();
         }
 
         AnyCR anyCR = connObjectUtils.getAnyCR(delta.getObject(), profile.getTask(), provision, anyUtils);
@@ -238,7 +239,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
             create(anyCR, delta, UnmatchingRule.toEventName(UnmatchingRule.PROVISION), provision, result);
         }
 
-        return Collections.singletonList(result);
+        return List.of(result);
     }
 
     protected void throwIgnoreProvisionException(final SyncDelta delta, final Exception exception)
@@ -320,7 +321,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
         if (!profile.getTask().isPerformUpdate()) {
             LOG.debug("PullTask not configured for update");
             finalize(MatchingRule.toEventName(MatchingRule.UPDATE), Result.SUCCESS, null, null, delta);
-            return Collections.<ProvisioningReport>emptyList();
+            return List.of();
         }
 
         LOG.debug("About to update {}", anyKeys);
@@ -430,7 +431,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
             finalize(unlink
                     ? MatchingRule.toEventName(MatchingRule.UNASSIGN)
                     : MatchingRule.toEventName(MatchingRule.DEPROVISION), Result.SUCCESS, null, null, delta);
-            return Collections.<ProvisioningReport>emptyList();
+            return List.of();
         }
 
         LOG.debug("About to deprovision {}", anyKeys);
@@ -543,7 +544,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
             finalize(unlink
                     ? MatchingRule.toEventName(MatchingRule.UNLINK)
                     : MatchingRule.toEventName(MatchingRule.LINK), Result.SUCCESS, null, null, delta);
-            return Collections.<ProvisioningReport>emptyList();
+            return List.of();
         }
 
         LOG.debug("About to update {}", anyKeys);
@@ -641,7 +642,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
         if (!profile.getTask().isPerformDelete()) {
             LOG.debug("PullTask not configured for delete");
             finalize(ResourceOperation.DELETE.name().toLowerCase(), Result.SUCCESS, null, null, delta);
-            return Collections.<ProvisioningReport>emptyList();
+            return List.of();
         }
 
         LOG.debug("About to delete {}", anyKeys);
@@ -670,7 +671,7 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
 
                     try {
                         getProvisioningManager().
-                                delete(key, Collections.singleton(profile.getTask().getResource().getKey()), true);
+                                delete(key, Set.of(profile.getTask().getResource().getKey()), true);
                         output = null;
                         resultStatus = Result.SUCCESS;
 
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultAnyObjectPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultAnyObjectPullResultHandler.java
index 08ae663..6e728ae 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultAnyObjectPullResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultAnyObjectPullResultHandler.java
@@ -18,9 +18,10 @@
  */
 package org.apache.syncope.core.provisioning.java.pushpull;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.request.AnyCR;
 import org.apache.syncope.common.lib.request.AnyObjectCR;
@@ -79,7 +80,7 @@ public class DefaultAnyObjectPullResultHandler extends AbstractPullResultHandler
         AnyObjectCR anyObjectCR = AnyObjectCR.class.cast(anyCR);
 
         Map.Entry<String, List<PropagationStatus>> created = anyObjectProvisioningManager.create(
-                anyObjectCR, Collections.singleton(profile.getTask().getResource().getKey()), true);
+                anyObjectCR, Set.of(profile.getTask().getResource().getKey()), true);
 
         return getAnyTO(created.getKey());
     }
@@ -94,7 +95,7 @@ public class DefaultAnyObjectPullResultHandler extends AbstractPullResultHandler
         AnyObjectUR anyObjectUR = AnyObjectUR.class.cast(req);
 
         Pair<AnyObjectUR, List<PropagationStatus>> updated = anyObjectProvisioningManager.update(
-                anyObjectUR, Collections.singleton(profile.getTask().getResource().getKey()), true);
+                anyObjectUR, Set.of(profile.getTask().getResource().getKey()), true);
 
         return updated.getLeft();
     }
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultGroupPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultGroupPullResultHandler.java
index ec6d305..77a2363 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultGroupPullResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultGroupPullResultHandler.java
@@ -18,10 +18,11 @@
  */
 package org.apache.syncope.core.provisioning.java.pushpull;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.request.AnyCR;
 import org.apache.syncope.common.lib.request.AnyUR;
@@ -91,7 +92,7 @@ public class DefaultGroupPullResultHandler extends AbstractPullResultHandler imp
         Map.Entry<String, List<PropagationStatus>> created = groupProvisioningManager.create(
                 groupCR,
                 groupOwnerMap,
-                Collections.singleton(profile.getTask().getResource().getKey()),
+                Set.of(profile.getTask().getResource().getKey()),
                 true);
 
         return getAnyTO(created.getKey());
@@ -107,7 +108,7 @@ public class DefaultGroupPullResultHandler extends AbstractPullResultHandler imp
         GroupUR groupUR = GroupUR.class.cast(req);
 
         Pair<GroupUR, List<PropagationStatus>> updated = groupProvisioningManager.update(
-                groupUR, Collections.singleton(profile.getTask().getResource().getKey()), true);
+                groupUR, Set.of(profile.getTask().getResource().getKey()), true);
 
         String groupOwner = null;
         for (AttrPatch attrPatch : groupUR.getPlainAttrs()) {
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
index 43c2eb8..1bb565a 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.provisioning.java.pushpull;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 import org.apache.commons.lang3.exception.ExceptionUtils;
@@ -133,7 +132,7 @@ public class DefaultRealmPullResultHandler
         if (!profile.getTask().isPerformCreate()) {
             LOG.debug("PullTask not configured for create");
             finalize(UnmatchingRule.toEventName(UnmatchingRule.ASSIGN), Result.SUCCESS, null, null, delta);
-            return Collections.<ProvisioningReport>emptyList();
+            return List.of();
         }
 
         RealmTO realmTO = connObjectUtils.getRealmTO(delta.getObject(), profile.getTask(), orgUnit);
@@ -163,7 +162,7 @@ public class DefaultRealmPullResultHandler
             create(realmTO, delta, UnmatchingRule.ASSIGN, result);
         }
 
-        return Collections.singletonList(result);
+        return List.of(result);
     }
 
     private List<ProvisioningReport> provision(final SyncDelta delta, final OrgUnit orgUnit)
@@ -172,7 +171,7 @@ public class DefaultRealmPullResultHandler
         if (!profile.getTask().isPerformCreate()) {
             LOG.debug("PullTask not configured for create");
             finalize(UnmatchingRule.toEventName(UnmatchingRule.PROVISION), Result.SUCCESS, null, null, delta);
-            return Collections.<ProvisioningReport>emptyList();
+            return List.of();
         }
 
         RealmTO realmTO = connObjectUtils.getRealmTO(delta.getObject(), profile.getTask(), orgUnit);
@@ -201,7 +200,7 @@ public class DefaultRealmPullResultHandler
             create(realmTO, delta, UnmatchingRule.PROVISION, result);
         }
 
-        return Collections.singletonList(result);
+        return List.of(result);
     }
 
     private void throwIgnoreProvisionException(final SyncDelta delta, final Exception exception)
@@ -280,7 +279,7 @@ public class DefaultRealmPullResultHandler
         if (!profile.getTask().isPerformUpdate()) {
             LOG.debug("PullTask not configured for update");
             finalize(MatchingRule.toEventName(MatchingRule.UPDATE), Result.SUCCESS, null, null, delta);
-            return Collections.<ProvisioningReport>emptyList();
+            return List.of();
         }
 
         LOG.debug("About to update {}", keys);
@@ -368,7 +367,7 @@ public class DefaultRealmPullResultHandler
             finalize(unlink
                     ? MatchingRule.toEventName(MatchingRule.UNASSIGN)
                     : MatchingRule.toEventName(MatchingRule.DEPROVISION), Result.SUCCESS, null, null, delta);
-            return Collections.<ProvisioningReport>emptyList();
+            return List.of();
         }
 
         LOG.debug("About to deprovision {}", keys);
@@ -466,7 +465,7 @@ public class DefaultRealmPullResultHandler
             finalize(unlink
                     ? MatchingRule.toEventName(MatchingRule.UNLINK)
                     : MatchingRule.toEventName(MatchingRule.LINK), Result.SUCCESS, null, null, delta);
-            return Collections.<ProvisioningReport>emptyList();
+            return List.of();
         }
 
         LOG.debug("About to link {}", keys);
@@ -514,7 +513,7 @@ public class DefaultRealmPullResultHandler
                         } else {
                             realm.add(profile.getTask().getResource());
                         }
-                        output = update(delta, Collections.singletonList(key), true);
+                        output = update(delta, List.of(key), true);
 
                         resultStatus = Result.SUCCESS;
 
@@ -551,7 +550,7 @@ public class DefaultRealmPullResultHandler
         if (!profile.getTask().isPerformDelete()) {
             LOG.debug("PullTask not configured for delete");
             finalize(ResourceOperation.DELETE.name().toLowerCase(), Result.SUCCESS, null, null, delta);
-            return Collections.<ProvisioningReport>emptyList();
+            return List.of();
         }
 
         LOG.debug("About to delete {}", keys);
@@ -589,7 +588,7 @@ public class DefaultRealmPullResultHandler
                             throw SyncopeClientException.build(ClientExceptionType.HasChildren);
                         }
 
-                        Set<String> adminRealms = Collections.singleton(realm.getFullPath());
+                        Set<String> adminRealms = Set.of(realm.getFullPath());
                         AnyCond keyCond = new AnyCond(AttributeCond.Type.ISNOTNULL);
                         keyCond.setSchema("key");
                         SearchCond allMatchingCond = SearchCond.getLeafCond(keyCond);
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultUserPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultUserPullResultHandler.java
index f16b77b..99cf3a5 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultUserPullResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultUserPullResultHandler.java
@@ -18,9 +18,10 @@
  */
 package org.apache.syncope.core.provisioning.java.pushpull;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.request.AnyCR;
 import org.apache.syncope.common.lib.request.AnyUR;
@@ -82,7 +83,7 @@ public class DefaultUserPullResultHandler extends AbstractPullResultHandler impl
         Boolean enabled = pullUtils.readEnabled(delta.getObject(), profile.getTask());
         Map.Entry<String, List<PropagationStatus>> created =
                 userProvisioningManager.create(userCR, true, enabled,
-                        Collections.singleton(profile.getTask().getResource().getKey()), true);
+                        Set.of(profile.getTask().getResource().getKey()), true);
 
         return getAnyTO(created.getKey());
     }
@@ -101,7 +102,7 @@ public class DefaultUserPullResultHandler extends AbstractPullResultHandler impl
                 userUR,
                 result,
                 enabled,
-                Collections.singleton(profile.getTask().getResource().getKey()),
+                Set.of(profile.getTask().getResource().getKey()),
                 true);
 
         return updated.getLeft();
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPMembershipPullActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPMembershipPullActions.java
index e2b2f2d..62c9972 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPMembershipPullActions.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPMembershipPullActions.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.provisioning.java.pushpull;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -113,7 +112,7 @@ public class LDAPMembershipPullActions extends SchedulingPullActions {
         }
 
         return membAttr == null || membAttr.getValue() == null
-                ? Collections.emptyList()
+                ? List.of()
                 : membAttr.getValue();
     }
 
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullUtils.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullUtils.java
index 2e2feb7..7f2be54 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullUtils.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullUtils.java
@@ -200,7 +200,7 @@ public class PullUtils {
             }
         }
         if (connObjectKey == null) {
-            return Collections.emptyList();
+            return List.of();
         }
 
         for (ItemTransformer transformer : MappingUtils.getItemTransformers(connObjectKeyItem.get())) {
@@ -355,7 +355,7 @@ public class PullUtils {
                     : findByConnObjectKey(syncDelta, provision, anyUtils);
         } catch (RuntimeException e) {
             LOG.error("Could not match {} with any existing {}", syncDelta, provision.getAnyType(), e);
-            return Collections.<String>emptyList();
+            return List.of();
         }
     }
 
@@ -381,14 +381,14 @@ public class PullUtils {
             }
         }
         if (connObjectKey == null) {
-            return Collections.emptyList();
+            return List.of();
         }
 
         for (ItemTransformer transformer : MappingUtils.getItemTransformers(connObjectKeyItem.get())) {
             List<Object> output = transformer.beforePull(
                     connObjectKeyItem.get(),
                     null,
-                    Collections.<Object>singletonList(connObjectKey));
+                    List.of(connObjectKey));
             if (output != null && !output.isEmpty()) {
                 connObjectKey = output.get(0).toString();
             }
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java
index 3389d2b..16996be 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java
@@ -19,11 +19,12 @@
 package org.apache.syncope.core.provisioning.java.pushpull;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.Set;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.MutablePair;
 import org.apache.syncope.common.lib.SyncopeConstants;
@@ -33,7 +34,6 @@ import org.apache.syncope.core.spring.ApplicationContextProvider;
 import org.apache.syncope.core.persistence.api.dao.AnyDAO;
 import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
 import org.apache.syncope.core.persistence.api.dao.RealmDAO;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
 import org.apache.syncope.core.persistence.api.entity.Any;
 import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
@@ -226,16 +226,16 @@ public class PushJobDelegate extends AbstractProvisioningJobDelegate<PushTask> {
                         ? anyDAO.getAllMatchingCond()
                         : SearchCondConverter.convert(filter);
                 int count = searchDAO.count(
-                        Collections.singleton(profile.getTask().getSourceRealm().getFullPath()),
+                        Set.of(profile.getTask().getSourceRealm().getFullPath()),
                         cond,
                         provision.getAnyType().getKind());
                 for (int page = 1; page <= (count / AnyDAO.DEFAULT_PAGE_SIZE) + 1 && !interrupt; page++) {
                     List<? extends Any<?>> anys = searchDAO.search(
-                            Collections.singleton(profile.getTask().getSourceRealm().getFullPath()),
+                            Set.of(profile.getTask().getSourceRealm().getFullPath()),
                             cond,
                             page,
                             AnyDAO.DEFAULT_PAGE_SIZE,
-                            Collections.<OrderByClause>emptyList(),
+                            List.of(),
                             provision.getAnyType().getKind());
                     doHandle(anys, handler, pushTask.getResource());
                 }
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushUtils.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushUtils.java
index 5b992bd..d726a07 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushUtils.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushUtils.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.provisioning.java.pushpull;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import org.apache.syncope.core.persistence.api.dao.PushCorrelationRule;
@@ -75,7 +74,7 @@ public class PushUtils {
                 .orElseGet(() -> findByConnObjectKey(connector, any, provision));
         } catch (RuntimeException e) {
             LOG.error("Could not match {} with any existing {}", any, provision.getObjectClass(), e);
-            return Collections.<ConnectorObject>emptyList();
+            return List.of();
         }
     }
 
@@ -135,6 +134,6 @@ public class PushUtils {
             }
         }
 
-        return obj == null ? Collections.emptyList() : Collections.singletonList(obj);
+        return obj == null ? List.of() : List.of(obj);
     }
 }
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePushJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePushJobDelegate.java
index 2911fd8..8bfbc0d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePushJobDelegate.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePushJobDelegate.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.provisioning.java.pushpull;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import org.apache.syncope.common.lib.to.PushTaskTO;
 import org.apache.syncope.common.lib.types.ConflictResolutionAction;
@@ -107,7 +106,7 @@ public class SinglePushJobDelegate extends PushJobDelegate implements SyncopeSin
             }
             handler.setProfile(profile);
 
-            doHandle(Arrays.asList(any), handler, pushTask.getResource());
+            doHandle(List.of(any), handler, pushTask.getResource());
 
             for (PushActions action : actions) {
                 action.afterAll(profile);
diff --git a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DummyConfParamOps.java b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DummyConfParamOps.java
index 13ef533..3448ef7 100644
--- a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DummyConfParamOps.java
+++ b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DummyConfParamOps.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.provisioning.java;
 
-import java.util.Collections;
 import java.util.Map;
 import org.apache.syncope.common.keymaster.client.api.ConfParamOps;
 import org.springframework.stereotype.Component;
@@ -28,7 +27,7 @@ public class DummyConfParamOps implements ConfParamOps {
 
     @Override
     public Map<String, Object> list(final String domain) {
-        return Collections.emptyMap();
+        return Map.of();
     }
 
     @Override
diff --git a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DummyDomainOps.java b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DummyDomainOps.java
index dfb4935..d000e20 100644
--- a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DummyDomainOps.java
+++ b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DummyDomainOps.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.provisioning.java;
 
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.common.keymaster.client.api.DomainOps;
 import org.apache.syncope.common.keymaster.client.api.model.Domain;
@@ -30,7 +29,7 @@ public class DummyDomainOps implements DomainOps {
 
     @Override
     public List<Domain> list() {
-        return Collections.emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DummyImplementationLookup.java b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DummyImplementationLookup.java
index c837be2..6132dcb 100644
--- a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DummyImplementationLookup.java
+++ b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/DummyImplementationLookup.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.provisioning.java;
 
-import java.util.Collections;
 import java.util.Set;
 import org.apache.syncope.common.lib.policy.AccountRuleConf;
 import org.apache.syncope.common.lib.policy.PasswordRuleConf;
@@ -47,12 +46,12 @@ public class DummyImplementationLookup implements ImplementationLookup {
 
     @Override
     public Set<String> getClassNames(final String type) {
-        return Collections.emptySet();
+        return Set.of();
     }
 
     @Override
     public Set<Class<?>> getJWTSSOProviderClasses() {
-        return Collections.emptySet();
+        return Set.of();
     }
 
     @Override
@@ -92,6 +91,6 @@ public class DummyImplementationLookup implements ImplementationLookup {
 
     @Override
     public Set<Class<?>> getAuditAppenderClasses() {
-        return Collections.emptySet();
+        return Set.of();
     }
 }
diff --git a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MailTemplateTest.java b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MailTemplateTest.java
index bcfcce5..db5d8a8 100644
--- a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MailTemplateTest.java
+++ b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/MailTemplateTest.java
@@ -25,7 +25,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import java.io.IOException;
 import java.io.StringWriter;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -112,7 +111,7 @@ public class MailTemplateTest extends AbstractTest {
 
         UserTO recipient = SerializationUtils.clone(user);
         recipient.getPlainAttr("email").get().getValues().set(0, "another@syncope.apache.org");
-        ctx.put("recipients", Collections.singletonList(recipient));
+        ctx.put("recipients", List.of(recipient));
 
         String htmlBody = evaluate(
                 mailTemplateDAO.find("optin").getHTMLTemplate(),
diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java
index 7c78073..a6f217f 100644
--- a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java
+++ b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java
@@ -20,7 +20,7 @@ package org.apache.syncope.core.spring.security;
 
 import java.util.Collection;
 import org.apache.syncope.common.lib.types.EntitlementsHolder;
-import java.util.Collections;
+
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -68,7 +68,7 @@ public final class AuthContextUtils {
                     collect(Collectors.toSet());
         }
 
-        return Collections.emptySet();
+        return Set.of();
     }
 
     public static Map<String, Set<String>> getAuthorizations() {
@@ -81,7 +81,7 @@ public final class AuthContextUtils {
                             SyncopeGrantedAuthority::getAuthority, SyncopeGrantedAuthority::getRealms));
         }
 
-        return Collections.emptyMap();
+        return Map.of();
     }
 
     public static String getDomain() {
diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
index 13adcd6..ee7dc80 100644
--- a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
+++ b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
@@ -18,8 +18,6 @@
  */
 package org.apache.syncope.core.spring.security;
 
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -81,7 +79,7 @@ public class AuthDataAccessor {
     protected static final Encryptor ENCRYPTOR = Encryptor.getInstance();
 
     protected static final Set<SyncopeGrantedAuthority> ANONYMOUS_AUTHORITIES =
-            Collections.singleton(new SyncopeGrantedAuthority(IdRepoEntitlement.ANONYMOUS));
+            Set.of(new SyncopeGrantedAuthority(IdRepoEntitlement.ANONYMOUS));
 
     protected static final String[] GROUP_OWNER_ENTITLEMENTS = new String[] {
         IdRepoEntitlement.GROUP_READ, IdRepoEntitlement.GROUP_UPDATE, IdRepoEntitlement.GROUP_DELETE
@@ -164,7 +162,7 @@ public class AuthDataAccessor {
     public Pair<User, Boolean> authenticate(final String domain, final Authentication authentication) {
         User user = null;
 
-        List<String> authAttrValues = Arrays.asList(confParamOps.get(domain,
+        List<String> authAttrValues = List.of(confParamOps.get(domain,
                 "authentication.attributes", new String[] { "username" }, String[].class));
         for (int i = 0; user == null && i < authAttrValues.size(); i++) {
             if ("username".equals(authAttrValues.get(i))) {
@@ -274,7 +272,7 @@ public class AuthDataAccessor {
             }
         }
 
-        return result == null ? Collections.emptySet() : result;
+        return result == null ? Set.of() : result;
     }
 
     protected Set<SyncopeGrantedAuthority> getAdminAuthorities() {
@@ -341,7 +339,7 @@ public class AuthDataAccessor {
         } else {
             User user = userDAO.findByUsername(username);
             if (user == null) {
-                authorities = Collections.emptySet();
+                authorities = Set.of();
             } else {
                 authorities = getUserAuthorities(user);
             }
@@ -375,7 +373,7 @@ public class AuthDataAccessor {
 
             User user = resolved.getLeft();
             username = user.getUsername();
-            authorities = resolved.getRight() == null ? Collections.emptySet() : resolved.getRight();
+            authorities = resolved.getRight() == null ? Set.of() : resolved.getRight();
             LOG.debug("JWT {} issued by {} resolved to User {} with authorities {}",
                     authentication.getClaims().getTokenId(),
                     authentication.getClaims().getIssuer(),
@@ -385,7 +383,7 @@ public class AuthDataAccessor {
                 throw new DisabledException("User " + username + " is suspended");
             }
 
-            List<String> authStatuses = Arrays.asList(confParamOps.get(authentication.getDetails().getDomain(),
+            List<String> authStatuses = List.of(confParamOps.get(authentication.getDetails().getDomain(),
                     "authentication.statuses", new String[] {}, String[].class));
             if (!authStatuses.contains(user.getStatus())) {
                 throw new DisabledException("User " + username + " not allowed to authenticate");
@@ -393,7 +391,7 @@ public class AuthDataAccessor {
 
             if (BooleanUtils.isTrue(user.isMustChangePassword())) {
                 LOG.debug("User {} must change password, resetting authorities", username);
-                authorities = Collections.singleton(
+                authorities = Set.of(
                         new SyncopeGrantedAuthority(IdRepoEntitlement.MUST_CHANGE_PASSWORD));
             }
         }
diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/security/SyncopeJWTSSOProvider.java b/core/spring/src/main/java/org/apache/syncope/core/spring/security/SyncopeJWTSSOProvider.java
index 279cd6f..d813370 100644
--- a/core/spring/src/main/java/org/apache/syncope/core/spring/security/SyncopeJWTSSOProvider.java
+++ b/core/spring/src/main/java/org/apache/syncope/core/spring/security/SyncopeJWTSSOProvider.java
@@ -19,7 +19,7 @@
 package org.apache.syncope.core.spring.security;
 
 import com.fasterxml.jackson.core.type.TypeReference;
-import java.util.Collections;
+
 import java.util.Set;
 import javax.annotation.Resource;
 import org.apache.commons.lang3.tuple.Pair;
@@ -84,7 +84,7 @@ public class SyncopeJWTSSOProvider implements JWTSSOProvider {
     @Override
     public Pair<User, Set<SyncopeGrantedAuthority>> resolve(final JwtClaims jwtClaims) {
         User user = userDAO.findByUsername(jwtClaims.getSubject());
-        Set<SyncopeGrantedAuthority> authorities = Collections.emptySet();
+        Set<SyncopeGrantedAuthority> authorities = Set.of();
         if (user != null) {
             AccessToken accessToken = accessTokenDAO.find(jwtClaims.getTokenId());
             if (accessToken != null && accessToken.getAuthorities() != null) {
diff --git a/core/spring/src/test/java/org/apache/syncope/core/spring/security/DummyImplementationLookup.java b/core/spring/src/test/java/org/apache/syncope/core/spring/security/DummyImplementationLookup.java
index 6c7061b..e997809 100644
--- a/core/spring/src/test/java/org/apache/syncope/core/spring/security/DummyImplementationLookup.java
+++ b/core/spring/src/test/java/org/apache/syncope/core/spring/security/DummyImplementationLookup.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.spring.security;
 
-import java.util.Collections;
 import java.util.Set;
 import org.apache.syncope.common.lib.policy.AccountRuleConf;
 import org.apache.syncope.common.lib.policy.PasswordRuleConf;
@@ -41,12 +40,12 @@ public class DummyImplementationLookup implements ImplementationLookup {
 
     @Override
     public Set<String> getClassNames(final String type) {
-        return Collections.emptySet();
+        return Set.of();
     }
 
     @Override
     public Set<Class<?>> getJWTSSOProviderClasses() {
-        return Collections.emptySet();
+        return Set.of();
     }
 
     @Override
@@ -86,6 +85,6 @@ public class DummyImplementationLookup implements ImplementationLookup {
 
     @Override
     public Set<Class<?>> getAuditAppenderClasses() {
-        return Collections.emptySet();
+        return Set.of();
     }
 }
diff --git a/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesDirectoryPanel.java b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesDirectoryPanel.java
index 4252367..232fb7a 100644
--- a/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesDirectoryPanel.java
+++ b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/panels/CamelRoutesDirectoryPanel.java
@@ -94,7 +94,7 @@ public class CamelRoutesDirectoryPanel extends DirectoryPanel<
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/rest/CamelRoutesRestClient.java b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/rest/CamelRoutesRestClient.java
index 8f3b5ef..8cbfe53 100644
--- a/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/rest/CamelRoutesRestClient.java
+++ b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/rest/CamelRoutesRestClient.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.rest;
 
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.common.lib.to.CamelMetrics;
@@ -33,7 +32,7 @@ public class CamelRoutesRestClient extends BaseRestClient {
     public List<CamelRouteTO> list(final AnyTypeKind anyTypeKind) {
         return isCamelEnabledFor(anyTypeKind)
                 ? getService(CamelRouteService.class).list(anyTypeKind)
-                : Collections.<CamelRouteTO>emptyList();
+                : List.of();
     }
 
     public CamelRouteTO read(final AnyTypeKind anyTypeKind, final String key) {
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelAnyObjectProvisioningManager.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelAnyObjectProvisioningManager.java
index a513955..88bdcac 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelAnyObjectProvisioningManager.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelAnyObjectProvisioningManager.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.provisioning.camel;
 
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -39,7 +38,7 @@ public class CamelAnyObjectProvisioningManager
 
     @Override
     public Pair<String, List<PropagationStatus>> create(final AnyObjectCR req, final boolean nullPriorityAsync) {
-        return create(req, Collections.<String>emptySet(), nullPriorityAsync);
+        return create(req, Set.of(), nullPriorityAsync);
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
@@ -69,7 +68,7 @@ public class CamelAnyObjectProvisioningManager
     public Pair<AnyObjectUR, List<PropagationStatus>> update(
             final AnyObjectUR anyUR, final boolean nullPriorityAsync) {
 
-        return update(anyUR, Collections.<String>emptySet(), nullPriorityAsync);
+        return update(anyUR, Set.of(), nullPriorityAsync);
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
@@ -97,7 +96,7 @@ public class CamelAnyObjectProvisioningManager
 
     @Override
     public List<PropagationStatus> delete(final String anyObjectObjectKey, final boolean nullPriorityAsync) {
-        return delete(anyObjectObjectKey, Collections.<String>emptySet(), nullPriorityAsync);
+        return delete(anyObjectObjectKey, Set.of(), nullPriorityAsync);
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java
index c66eeef..37fb5cf 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.provisioning.camel;
 
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -43,7 +42,7 @@ public class CamelGroupProvisioningManager
         PollingConsumer pollingConsumer = getConsumer("direct:createGroupPort");
 
         Map<String, Object> props = new HashMap<>();
-        props.put("excludedResources", Collections.<String>emptySet());
+        props.put("excludedResources", Set.of());
         props.put("nullPriorityAsync", nullPriorityAsync);
 
         sendMessage("direct:createGroup", req, props);
@@ -86,7 +85,7 @@ public class CamelGroupProvisioningManager
 
     @Override
     public Pair<GroupUR, List<PropagationStatus>> update(final GroupUR groupUR, final boolean nullPriorityAsync) {
-        return update(groupUR, Collections.<String>emptySet(), nullPriorityAsync);
+        return update(groupUR, Set.of(), nullPriorityAsync);
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
@@ -114,7 +113,7 @@ public class CamelGroupProvisioningManager
 
     @Override
     public List<PropagationStatus> delete(final String key, final boolean nullPriorityAsync) {
-        return delete(key, Collections.<String>emptySet(), nullPriorityAsync);
+        return delete(key, Set.of(), nullPriorityAsync);
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java
index a587bad..dbcda88 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.provisioning.camel;
 
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -47,7 +46,7 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
 
     @Override
     public Pair<String, List<PropagationStatus>> create(final UserCR req, final boolean nullPriorityAsync) {
-        return create(req, false, null, Collections.<String>emptySet(), nullPriorityAsync);
+        return create(req, false, null, Set.of(), nullPriorityAsync);
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
@@ -107,7 +106,7 @@ public class CamelUserProvisioningManager extends AbstractCamelProvisioningManag
 
     @Override
     public List<PropagationStatus> delete(final String key, final boolean nullPriorityAsync) {
-        return delete(key, Collections.<String>emptySet(), nullPriorityAsync);
+        return delete(key, Set.of(), nullPriorityAsync);
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/SyncopeCamelContext.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/SyncopeCamelContext.java
index 19f8fc2..640e85d 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/SyncopeCamelContext.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/SyncopeCamelContext.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.provisioning.camel;
 
 import java.nio.charset.StandardCharsets;
-import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.apache.camel.component.metrics.routepolicy.MetricsRoutePolicyFactory;
@@ -84,14 +83,14 @@ public class SyncopeCamelContext {
     public void updateContext(final String routeKey) {
         if (!getCamelContext().getRouteDefinitions().isEmpty()) {
             getCamelContext().getRouteDefinitions().remove(getCamelContext().getRouteDefinition(routeKey));
-            loadRouteDefinitions(Arrays.asList(routeDAO.find(routeKey).getContent()));
+            loadRouteDefinitions(List.of(routeDAO.find(routeKey).getContent()));
         }
     }
 
     public void restoreRoute(final String routeKey, final String routeContent) {
         try {
             getCamelContext().getRouteDefinitions().remove(getCamelContext().getRouteDefinition(routeKey));
-            loadRouteDefinitions(Arrays.asList(routeContent));
+            loadRouteDefinitions(List.of(routeContent));
         } catch (Exception e) {
             LOG.error("While restoring Camel route {}", routeKey, e);
             throw new CamelException(e);
diff --git a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchClientContext.java b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchClientContext.java
index 1d34495..0155caf 100644
--- a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchClientContext.java
+++ b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchClientContext.java
@@ -18,7 +18,8 @@
  */
 package org.apache.syncope.ext.elasticsearch.client;
 
-import java.util.Collections;
+import java.util.List;
+
 import org.apache.http.HttpHost;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.context.annotation.Bean;
@@ -31,7 +32,7 @@ public class ElasticsearchClientContext {
     @Bean
     public ElasticsearchClientFactoryBean elasticsearchClientFactoryBean() {
         return new ElasticsearchClientFactoryBean(
-                Collections.singletonList(new HttpHost("localhost", 9200, "http")));
+                List.of(new HttpHost("localhost", 9200, "http")));
     }
 
     @ConditionalOnMissingBean
diff --git a/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAO.java b/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAO.java
index e1916e0..f463211 100644
--- a/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAO.java
+++ b/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAO.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.persistence.jpa.dao;
 import java.io.IOException;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -145,7 +144,7 @@ public class ElasticsearchAnySearchDAO extends AbstractAnySearchDAO {
 
     @Override
     protected int doCount(final Set<String> adminRealms, final SearchCond cond, final AnyTypeKind kind) {
-        SearchRequest request = searchRequest(adminRealms, cond, kind, 0, 0, Collections.emptyList());
+        SearchRequest request = searchRequest(adminRealms, cond, kind, 0, 0, List.of());
         try {
             return (int) client.search(request, RequestOptions.DEFAULT).getHits().getTotalHits().value;
         } catch (IOException e) {
@@ -211,7 +210,7 @@ public class ElasticsearchAnySearchDAO extends AbstractAnySearchDAO {
         }
 
         return ArrayUtils.isEmpty(esResult)
-                ? Collections.emptyList()
+                ? List.of()
                 : buildResult(Stream.of(esResult).map(SearchHit::getId).collect(Collectors.toList()), kind);
     }
 
diff --git a/ext/flowable/client-common-ui/src/main/java/org/apache/syncope/ext/client/common/ui/panels/UserRequestFormPanel.java b/ext/flowable/client-common-ui/src/main/java/org/apache/syncope/ext/client/common/ui/panels/UserRequestFormPanel.java
index 11d6b2a..e19b251 100644
--- a/ext/flowable/client-common-ui/src/main/java/org/apache/syncope/ext/client/common/ui/panels/UserRequestFormPanel.java
+++ b/ext/flowable/client-common-ui/src/main/java/org/apache/syncope/ext/client/common/ui/panels/UserRequestFormPanel.java
@@ -20,7 +20,6 @@ package org.apache.syncope.ext.client.common.ui.panels;
 
 import java.text.ParseException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
@@ -102,7 +101,7 @@ public abstract class UserRequestFormPanel extends Panel {
                                 prop.setValue(String.valueOf(object.equalsIgnoreCase("yes")));
                             }
 
-                        }, false).setChoices(Arrays.asList(new String[] { "Yes", "No" }));
+                        }, false).setChoices(List.of("Yes", "No"));
                         break;
 
                     case Date:
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/BpmnProcessDirectoryPanel.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/BpmnProcessDirectoryPanel.java
index 7dc2cdb..17c040e 100644
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/BpmnProcessDirectoryPanel.java
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/BpmnProcessDirectoryPanel.java
@@ -284,7 +284,7 @@ public class BpmnProcessDirectoryPanel extends DirectoryPanel<
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.emptyList();
+        return List.of();
     }
 
     public abstract static class Builder
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestDirectoryPanel.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestDirectoryPanel.java
index 428a641..f6a7833 100644
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestDirectoryPanel.java
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestDirectoryPanel.java
@@ -21,7 +21,6 @@ package org.apache.syncope.client.console.panels;
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
@@ -121,7 +120,7 @@ public class UserRequestDirectoryPanel
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     protected static class UserRequestProvider extends DirectoryDataProvider<UserRequest> {
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java
index e68ccda..d9a8720 100644
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java
@@ -22,7 +22,6 @@ import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
@@ -249,7 +248,7 @@ public class UserRequestFormDirectoryPanel
                         previousUserTO,
                         newUserTO,
                         new AnyTypeRestClient().read(AnyTypeKind.USER.name()).getClasses(),
-                        FormLayoutInfoUtils.fetch(Collections.singletonList(AnyTypeKind.USER.name())).getLeft(),
+                        FormLayoutInfoUtils.fetch(List.of(AnyTypeKind.USER.name())).getLeft(),
                         pageRef
                 ).build(BaseModal.CONTENT_ID, AjaxWizard.Mode.EDIT));
 
@@ -316,7 +315,7 @@ public class UserRequestFormDirectoryPanel
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     private void claimForm(final String taskId) {
diff --git a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/WorkflowFlowableContext.java b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/WorkflowFlowableContext.java
index 138a89c..dec4972 100644
--- a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/WorkflowFlowableContext.java
+++ b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/WorkflowFlowableContext.java
@@ -18,7 +18,8 @@
  */
 package org.apache.syncope.core.flowable;
 
-import java.util.Arrays;
+import java.util.List;
+
 import org.apache.syncope.core.flowable.impl.FlowableBpmnProcessManager;
 import org.apache.syncope.core.flowable.impl.FlowableUserRequestHandler;
 import org.apache.syncope.core.flowable.impl.FlowableWorkflowUtils;
@@ -129,7 +130,7 @@ public class WorkflowFlowableContext {
         conf.setJpaCloseEntityManager(false);
         conf.setHistoryLevel(historyLevel);
         conf.setIdmEngineConfigurator(syncopeIdmEngineConfigurator());
-        conf.setCustomPreVariableTypes(Arrays.asList(syncopeEntitiesVariableType()));
+        conf.setCustomPreVariableTypes(List.of(syncopeEntitiesVariableType()));
         conf.setFormHandlerHelper(syncopeFormHandlerHelper());
         conf.setIdGenerator(idGenerator());
         return conf;
diff --git a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserWorkflowAdapter.java b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserWorkflowAdapter.java
index f54a244..8ad7e8c 100644
--- a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserWorkflowAdapter.java
+++ b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/impl/FlowableUserWorkflowAdapter.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.flowable.impl;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -281,7 +280,7 @@ public class FlowableUserWorkflowAdapter extends AbstractUserWorkflowAdapter imp
         String procInstID = FlowableRuntimeUtils.getWFProcInstID(engine, user.getKey());
 
         Set<String> performedTasks =
-                doExecuteNextTask(procInstID, user, Collections.singletonMap(FlowableRuntimeUtils.TASK, "suspend"));
+                doExecuteNextTask(procInstID, user, Map.of(FlowableRuntimeUtils.TASK, "suspend"));
         FlowableRuntimeUtils.updateStatus(engine, procInstID, user);
         User updated = userDAO.save(user);
 
@@ -297,7 +296,7 @@ public class FlowableUserWorkflowAdapter extends AbstractUserWorkflowAdapter imp
         String procInstID = FlowableRuntimeUtils.getWFProcInstID(engine, user.getKey());
 
         Set<String> performedTasks =
-                doExecuteNextTask(procInstID, user, Collections.singletonMap(FlowableRuntimeUtils.TASK, "reactivate"));
+                doExecuteNextTask(procInstID, user, Map.of(FlowableRuntimeUtils.TASK, "reactivate"));
         FlowableRuntimeUtils.updateStatus(engine, procInstID, user);
 
         User updated = userDAO.save(user);
@@ -364,7 +363,7 @@ public class FlowableUserWorkflowAdapter extends AbstractUserWorkflowAdapter imp
     protected void doDelete(final User user) {
         String procInstID = FlowableRuntimeUtils.getWFProcInstID(engine, user.getKey());
 
-        doExecuteNextTask(procInstID, user, Collections.singletonMap(FlowableRuntimeUtils.TASK, "delete"));
+        doExecuteNextTask(procInstID, user, Map.of(FlowableRuntimeUtils.TASK, "delete"));
 
         PropagationByResource propByRes = new PropagationByResource();
         propByRes.set(ResourceOperation.DELETE, userDAO.findAllResourceKeys(user.getKey()));
diff --git a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/support/DomainProcessEngineFactoryBean.java b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/support/DomainProcessEngineFactoryBean.java
index c245c4d..735c59e 100644
--- a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/support/DomainProcessEngineFactoryBean.java
+++ b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/support/DomainProcessEngineFactoryBean.java
@@ -18,8 +18,8 @@
  */
 package org.apache.syncope.core.flowable.support;
 
-import java.util.Arrays;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import javax.sql.DataSource;
 import org.apache.syncope.core.persistence.api.DomainHolder;
@@ -87,7 +87,7 @@ public class DomainProcessEngineFactoryBean
                     ctx.getBean(SpringIdmEngineConfiguration.class));
         }
         conf.setEnableSafeBpmnXml(true);
-        conf.setCustomFormTypes(Arrays.asList(new DropdownFormType(null)));
+        conf.setCustomFormTypes(List.of(new DropdownFormType(null)));
 
         return conf.buildProcessEngine();
     }
diff --git a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/support/SyncopeGroupQueryImpl.java b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/support/SyncopeGroupQueryImpl.java
index fdbf8b7..afbae8d 100644
--- a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/support/SyncopeGroupQueryImpl.java
+++ b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/support/SyncopeGroupQueryImpl.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.flowable.support;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
@@ -52,9 +51,9 @@ public class SyncopeGroupQueryImpl extends GroupQueryImpl {
         if (id != null) {
             org.apache.syncope.core.persistence.api.entity.group.Group syncopeGroup = groupDAO.findByName(id);
             if (syncopeGroup == null) {
-                result = Collections.emptyList();
+                result = List.of();
             } else {
-                result = Collections.singletonList(fromSyncopeGroup(syncopeGroup.getName()));
+                result = List.of(fromSyncopeGroup(syncopeGroup.getName()));
             }
         } else if (userId != null) {
             result = userDAO.findAllGroupNames(userDAO.findByUsername(userId)).stream().
diff --git a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/support/SyncopeUserQueryImpl.java b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/support/SyncopeUserQueryImpl.java
index b2d3fe3..6d93caf 100644
--- a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/support/SyncopeUserQueryImpl.java
+++ b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/support/SyncopeUserQueryImpl.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.flowable.support;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
 import org.apache.syncope.core.persistence.api.dao.UserDAO;
@@ -54,14 +53,14 @@ public class SyncopeUserQueryImpl extends UserQueryImpl {
         if (id != null) {
             org.apache.syncope.core.persistence.api.entity.user.User user = userDAO.findByUsername(id);
             if (user == null) {
-                result = Collections.<User>emptyList();
+                result = List.of();
             } else if (groupId == null || userDAO.findAllGroupNames(user).contains(groupId)) {
-                result = Collections.singletonList(fromSyncopeUser(user));
+                result = List.of(fromSyncopeUser(user));
             }
         } else if (groupId != null) {
             Group group = groupDAO.findByName(groupId);
             if (group == null) {
-                result = Collections.<User>emptyList();
+                result = List.of();
             } else {
                 result = new ArrayList<>();
                 List<UMembership> memberships = groupDAO.findUMemberships(group);
diff --git a/ext/oidcclient/client-console/src/main/java/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel.java b/ext/oidcclient/client-console/src/main/java/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel.java
index 7f850d1..fa0d3c9 100644
--- a/ext/oidcclient/client-console/src/main/java/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel.java
+++ b/ext/oidcclient/client-console/src/main/java/org/apache/syncope/client/console/panels/OIDCProvidersDirectoryPanel.java
@@ -161,7 +161,7 @@ public class OIDCProvidersDirectoryPanel extends DirectoryPanel<
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
 
     }
 
diff --git a/ext/oidcclient/logic/src/main/java/org/apache/syncope/core/logic/OIDCClientLogic.java b/ext/oidcclient/logic/src/main/java/org/apache/syncope/core/logic/OIDCClientLogic.java
index 36ccecf..707a727 100644
--- a/ext/oidcclient/logic/src/main/java/org/apache/syncope/core/logic/OIDCClientLogic.java
+++ b/ext/oidcclient/logic/src/main/java/org/apache/syncope/core/logic/OIDCClientLogic.java
@@ -22,8 +22,6 @@ import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -302,7 +300,7 @@ public class OIDCClientLogic extends AbstractTransactionalLogic<EntityTO> {
         }
 
         final List<String> matchingUsers = keyValue == null
-                ? Collections.<String>emptyList()
+                ? List.of()
                 : userManager.findMatchingUser(keyValue, op.getConnObjectKeyItem().get());
         LOG.debug("Found {} matching users for {}", matchingUsers.size(), keyValue);
 
@@ -373,7 +371,7 @@ public class OIDCClientLogic extends AbstractTransactionalLogic<EntityTO> {
     }
 
     private TokenEndpointResponse getOIDCTokens(final String url, final String body) throws IOException {
-        Response response = WebClient.create(url, Arrays.asList(new JacksonJsonProvider())).
+        Response response = WebClient.create(url, List.of(new JacksonJsonProvider())).
                 type(MediaType.APPLICATION_FORM_URLENCODED).accept(MediaType.APPLICATION_JSON).
                 post(body);
         if (response.getStatus() != Response.Status.OK.getStatusCode()) {
@@ -393,7 +391,7 @@ public class OIDCClientLogic extends AbstractTransactionalLogic<EntityTO> {
         IdTokenReader idTokenReader = new IdTokenReader();
         idTokenReader.setClockOffset(10);
         idTokenReader.setIssuerId(op.getIssuer());
-        idTokenReader.setJwkSetClient(WebClient.create(op.getJwksUri(), Arrays.asList(new JsonWebKeysProvider())).
+        idTokenReader.setJwkSetClient(WebClient.create(op.getJwksUri(), List.of(new JsonWebKeysProvider())).
                 accept(MediaType.APPLICATION_JSON));
         IdToken idToken;
         try {
@@ -413,7 +411,7 @@ public class OIDCClientLogic extends AbstractTransactionalLogic<EntityTO> {
             final IdToken idToken,
             final Consumer consumer) {
 
-        WebClient userInfoServiceClient = WebClient.create(endpoint, Arrays.asList(new JsonMapObjectProvider())).
+        WebClient userInfoServiceClient = WebClient.create(endpoint, List.of(new JsonMapObjectProvider())).
                 accept(MediaType.APPLICATION_JSON);
         ClientAccessToken clientAccessToken =
                 new ClientAccessToken(OAuthConstants.BEARER_AUTHORIZATION_SCHEME, accessToken);
diff --git a/ext/oidcclient/logic/src/main/java/org/apache/syncope/core/logic/OIDCProviderLogic.java b/ext/oidcclient/logic/src/main/java/org/apache/syncope/core/logic/OIDCProviderLogic.java
index 496618e..8326c9b 100644
--- a/ext/oidcclient/logic/src/main/java/org/apache/syncope/core/logic/OIDCProviderLogic.java
+++ b/ext/oidcclient/logic/src/main/java/org/apache/syncope/core/logic/OIDCProviderLogic.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.logic;
 
 import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
 import java.lang.reflect.Method;
-import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 import javax.ws.rs.ClientErrorException;
@@ -53,7 +52,7 @@ public class OIDCProviderLogic extends AbstractTransactionalLogic<OIDCProviderTO
 
     private OIDCProviderDiscoveryDocument getDiscoveryDocument(final String issuer) {
         String discoveryDocumentURL = issuer + "/.well-known/openid-configuration";
-        WebClient client = WebClient.create(discoveryDocumentURL, Arrays.asList(new JacksonJsonProvider())).
+        WebClient client = WebClient.create(discoveryDocumentURL, List.of(new JacksonJsonProvider())).
                 accept(MediaType.APPLICATION_JSON);
         try {
             return client.get(OIDCProviderDiscoveryDocument.class);
diff --git a/ext/saml2sp/client-console/src/main/java/org/apache/syncope/client/console/panels/SAML2IdPsDirectoryPanel.java b/ext/saml2sp/client-console/src/main/java/org/apache/syncope/client/console/panels/SAML2IdPsDirectoryPanel.java
index 9c81f1e..a65a882 100644
--- a/ext/saml2sp/client-console/src/main/java/org/apache/syncope/client/console/panels/SAML2IdPsDirectoryPanel.java
+++ b/ext/saml2sp/client-console/src/main/java/org/apache/syncope/client/console/panels/SAML2IdPsDirectoryPanel.java
@@ -179,7 +179,7 @@ public class SAML2IdPsDirectoryPanel extends DirectoryPanel<
 
     @Override
     protected Collection<ActionLink.ActionType> getBatches() {
-        return Collections.<ActionLink.ActionType>emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/ext/saml2sp/client-console/src/main/java/org/apache/syncope/client/console/wizards/SAML2IdPWizardBuilder.java b/ext/saml2sp/client-console/src/main/java/org/apache/syncope/client/console/wizards/SAML2IdPWizardBuilder.java
index aca0f5e..c1104fa 100644
--- a/ext/saml2sp/client-console/src/main/java/org/apache/syncope/client/console/wizards/SAML2IdPWizardBuilder.java
+++ b/ext/saml2sp/client-console/src/main/java/org/apache/syncope/client/console/wizards/SAML2IdPWizardBuilder.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.console.wizards;
 
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.Callable;
 import java.util.concurrent.Future;
@@ -174,7 +173,7 @@ public class SAML2IdPWizardBuilder extends AjaxWizardBuilder<SAML2IdPTO> {
             AjaxDropDownChoicePanel<SAML2BindingType> bindingType =
                     new AjaxDropDownChoicePanel<>("field", "bindingType",
                             new PropertyModel<>(idpTO, "bindingType"), false);
-            bindingType.setChoices(Arrays.asList(SAML2BindingType.values()));
+            bindingType.setChoices(List.of(SAML2BindingType.values()));
             fields.add(bindingType);
 
             AjaxTextFieldPanel requestedAuthnContextProvider = new AjaxTextFieldPanel(
diff --git a/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java b/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java
index 1378ee7..d2be07d 100644
--- a/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java
+++ b/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java
@@ -23,7 +23,6 @@ import java.io.OutputStreamWriter;
 import java.lang.reflect.Method;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
-import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -484,7 +483,7 @@ public class SAML2SPLogic extends AbstractSAML2Logic<EntityTO> {
         }
 
         final List<String> matchingUsers = keyValue == null
-                ? Collections.<String>emptyList()
+                ? List.of()
                 : userManager.findMatchingUser(keyValue, idp.getKey());
         LOG.debug("Found {} matching users for {}", matchingUsers.size(), keyValue);
 
diff --git a/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2UserManager.java b/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2UserManager.java
index 27233ad..0a6b857 100644
--- a/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2UserManager.java
+++ b/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2UserManager.java
@@ -196,7 +196,7 @@ public class SAML2UserManager {
         }
 
         idp.getItems().forEach(item -> {
-            List<String> values = Collections.emptyList();
+            List<String> values = List.of();
             Optional<Attr> samlAttr = responseTO.getAttr(item.getExtAttrName());
             if (samlAttr.isPresent() && !samlAttr.get().getValues().isEmpty()) {
                 values = samlAttr.get().getValues();
diff --git a/ext/scimv2/client-console/src/main/java/org/apache/syncope/client/console/panels/SCIMConfUserPanel.java b/ext/scimv2/client-console/src/main/java/org/apache/syncope/client/console/panels/SCIMConfUserPanel.java
index 94d6723..6e2ffbd 100644
--- a/ext/scimv2/client-console/src/main/java/org/apache/syncope/client/console/panels/SCIMConfUserPanel.java
+++ b/ext/scimv2/client-console/src/main/java/org/apache/syncope/client/console/panels/SCIMConfUserPanel.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.panels;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.client.console.wicket.markup.html.form.MultiFieldPanel;
@@ -524,7 +523,7 @@ public class SCIMConfUserPanel extends SCIMConfTabPanel {
             }
 
         });
-        primaryPanel.setChoices(Arrays.asList("true", "false"));
+        primaryPanel.setChoices(List.of("true", "false"));
 
         panelList.add(displayPanel);
         panelList.add(valuePanel);
@@ -648,7 +647,7 @@ public class SCIMConfUserPanel extends SCIMConfTabPanel {
             }
 
         });
-        addressPrimaryPanel.setChoices(Arrays.asList("true", "false"));
+        addressPrimaryPanel.setChoices(List.of("true", "false"));
 
         panelList.add(addressCountryPanel);
         panelList.add(addressFormattedPanel);
diff --git a/ext/scimv2/logic/src/main/java/org/apache/syncope/core/logic/SCIMDataBinder.java b/ext/scimv2/logic/src/main/java/org/apache/syncope/core/logic/SCIMDataBinder.java
index 1277af3..06493bd 100644
--- a/ext/scimv2/logic/src/main/java/org/apache/syncope/core/logic/SCIMDataBinder.java
+++ b/ext/scimv2/logic/src/main/java/org/apache/syncope/core/logic/SCIMDataBinder.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.logic;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -39,7 +38,6 @@ import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.core.logic.scim.SCIMConfManager;
 import org.apache.syncope.core.persistence.api.dao.AnyDAO;
 import org.apache.syncope.core.persistence.api.dao.search.MembershipCond;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
 import org.apache.syncope.core.spring.security.AuthDataAccessor;
 import org.apache.syncope.ext.scimv2.api.BadRequestException;
@@ -67,12 +65,12 @@ public class SCIMDataBinder {
 
     protected static final Logger LOG = LoggerFactory.getLogger(SCIMDataBinder.class);
 
-    private static final List<String> USER_SCHEMAS = Collections.singletonList(Resource.User.schema());
+    private static final List<String> USER_SCHEMAS = List.of(Resource.User.schema());
 
     private static final List<String> ENTERPRISE_USER_SCHEMAS =
             List.of(Resource.User.schema(), Resource.EnterpriseUser.schema());
 
-    private static final List<String> GROUP_SCHEMAS = Collections.singletonList(Resource.Group.schema());
+    private static final List<String> GROUP_SCHEMAS = List.of(Resource.Group.schema());
 
     @Autowired
     private SCIMConfManager confManager;
@@ -637,7 +635,7 @@ public class SCIMDataBinder {
 
         if (output(attributes, excludedAttributes, "members")) {
             int count = userLogic.search(searchCond,
-                    1, 1, Collections.<OrderByClause>emptyList(),
+                    1, 1, List.of(),
                     SyncopeConstants.ROOT_REALM, false).getLeft();
 
             for (int page = 1; page <= (count / AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) {
@@ -645,7 +643,7 @@ public class SCIMDataBinder {
                         searchCond,
                         page,
                         AnyDAO.DEFAULT_PAGE_SIZE,
-                        Collections.<OrderByClause>emptyList(),
+                        List.of(),
                         SyncopeConstants.ROOT_REALM,
                         false).
                         getRight();
diff --git a/ext/scimv2/logic/src/main/java/org/apache/syncope/core/logic/SCIMLogic.java b/ext/scimv2/logic/src/main/java/org/apache/syncope/core/logic/SCIMLogic.java
index 8ddfcf7..3eaf297 100644
--- a/ext/scimv2/logic/src/main/java/org/apache/syncope/core/logic/SCIMLogic.java
+++ b/ext/scimv2/logic/src/main/java/org/apache/syncope/core/logic/SCIMLogic.java
@@ -24,7 +24,6 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
 import java.io.IOException;
 import java.lang.reflect.Method;
 import java.net.URI;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -147,7 +146,7 @@ public class SCIMLogic extends AbstractLogic<EntityTO> {
             }
         }
 
-        return Arrays.asList(USER, GROUP);
+        return List.of(USER, GROUP);
     }
 
     @PreAuthorize("isAuthenticated()")
diff --git a/ext/scimv2/logic/src/main/java/org/apache/syncope/core/logic/scim/SearchCondVisitor.java b/ext/scimv2/logic/src/main/java/org/apache/syncope/core/logic/scim/SearchCondVisitor.java
index 02505f9..5a27997 100644
--- a/ext/scimv2/logic/src/main/java/org/apache/syncope/core/logic/scim/SearchCondVisitor.java
+++ b/ext/scimv2/logic/src/main/java/org/apache/syncope/core/logic/scim/SearchCondVisitor.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.logic.scim;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -38,7 +37,7 @@ import org.apache.syncope.ext.scimv2.api.type.Resource;
  */
 public class SearchCondVisitor extends SCIMFilterBaseVisitor<SearchCond> {
 
-    private static final List<String> MULTIVALUE = Arrays.asList(
+    private static final List<String> MULTIVALUE = List.of(
             "emails", "phoneNumbers", "ims", "photos", "addresses");
 
     private final Resource resource;
diff --git a/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/ListResponse.java b/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/ListResponse.java
index d20f50a..06c69cb 100644
--- a/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/ListResponse.java
+++ b/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/ListResponse.java
@@ -21,7 +21,6 @@ package org.apache.syncope.ext.scimv2.api.data;
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import org.apache.syncope.ext.scimv2.api.type.Resource;
 
@@ -29,7 +28,7 @@ public class ListResponse<R extends SCIMResource> extends SCIMBean {
 
     private static final long serialVersionUID = -776611610457583160L;
 
-    private final List<String> schemas = Arrays.asList(Resource.ListResponse.schema());
+    private final List<String> schemas = List.of(Resource.ListResponse.schema());
 
     private final int totalResults;
 
diff --git a/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/ResourceType.java b/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/ResourceType.java
index 19dceac..feb2714 100644
--- a/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/ResourceType.java
+++ b/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/ResourceType.java
@@ -21,7 +21,6 @@ package org.apache.syncope.ext.scimv2.api.data;
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import org.apache.syncope.ext.scimv2.api.type.Resource;
 
@@ -29,7 +28,7 @@ public class ResourceType extends SCIMBean {
 
     private static final long serialVersionUID = -6559584102333757279L;
 
-    private final List<String> schemas = Arrays.asList(Resource.ResourceType.schema());
+    private final List<String> schemas = List.of(Resource.ResourceType.schema());
 
     private final String id;
 
diff --git a/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/SCIMError.java b/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/SCIMError.java
index cf1813f..231cbce 100644
--- a/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/SCIMError.java
+++ b/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/SCIMError.java
@@ -23,7 +23,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat.Shape;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
-import java.util.Arrays;
+
 import java.util.List;
 import javax.ws.rs.core.Response;
 import org.apache.syncope.ext.scimv2.api.BadRequestException;
@@ -35,7 +35,7 @@ public class SCIMError extends SCIMBean {
 
     private static final long serialVersionUID = -8836902509266522394L;
 
-    private final List<String> schemas = Arrays.asList(Resource.Error.schema());
+    private final List<String> schemas = List.of(Resource.Error.schema());
 
     private ErrorType scimType;
 
diff --git a/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/SCIMGroup.java b/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/SCIMGroup.java
index 8ae4545..e2af957 100644
--- a/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/SCIMGroup.java
+++ b/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/SCIMGroup.java
@@ -22,7 +22,6 @@ import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.ext.scimv2.api.type.Resource;
 
@@ -41,7 +40,7 @@ public class SCIMGroup extends SCIMResource {
             @JsonProperty("meta") final Meta meta,
             @JsonProperty("displayName") final String displayName) {
 
-        super(id, Collections.singletonList(Resource.Group.schema()), meta);
+        super(id, List.of(Resource.Group.schema()), meta);
         this.displayName = displayName;
     }
 
diff --git a/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/SCIMResource.java b/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/SCIMResource.java
index bbd2911..d9bdccc 100644
--- a/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/SCIMResource.java
+++ b/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/SCIMResource.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.ext.scimv2.api.data;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
@@ -36,7 +35,7 @@ public abstract class SCIMResource extends SCIMBean {
 
     public SCIMResource(final String id, final List<String> schemas, final Meta meta) {
         this.id = id;
-        this.schemas = Optional.ofNullable(schemas).orElse(Collections.<String>emptyList());
+        this.schemas = Optional.ofNullable(schemas).orElse(List.of());
         this.meta = meta;
     }
 
diff --git a/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/SCIMSearchRequest.java b/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/SCIMSearchRequest.java
index 63fa3bc..576667c 100644
--- a/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/SCIMSearchRequest.java
+++ b/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/SCIMSearchRequest.java
@@ -21,7 +21,6 @@ package org.apache.syncope.ext.scimv2.api.data;
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
 
@@ -32,7 +31,7 @@ public class SCIMSearchRequest extends SCIMBean {
 
     private static final long serialVersionUID = 5759362928661983543L;
 
-    private final List<String> schemas = Arrays.asList(Resource.SearchRequest.schema());
+    private final List<String> schemas = List.of(Resource.SearchRequest.schema());
 
     private final List<String> attributes = new ArrayList<>();
 
diff --git a/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/ServiceProviderConfig.java b/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/ServiceProviderConfig.java
index 75eec0a..a65775d 100644
--- a/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/ServiceProviderConfig.java
+++ b/ext/scimv2/scim-rest-api/src/main/java/org/apache/syncope/ext/scimv2/api/data/ServiceProviderConfig.java
@@ -22,7 +22,6 @@ import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import org.apache.syncope.ext.scimv2.api.type.Resource;
 
@@ -32,7 +31,7 @@ public class ServiceProviderConfig extends SCIMBean {
 
     private static final long serialVersionUID = 1027738509789460252L;
 
-    private final List<String> schemas = Arrays.asList(Resource.ServiceProviderConfig.schema());
+    private final List<String> schemas = List.of(Resource.ServiceProviderConfig.schema());
 
     private final Meta meta;
 
diff --git a/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/RESTSCIMCXFContext.java b/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/RESTSCIMCXFContext.java
index 4a55781..4f8e2f5 100644
--- a/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/RESTSCIMCXFContext.java
+++ b/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/RESTSCIMCXFContext.java
@@ -18,8 +18,9 @@
  */
 package org.apache.syncope.ext.scimv2.cxf;
 
-import java.util.Arrays;
-import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
 import javax.annotation.Resource;
 import org.apache.cxf.Bus;
 import org.apache.cxf.endpoint.Server;
@@ -83,20 +84,20 @@ public class RESTSCIMCXFContext {
         scimv2Container.setBus(bus);
         scimv2Container.setAddress("/scim");
         scimv2Container.setStaticSubresourceResolution(true);
-        scimv2Container.setBasePackages(Arrays.asList(
+        scimv2Container.setBasePackages(List.of(
                 "org.apache.syncope.ext.scimv2.api.service",
                 "org.apache.syncope.ext.scimv2.cxf.service"));
-        scimv2Container.setProperties(Collections.singletonMap("convert.wadl.resources.to.dom", "false"));
+        scimv2Container.setProperties(Map.of("convert.wadl.resources.to.dom", "false"));
 
-        scimv2Container.setInInterceptors(Arrays.asList(
+        scimv2Container.setInInterceptors(List.of(
                 ctx.getBean(GZIPInInterceptor.class),
                 ctx.getBean(JAXRSBeanValidationInInterceptor.class)));
 
-        scimv2Container.setOutInterceptors(Arrays.asList(
+        scimv2Container.setOutInterceptors(List.of(
                 ctx.getBean(GZIPOutInterceptor.class),
                 ctx.getBean(JAXRSBeanValidationOutInterceptor.class)));
 
-        scimv2Container.setProviders(Arrays.asList(
+        scimv2Container.setProviders(List.of(
                 scimJacksonJsonProvider(),
                 scimExceptionMapper(),
                 scimAddETagFilter(),
diff --git a/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/service/AbstractService.java b/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/service/AbstractService.java
index 6ab1e8d..e9e32aa 100644
--- a/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/service/AbstractService.java
+++ b/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/service/AbstractService.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.ext.scimv2.cxf.service;
 
-import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import javax.ws.rs.core.Context;
@@ -203,14 +202,14 @@ abstract class AbstractService<R extends SCIMResource> {
 
         List<OrderByClause> sort;
         if (request.getSortBy() == null) {
-            sort = Collections.<OrderByClause>emptyList();
+            sort = List.of();
         } else {
             OrderByClause clause = new OrderByClause();
             clause.setField(visitor.createAttributeCond(request.getSortBy()).getSchema());
             clause.setDirection(request.getSortOrder() == null || request.getSortOrder() == SortOrder.ascending
                     ? OrderByClause.Direction.ASC
                     : OrderByClause.Direction.DESC);
-            sort = Collections.singletonList(clause);
+            sort = List.of(clause);
         }
 
         Pair<Integer, ? extends List<? extends AnyTO>> result = anyLogic(type).search(
diff --git a/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/service/GroupServiceImpl.java b/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/service/GroupServiceImpl.java
index cd7ceb3..db163f4 100644
--- a/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/service/GroupServiceImpl.java
+++ b/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/service/GroupServiceImpl.java
@@ -18,9 +18,8 @@
  */
 package org.apache.syncope.ext.scimv2.cxf.service;
 
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 import javax.ws.rs.core.Response;
@@ -37,7 +36,6 @@ import org.apache.syncope.common.lib.to.ProvisioningResult;
 import org.apache.syncope.common.lib.types.PatchOperation;
 import org.apache.syncope.core.persistence.api.dao.AnyDAO;
 import org.apache.syncope.core.persistence.api.dao.search.MembershipCond;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
 import org.apache.syncope.ext.scimv2.api.BadRequestException;
 import org.apache.syncope.ext.scimv2.api.data.ListResponse;
@@ -73,8 +71,8 @@ public class GroupServiceImpl extends AbstractService<SCIMGroup> implements Grou
                 binder().toSCIMGroup(
                         result.getEntity(),
                         uriInfo.getAbsolutePathBuilder().path(result.getEntity().getKey()).build().toASCIIString(),
-                        Collections.<String>emptyList(),
-                        Collections.<String>emptyList()));
+                        List.of(),
+                        List.of()));
     }
 
     @Override
@@ -85,8 +83,8 @@ public class GroupServiceImpl extends AbstractService<SCIMGroup> implements Grou
         return binder().toSCIMGroup(
                 groupLogic().read(id),
                 uriInfo.getAbsolutePathBuilder().build().toASCIIString(),
-                Arrays.asList(ArrayUtils.nullToEmpty(StringUtils.split(attributes, ','))),
-                Arrays.asList(ArrayUtils.nullToEmpty(StringUtils.split(excludedAttributes, ','))));
+                List.of(ArrayUtils.nullToEmpty(StringUtils.split(attributes, ','))),
+                List.of(ArrayUtils.nullToEmpty(StringUtils.split(excludedAttributes, ','))));
     }
 
     @Override
@@ -112,14 +110,14 @@ public class GroupServiceImpl extends AbstractService<SCIMGroup> implements Grou
         membCond.setGroup(id);
         SearchCond searchCond = SearchCond.getLeafCond(membCond);
         int count = userLogic().search(searchCond,
-                1, 1, Collections.<OrderByClause>emptyList(),
+                1, 1, List.of(),
                 SyncopeConstants.ROOT_REALM, false).getLeft();
         for (int page = 1; page <= (count / AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) {
             beforeMembers.addAll(userLogic().search(
                     searchCond,
                     page,
                     AnyDAO.DEFAULT_PAGE_SIZE,
-                    Collections.<OrderByClause>emptyList(),
+                    List.of(),
                     SyncopeConstants.ROOT_REALM,
                     false).
                     getRight().stream().map(EntityTO::getKey).collect(Collectors.toSet()));
@@ -165,8 +163,8 @@ public class GroupServiceImpl extends AbstractService<SCIMGroup> implements Grou
                 binder().toSCIMGroup(
                         result.getEntity(),
                         uriInfo.getAbsolutePathBuilder().path(result.getEntity().getKey()).build().toASCIIString(),
-                        Collections.<String>emptyList(),
-                        Collections.<String>emptyList()));
+                        List.of(),
+                        List.of()));
     }
 
     @Override
@@ -193,11 +191,11 @@ public class GroupServiceImpl extends AbstractService<SCIMGroup> implements Grou
         SCIMSearchRequest request = new SCIMSearchRequest(filter, sortBy, sortOrder, startIndex, count);
         if (attributes != null) {
             request.getAttributes().addAll(
-                    Arrays.asList(ArrayUtils.nullToEmpty(StringUtils.split(attributes, ','))));
+                    List.of(ArrayUtils.nullToEmpty(StringUtils.split(attributes, ','))));
         }
         if (excludedAttributes != null) {
             request.getExcludedAttributes().addAll(
-                    Arrays.asList(ArrayUtils.nullToEmpty(StringUtils.split(excludedAttributes, ','))));
+                    List.of(ArrayUtils.nullToEmpty(StringUtils.split(excludedAttributes, ','))));
         }
 
         return doSearch(Resource.Group, request);
diff --git a/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/service/UserServiceImpl.java b/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/service/UserServiceImpl.java
index 51deffd..3f2c766 100644
--- a/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/service/UserServiceImpl.java
+++ b/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/service/UserServiceImpl.java
@@ -18,8 +18,8 @@
  */
 package org.apache.syncope.ext.scimv2.cxf.service;
 
-import java.util.Arrays;
-import java.util.Collections;
+import java.util.List;
+
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.ResponseBuilder;
 import org.apache.commons.lang3.ArrayUtils;
@@ -46,8 +46,8 @@ public class UserServiceImpl extends AbstractService<SCIMUser> implements UserSe
                 binder().toSCIMUser(
                         result.getEntity(),
                         uriInfo.getAbsolutePathBuilder().path(result.getEntity().getKey()).build().toASCIIString(),
-                        Collections.<String>emptyList(),
-                        Collections.<String>emptyList()));
+                        List.of(),
+                        List.of()));
     }
 
     @Override
@@ -58,8 +58,8 @@ public class UserServiceImpl extends AbstractService<SCIMUser> implements UserSe
         return binder().toSCIMUser(
                 userLogic().read(id),
                 uriInfo.getAbsolutePathBuilder().build().toASCIIString(),
-                Arrays.asList(ArrayUtils.nullToEmpty(StringUtils.split(attributes, ','))),
-                Arrays.asList(ArrayUtils.nullToEmpty(StringUtils.split(excludedAttributes, ','))));
+                List.of(ArrayUtils.nullToEmpty(StringUtils.split(attributes, ','))),
+                List.of(ArrayUtils.nullToEmpty(StringUtils.split(excludedAttributes, ','))));
     }
 
     @Override
@@ -85,8 +85,8 @@ public class UserServiceImpl extends AbstractService<SCIMUser> implements UserSe
                 binder().toSCIMUser(
                         result.getEntity(),
                         uriInfo.getAbsolutePathBuilder().path(result.getEntity().getKey()).build().toASCIIString(),
-                        Collections.<String>emptyList(),
-                        Collections.<String>emptyList()));
+                        List.of(),
+                        List.of()));
     }
 
     @Override
@@ -113,11 +113,11 @@ public class UserServiceImpl extends AbstractService<SCIMUser> implements UserSe
         SCIMSearchRequest request = new SCIMSearchRequest(filter, sortBy, sortOrder, startIndex, count);
         if (attributes != null) {
             request.getAttributes().addAll(
-                    Arrays.asList(ArrayUtils.nullToEmpty(StringUtils.split(attributes, ','))));
+                    List.of(ArrayUtils.nullToEmpty(StringUtils.split(attributes, ','))));
         }
         if (excludedAttributes != null) {
             request.getExcludedAttributes().addAll(
-                    Arrays.asList(ArrayUtils.nullToEmpty(StringUtils.split(excludedAttributes, ','))));
+                    List.of(ArrayUtils.nullToEmpty(StringUtils.split(excludedAttributes, ','))));
         }
 
         return doSearch(Resource.User, request);
diff --git a/ext/self-keymaster/client/src/main/java/org/apache/syncope/common/keymaster/client/self/SelfKeymasterClientContext.java b/ext/self-keymaster/client/src/main/java/org/apache/syncope/common/keymaster/client/self/SelfKeymasterClientContext.java
index 5e938f4..3c8ce97 100644
--- a/ext/self-keymaster/client/src/main/java/org/apache/syncope/common/keymaster/client/self/SelfKeymasterClientContext.java
+++ b/ext/self-keymaster/client/src/main/java/org/apache/syncope/common/keymaster/client/self/SelfKeymasterClientContext.java
@@ -19,7 +19,9 @@
 package org.apache.syncope.common.keymaster.client.self;
 
 import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
-import java.util.Arrays;
+
+import java.util.List;
+
 import org.apache.cxf.ext.logging.LoggingFeature;
 import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean;
 import org.apache.syncope.common.keymaster.client.api.ConfParamOps;
@@ -54,9 +56,9 @@ public class SelfKeymasterClientContext {
         restClientFactoryBean.setPassword(password);
         restClientFactoryBean.setThreadSafe(true);
         restClientFactoryBean.setInheritHeaders(true);
-        restClientFactoryBean.setFeatures(Arrays.asList(new LoggingFeature()));
+        restClientFactoryBean.setFeatures(List.of(new LoggingFeature()));
         restClientFactoryBean.setProviders(
-                Arrays.asList(new JacksonJsonProvider(), new SelfKeymasterClientExceptionMapper()));
+                List.of(new JacksonJsonProvider(), new SelfKeymasterClientExceptionMapper()));
         return restClientFactoryBean;
     }
 
diff --git a/ext/self-keymaster/client/src/main/java/org/apache/syncope/common/keymaster/client/self/SelfKeymasterDomainOps.java b/ext/self-keymaster/client/src/main/java/org/apache/syncope/common/keymaster/client/self/SelfKeymasterDomainOps.java
index 57c2c88..2a1b759 100644
--- a/ext/self-keymaster/client/src/main/java/org/apache/syncope/common/keymaster/client/self/SelfKeymasterDomainOps.java
+++ b/ext/self-keymaster/client/src/main/java/org/apache/syncope/common/keymaster/client/self/SelfKeymasterDomainOps.java
@@ -18,8 +18,9 @@
  */
 package org.apache.syncope.common.keymaster.client.self;
 
-import java.util.Collections;
 import java.util.List;
+import java.util.Map;
+
 import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean;
 import org.apache.syncope.common.keymaster.client.api.DomainOps;
 import org.apache.syncope.common.keymaster.client.api.KeymasterException;
@@ -35,13 +36,13 @@ public class SelfKeymasterDomainOps extends SelfKeymasterOps implements DomainOp
 
     @Override
     public List<Domain> list() {
-        return client(DomainService.class, Collections.emptyMap()).list();
+        return client(DomainService.class, Map.of()).list();
     }
 
     @Override
     public Domain read(final String key) {
         try {
-            return client(DomainService.class, Collections.emptyMap()).read(key);
+            return client(DomainService.class, Map.of()).read(key);
         } catch (KeymasterException e) {
             throw e;
         } catch (Exception e) {
@@ -52,7 +53,7 @@ public class SelfKeymasterDomainOps extends SelfKeymasterOps implements DomainOp
     @Override
     public void create(final Domain domain) {
         try {
-            client(DomainService.class, Collections.emptyMap()).create(domain);
+            client(DomainService.class, Map.of()).create(domain);
         } catch (KeymasterException e) {
             throw e;
         } catch (Exception e) {
@@ -63,7 +64,7 @@ public class SelfKeymasterDomainOps extends SelfKeymasterOps implements DomainOp
     @Override
     public void changeAdminPassword(final String key, final String password, final CipherAlgorithm cipherAlgorithm) {
         try {
-            client(DomainService.class, Collections.emptyMap()).changeAdminPassword(key, password, cipherAlgorithm);
+            client(DomainService.class, Map.of()).changeAdminPassword(key, password, cipherAlgorithm);
         } catch (KeymasterException e) {
             throw e;
         } catch (Exception e) {
@@ -74,7 +75,7 @@ public class SelfKeymasterDomainOps extends SelfKeymasterOps implements DomainOp
     @Override
     public void adjustPoolSize(final String key, final int maxPoolSize, final int minIdle) {
         try {
-            client(DomainService.class, Collections.emptyMap()).adjustPoolSize(key, maxPoolSize, minIdle);
+            client(DomainService.class, Map.of()).adjustPoolSize(key, maxPoolSize, minIdle);
         } catch (KeymasterException e) {
             throw e;
         } catch (Exception e) {
@@ -85,7 +86,7 @@ public class SelfKeymasterDomainOps extends SelfKeymasterOps implements DomainOp
     @Override
     public void delete(final String key) {
         try {
-            client(DomainService.class, Collections.emptyMap()).delete(key);
+            client(DomainService.class, Map.of()).delete(key);
         } catch (KeymasterException e) {
             throw e;
         } catch (Exception e) {
diff --git a/ext/self-keymaster/client/src/main/java/org/apache/syncope/common/keymaster/client/self/SelfKeymasterServiceOps.java b/ext/self-keymaster/client/src/main/java/org/apache/syncope/common/keymaster/client/self/SelfKeymasterServiceOps.java
index 56fad28..99d3b64 100644
--- a/ext/self-keymaster/client/src/main/java/org/apache/syncope/common/keymaster/client/self/SelfKeymasterServiceOps.java
+++ b/ext/self-keymaster/client/src/main/java/org/apache/syncope/common/keymaster/client/self/SelfKeymasterServiceOps.java
@@ -18,8 +18,8 @@
  */
 package org.apache.syncope.common.keymaster.client.self;
 
-import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.CompletionStage;
 import javax.ws.rs.HttpMethod;
 import javax.ws.rs.Path;
@@ -59,7 +59,7 @@ public class SelfKeymasterServiceOps extends SelfKeymasterOps implements Service
     @Override
     public List<NetworkService> list(final NetworkService.Type serviceType) {
         try {
-            return client(NetworkServiceService.class, Collections.emptyMap()).list(serviceType);
+            return client(NetworkServiceService.class, Map.of()).list(serviceType);
         } catch (KeymasterException e) {
             throw e;
         } catch (Exception e) {
@@ -70,7 +70,7 @@ public class SelfKeymasterServiceOps extends SelfKeymasterOps implements Service
     @Override
     public NetworkService get(final NetworkService.Type serviceType) {
         try {
-            return client(NetworkServiceService.class, Collections.emptyMap()).get(serviceType);
+            return client(NetworkServiceService.class, Map.of()).get(serviceType);
         } catch (KeymasterException e) {
             throw e;
         } catch (Exception e) {
diff --git a/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/SelfKeymasterContext.java b/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/SelfKeymasterContext.java
index f7671eb..7a2dbeb 100644
--- a/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/SelfKeymasterContext.java
+++ b/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/SelfKeymasterContext.java
@@ -19,8 +19,10 @@
 package org.apache.syncope.ext.self.keymaster.cxf;
 
 import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
-import java.util.Arrays;
-import java.util.Collections;
+
+import java.util.List;
+import java.util.Map;
+
 import javax.annotation.Resource;
 import org.apache.cxf.Bus;
 import org.apache.cxf.endpoint.Server;
@@ -86,20 +88,20 @@ public class SelfKeymasterContext {
         selfKeymasterContainer.setBus(bus);
         selfKeymasterContainer.setAddress("/keymaster");
         selfKeymasterContainer.setStaticSubresourceResolution(true);
-        selfKeymasterContainer.setBasePackages(Arrays.asList(
+        selfKeymasterContainer.setBasePackages(List.of(
                 "org.apache.syncope.ext.self.keymaster.api.service",
                 "org.apache.syncope.ext.self.keymaster.cxf.service"));
-        selfKeymasterContainer.setProperties(Collections.singletonMap("convert.wadl.resources.to.dom", "false"));
+        selfKeymasterContainer.setProperties(Map.of("convert.wadl.resources.to.dom", "false"));
 
-        selfKeymasterContainer.setInInterceptors(Arrays.asList(
+        selfKeymasterContainer.setInInterceptors(List.of(
                 ctx.getBean(GZIPInInterceptor.class),
                 ctx.getBean(JAXRSBeanValidationInInterceptor.class)));
 
-        selfKeymasterContainer.setOutInterceptors(Arrays.asList(
+        selfKeymasterContainer.setOutInterceptors(List.of(
                 ctx.getBean(GZIPOutInterceptor.class),
                 ctx.getBean(JAXRSBeanValidationOutInterceptor.class)));
 
-        selfKeymasterContainer.setProviders(Arrays.asList(
+        selfKeymasterContainer.setProviders(List.of(
                 ctx.getBean(RestServiceExceptionMapper.class),
                 ctx.getBean(JacksonJaxbJsonProvider.class),
                 selfKeymasterWADLGenerator()));
diff --git a/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/client/SelfKeymasterInternalConfParamOps.java b/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/client/SelfKeymasterInternalConfParamOps.java
index f4e41f5..3d46cae 100644
--- a/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/client/SelfKeymasterInternalConfParamOps.java
+++ b/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/client/SelfKeymasterInternalConfParamOps.java
@@ -21,7 +21,7 @@ package org.apache.syncope.ext.self.keymaster.cxf.client;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import java.io.IOException;
-import java.util.Collections;
+import java.util.List;
 import java.util.Map;
 import org.apache.syncope.common.keymaster.client.api.ConfParamOps;
 import org.apache.syncope.core.logic.ConfParamLogic;
@@ -48,7 +48,7 @@ public class SelfKeymasterInternalConfParamOps implements ConfParamOps {
         return AuthContextUtils.callAs(
                 domain,
                 keymasterUser,
-                Collections.emptyList(),
+                List.of(),
                 () -> logic.list());
     }
 
@@ -58,7 +58,7 @@ public class SelfKeymasterInternalConfParamOps implements ConfParamOps {
         JsonNode valueNode = AuthContextUtils.callAs(
                 domain,
                 keymasterUser,
-                Collections.emptyList(),
+                List.of(),
                 () -> logic.get(key));
         if (valueNode == null) {
             return defaultValue;
@@ -79,7 +79,7 @@ public class SelfKeymasterInternalConfParamOps implements ConfParamOps {
         } else {
             JsonNode valueNode = MAPPER.valueToTree(value);
 
-            AuthContextUtils.callAs(domain, keymasterUser, Collections.emptyList(), () -> {
+            AuthContextUtils.callAs(domain, keymasterUser, List.of(), () -> {
                 logic.set(key, valueNode);
                 return null;
             });
@@ -88,7 +88,7 @@ public class SelfKeymasterInternalConfParamOps implements ConfParamOps {
 
     @Override
     public void remove(final String domain, final String key) {
-        AuthContextUtils.callAs(domain, keymasterUser, Collections.emptyList(), () -> {
+        AuthContextUtils.callAs(domain, keymasterUser, List.of(), () -> {
             logic.remove(key);
             return null;
         });
diff --git a/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/client/SelfKeymasterInternalDomainOps.java b/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/client/SelfKeymasterInternalDomainOps.java
index 20169d9..8605cf9 100644
--- a/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/client/SelfKeymasterInternalDomainOps.java
+++ b/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/client/SelfKeymasterInternalDomainOps.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.ext.self.keymaster.cxf.client;
 
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.common.keymaster.client.api.DomainOps;
 import org.apache.syncope.common.keymaster.client.api.model.Domain;
@@ -39,19 +38,17 @@ public class SelfKeymasterInternalDomainOps implements DomainOps {
 
     @Override
     public List<Domain> list() {
-        return AuthContextUtils.callAs(SyncopeConstants.MASTER_DOMAIN, keymasterUser, Collections.emptyList(),
-            () -> logic.list());
+        return AuthContextUtils.callAs(SyncopeConstants.MASTER_DOMAIN, keymasterUser, List.of(), () -> logic.list());
     }
 
     @Override
     public Domain read(final String key) {
-        return AuthContextUtils.callAs(SyncopeConstants.MASTER_DOMAIN, keymasterUser, Collections.emptyList(),
-            () -> logic.read(key));
+        return AuthContextUtils.callAs(SyncopeConstants.MASTER_DOMAIN, keymasterUser, List.of(), () -> logic.read(key));
     }
 
     @Override
     public void create(final Domain domain) {
-        AuthContextUtils.callAs(SyncopeConstants.MASTER_DOMAIN, keymasterUser, Collections.emptyList(), () -> {
+        AuthContextUtils.callAs(SyncopeConstants.MASTER_DOMAIN, keymasterUser, List.of(), () -> {
             logic.create(domain);
             return null;
         });
@@ -59,7 +56,7 @@ public class SelfKeymasterInternalDomainOps implements DomainOps {
 
     @Override
     public void changeAdminPassword(final String key, final String password, final CipherAlgorithm cipherAlgorithm) {
-        AuthContextUtils.callAs(SyncopeConstants.MASTER_DOMAIN, keymasterUser, Collections.emptyList(), () -> {
+        AuthContextUtils.callAs(SyncopeConstants.MASTER_DOMAIN, keymasterUser, List.of(), () -> {
             logic.changeAdminPassword(key, password, cipherAlgorithm);
             return null;
         });
@@ -67,7 +64,7 @@ public class SelfKeymasterInternalDomainOps implements DomainOps {
 
     @Override
     public void adjustPoolSize(final String key, final int maxPoolSize, final int minIdle) {
-        AuthContextUtils.callAs(SyncopeConstants.MASTER_DOMAIN, keymasterUser, Collections.emptyList(), () -> {
+        AuthContextUtils.callAs(SyncopeConstants.MASTER_DOMAIN, keymasterUser, List.of(), () -> {
             logic.adjustPoolSize(keymasterUser, maxPoolSize, minIdle);
             return null;
         });
@@ -75,7 +72,7 @@ public class SelfKeymasterInternalDomainOps implements DomainOps {
 
     @Override
     public void delete(final String key) {
-        AuthContextUtils.callAs(SyncopeConstants.MASTER_DOMAIN, keymasterUser, Collections.emptyList(), () -> {
+        AuthContextUtils.callAs(SyncopeConstants.MASTER_DOMAIN, keymasterUser, List.of(), () -> {
             logic.delete(key);
             return null;
         });
diff --git a/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/client/SelfKeymasterInternalServiceOps.java b/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/client/SelfKeymasterInternalServiceOps.java
index bd06859..f283bf6 100644
--- a/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/client/SelfKeymasterInternalServiceOps.java
+++ b/ext/self-keymaster/rest-cxf/src/main/java/org/apache/syncope/ext/self/keymaster/cxf/client/SelfKeymasterInternalServiceOps.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.ext.self.keymaster.cxf.client;
 
-import java.util.Collections;
 import java.util.List;
 import org.apache.syncope.common.keymaster.client.api.KeymasterException;
 import org.apache.syncope.common.keymaster.client.api.model.NetworkService;
@@ -42,7 +41,7 @@ public class SelfKeymasterInternalServiceOps implements ServiceOps {
         return AuthContextUtils.callAs(
                 SyncopeConstants.MASTER_DOMAIN,
                 keymasterUser,
-                Collections.emptyList(),
+                List.of(),
                 () -> logic.list(serviceType));
     }
 
@@ -52,7 +51,7 @@ public class SelfKeymasterInternalServiceOps implements ServiceOps {
             return AuthContextUtils.callAs(
                     SyncopeConstants.MASTER_DOMAIN,
                     keymasterUser,
-                    Collections.emptyList(),
+                    List.of(),
                     () -> logic.get(serviceType));
         } catch (Exception e) {
             throw new KeymasterException(e);
@@ -64,7 +63,7 @@ public class SelfKeymasterInternalServiceOps implements ServiceOps {
         AuthContextUtils.callAs(
                 SyncopeConstants.MASTER_DOMAIN,
                 keymasterUser,
-                Collections.emptyList(),
+                List.of(),
                 () -> {
                     logic.register(service);
                     return null;
@@ -76,7 +75,7 @@ public class SelfKeymasterInternalServiceOps implements ServiceOps {
         AuthContextUtils.callAs(
                 SyncopeConstants.MASTER_DOMAIN,
                 keymasterUser,
-                Collections.emptyList(),
+                List.of(),
                 () -> {
                     logic.unregister(service);
                     return null;
diff --git a/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/SyncopeBuildToolsApplication.java b/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/SyncopeBuildToolsApplication.java
index d89e141..e136d69 100644
--- a/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/SyncopeBuildToolsApplication.java
+++ b/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/SyncopeBuildToolsApplication.java
@@ -19,7 +19,9 @@
 package org.apache.syncope.fit.buildtools;
 
 import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
-import java.util.Arrays;
+
+import java.util.List;
+
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 import javax.servlet.ServletRegistration;
@@ -98,8 +100,8 @@ public class SyncopeBuildToolsApplication extends SpringBootServletInitializer {
         restProvisioning.setBus(bus);
         restProvisioning.setAddress("/rest");
         restProvisioning.setStaticSubresourceResolution(true);
-        restProvisioning.setBasePackages(Arrays.asList("org.apache.syncope.fit.buildtools.cxf"));
-        restProvisioning.setProviders(Arrays.asList(new JacksonJsonProvider()));
+        restProvisioning.setBasePackages(List.of("org.apache.syncope.fit.buildtools.cxf"));
+        restProvisioning.setProviders(List.of(new JacksonJsonProvider()));
         return restProvisioning.create();
     }
 
diff --git a/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/ProvisioningImpl.java b/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/ProvisioningImpl.java
index 69fbbe3..4241d48 100644
--- a/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/ProvisioningImpl.java
+++ b/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/ProvisioningImpl.java
@@ -25,7 +25,6 @@ import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
@@ -325,7 +324,7 @@ public class ProvisioningImpl implements Provisioning {
 
         LOG.debug("sync request received");
 
-        return Collections.<WSChange>emptyList();
+        return List.of();
     }
 
     @Override
diff --git a/fit/core-reference/src/main/java-all/org/apache/syncope/fit/core/reference/flowable/PrintersValueProvider.java b/fit/core-reference/src/main/java-all/org/apache/syncope/fit/core/reference/flowable/PrintersValueProvider.java
index 82e9693..7761183 100644
--- a/fit/core-reference/src/main/java-all/org/apache/syncope/fit/core/reference/flowable/PrintersValueProvider.java
+++ b/fit/core-reference/src/main/java-all/org/apache/syncope/fit/core/reference/flowable/PrintersValueProvider.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.fit.core.reference.flowable;
 
-import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -49,7 +48,7 @@ public class PrintersValueProvider implements DropdownValueProvider {
         OrderByClause orderByNameAsc = new OrderByClause();
         orderByNameAsc.setField("name");
         orderByNameAsc.setDirection(OrderByClause.Direction.ASC);
-        ORDER_BY = Collections.singletonList(orderByNameAsc);
+        ORDER_BY = List.of(orderByNameAsc);
     }
 
     @Autowired
diff --git a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/ITImplementationLookup.java b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/ITImplementationLookup.java
index 0910f98..d65c46d 100644
--- a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/ITImplementationLookup.java
+++ b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/ITImplementationLookup.java
@@ -18,9 +18,9 @@
  */
 package org.apache.syncope.fit.core.reference;
 
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -85,7 +85,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 public class ITImplementationLookup implements ImplementationLookup {
 
     private static final Set<Class<?>> JWTSSOPROVIDER_CLASSES = new HashSet<>(
-            Arrays.asList(SyncopeJWTSSOProvider.class, CustomJWTSSOProvider.class));
+            List.of(SyncopeJWTSSOProvider.class, CustomJWTSSOProvider.class));
 
     private static final Map<Class<? extends ReportletConf>, Class<? extends Reportlet>> REPORTLET_CLASSES =
             new HashMap<Class<? extends ReportletConf>, Class<? extends Reportlet>>() {
@@ -149,7 +149,7 @@ public class ITImplementationLookup implements ImplementationLookup {
     };
 
     private static final Set<Class<?>> AUDITAPPENDER_CLASSES = new HashSet<>(
-            Arrays.asList(TestFileAuditAppender.class, TestFileRewriteAuditAppender.class));
+            List.of(TestFileAuditAppender.class, TestFileRewriteAuditAppender.class));
 
     private static final Map<String, Set<String>> CLASS_NAMES = new HashMap<String, Set<String>>() {
 
diff --git a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestNotificationRecipientsProvider.java b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestNotificationRecipientsProvider.java
index 4d1e3f7..366db9e 100644
--- a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestNotificationRecipientsProvider.java
+++ b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestNotificationRecipientsProvider.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.fit.core.reference;
 
-import java.util.Collections;
 import java.util.Set;
 import org.apache.syncope.core.persistence.api.entity.Notification;
 import org.springframework.transaction.annotation.Transactional;
@@ -29,7 +28,7 @@ public class TestNotificationRecipientsProvider implements RecipientsProvider {
     @Transactional(readOnly = true)
     @Override
     public Set<String> provideRecipients(final Notification notification) {
-        return Collections.singleton(getClass().getSimpleName() + "@syncope.apache.org");
+        return Set.of(getClass().getSimpleName() + "@syncope.apache.org");
     }
 
 }
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
index 9b715f2..f783541 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
@@ -26,7 +26,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -445,7 +444,7 @@ public abstract class AbstractITCase {
         notification.setSelfAsRecipient(true);
         notification.setRecipientAttrName("email");
         if (staticRecipients != null) {
-            notification.getStaticRecipients().addAll(Arrays.asList(staticRecipients));
+            notification.getStaticRecipients().addAll(List.of(staticRecipients));
         }
 
         notification.setSender(sender);
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractConsoleITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractConsoleITCase.java
index 28dd0a3..3d9fdb6 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractConsoleITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AbstractConsoleITCase.java
@@ -23,7 +23,7 @@ import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEnd
 import com.giffing.wicket.spring.boot.starter.app.classscanner.candidates.WicketClassCandidatesHolder;
 import com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.general.GeneralSettingsProperties;
 import com.giffing.wicket.spring.boot.starter.configuration.extensions.external.spring.boot.actuator.WicketEndpointRepositoryDefault;
-import java.util.Collections;
+
 import java.util.List;
 import org.apache.syncope.client.console.SyncopeWebApplication;
 import org.apache.syncope.client.console.commons.PreviewUtils;
@@ -58,7 +58,7 @@ public abstract class AbstractConsoleITCase extends AbstractUITCase {
 
         @Bean
         public List<WicketApplicationInitConfiguration> configurations() {
-            return Collections.emptyList();
+            return List.of();
         }
 
         @Bean
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AjaxPalettePanelITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AjaxPalettePanelITCase.java
index 233acda..e61e02d 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AjaxPalettePanelITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AjaxPalettePanelITCase.java
@@ -20,7 +20,6 @@ package org.apache.syncope.fit.console;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
@@ -32,9 +31,9 @@ import org.junit.jupiter.api.Test;
 
 public class AjaxPalettePanelITCase extends AbstractConsoleITCase {
 
-    private static final IModel<List<String>> SELECTED = new ListModel<>(Arrays.asList("A", "D"));
+    private static final IModel<List<String>> SELECTED = new ListModel<>(List.of("A", "D"));
 
-    private static final ListModel<String> ALL = new ListModel<>(Arrays.asList("A", "B", "C", "D"));
+    private static final ListModel<String> ALL = new ListModel<>(List.of("A", "B", "C", "D"));
 
     @Test
     public void isRendered() {
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/BatchITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/BatchITCase.java
index 6935935..f597ed2 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/BatchITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/BatchITCase.java
@@ -33,7 +33,6 @@ import java.io.StringWriter;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.UUID;
@@ -85,9 +84,9 @@ public class BatchITCase extends AbstractITCase {
         createUser.setMethod(HttpMethod.POST);
         createUser.setRequestURI("/users");
         createUser.setHeaders(new HashMap<>());
-        createUser.getHeaders().put(HttpHeaders.ACCEPT, Arrays.asList(MediaType.APPLICATION_JSON));
-        createUser.getHeaders().put(HttpHeaders.CONTENT_TYPE, Arrays.asList(MediaType.APPLICATION_JSON));
-        createUser.getHeaders().put(HttpHeaders.CONTENT_LENGTH, Arrays.asList(createUserPayload.length()));
+        createUser.getHeaders().put(HttpHeaders.ACCEPT, List.of(MediaType.APPLICATION_JSON));
+        createUser.getHeaders().put(HttpHeaders.CONTENT_TYPE, List.of(MediaType.APPLICATION_JSON));
+        createUser.getHeaders().put(HttpHeaders.CONTENT_LENGTH, List.of(createUserPayload.length()));
         createUser.setContent(createUserPayload);
         reqItems.add(createUser);
 
@@ -103,9 +102,9 @@ public class BatchITCase extends AbstractITCase {
         createGroup.setMethod(HttpMethod.POST);
         createGroup.setRequestURI("/groups");
         createGroup.setHeaders(new HashMap<>());
-        createGroup.getHeaders().put(HttpHeaders.ACCEPT, Arrays.asList(MediaType.APPLICATION_XML));
-        createGroup.getHeaders().put(HttpHeaders.CONTENT_TYPE, Arrays.asList(MediaType.APPLICATION_XML));
-        createGroup.getHeaders().put(HttpHeaders.CONTENT_LENGTH, Arrays.asList(createGroupPayload.length()));
+        createGroup.getHeaders().put(HttpHeaders.ACCEPT, List.of(MediaType.APPLICATION_XML));
+        createGroup.getHeaders().put(HttpHeaders.CONTENT_TYPE, List.of(MediaType.APPLICATION_XML));
+        createGroup.getHeaders().put(HttpHeaders.CONTENT_LENGTH, List.of(createGroupPayload.length()));
         createGroup.setContent(createGroupPayload);
         reqItems.add(createGroup);
 
@@ -119,10 +118,10 @@ public class BatchITCase extends AbstractITCase {
         updateUser.setMethod(HttpMethod.PATCH);
         updateUser.setRequestURI("/users/" + userCR.getUsername());
         updateUser.setHeaders(new HashMap<>());
-        updateUser.getHeaders().put(RESTHeaders.PREFER, Arrays.asList(Preference.RETURN_NO_CONTENT.toString()));
-        updateUser.getHeaders().put(HttpHeaders.ACCEPT, Arrays.asList(MediaType.APPLICATION_JSON));
-        updateUser.getHeaders().put(HttpHeaders.CONTENT_TYPE, Arrays.asList(MediaType.APPLICATION_JSON));
-        updateUser.getHeaders().put(HttpHeaders.CONTENT_LENGTH, Arrays.asList(updateUserPayload.length()));
+        updateUser.getHeaders().put(RESTHeaders.PREFER, List.of(Preference.RETURN_NO_CONTENT.toString()));
+        updateUser.getHeaders().put(HttpHeaders.ACCEPT, List.of(MediaType.APPLICATION_JSON));
+        updateUser.getHeaders().put(HttpHeaders.CONTENT_TYPE, List.of(MediaType.APPLICATION_JSON));
+        updateUser.getHeaders().put(HttpHeaders.CONTENT_LENGTH, List.of(updateUserPayload.length()));
         updateUser.setContent(updateUserPayload);
         reqItems.add(updateUser);
 
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
index 2f3825d..dcfd8fb 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
@@ -27,7 +27,6 @@ import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.IOException;
 import java.security.AccessControlException;
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
@@ -269,9 +268,9 @@ public class GroupITCase extends AbstractITCase {
         Map<String, Attr> attrs = EntityTOUtils.buildAttrMap(updated.getPlainAttrs());
         assertFalse(attrs.containsKey("icon"));
         assertFalse(attrs.containsKey("show"));
-        assertEquals(Collections.singletonList("sx"), attrs.get("rderived_sx").getValues());
-        assertEquals(Collections.singletonList("dx"), attrs.get("rderived_dx").getValues());
-        assertEquals(Collections.singletonList("mr"), attrs.get("title").getValues());
+        assertEquals(List.of("sx"), attrs.get("rderived_sx").getValues());
+        assertEquals(List.of("dx"), attrs.get("rderived_dx").getValues());
+        assertEquals(List.of("mr"), attrs.get("title").getValues());
     }
 
     @Test
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/KeymasterITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/KeymasterITCase.java
index abcc88c..3a01c9c 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/KeymasterITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/KeymasterITCase.java
@@ -29,8 +29,6 @@ import static org.junit.jupiter.api.Assumptions.assumeFalse;
 
 import java.security.AccessControlException;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -82,7 +80,7 @@ public class KeymasterITCase extends AbstractITCase {
         assertEquals(false, booleanValue);
 
         List<String> stringValues =
-                Arrays.asList(confParamOps.get(
+                List.of(confParamOps.get(
                         SyncopeConstants.MASTER_DOMAIN, "authentication.attributes", null, String[].class));
         assertNotNull(stringValues);
         List<String> actualStringValues = new ArrayList<>();
@@ -125,7 +123,7 @@ public class KeymasterITCase extends AbstractITCase {
         stringValues.add("stringValue2");
         confParamOps.set(SyncopeConstants.MASTER_DOMAIN, key, stringValues);
         List<String> actualStringValues =
-                Arrays.asList(confParamOps.get(SyncopeConstants.MASTER_DOMAIN, key, null, String[].class));
+                List.of(confParamOps.get(SyncopeConstants.MASTER_DOMAIN, key, null, String[].class));
         assertEquals(stringValues, actualStringValues);
 
         confParamOps.remove(SyncopeConstants.MASTER_DOMAIN, key);
@@ -156,7 +154,7 @@ public class KeymasterITCase extends AbstractITCase {
         int i = 0;
         int maxit = maxWaitSeconds;
 
-        List<NetworkService> list = Collections.emptyList();
+        List<NetworkService> list = List.of();
         do {
             try {
                 Thread.sleep(1000);
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PolicyITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PolicyITCase.java
index 4ee3e8a..83ecf39 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PolicyITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PolicyITCase.java
@@ -27,7 +27,6 @@ import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
 import javax.ws.rs.core.Response;
@@ -132,7 +131,7 @@ public class PolicyITCase extends AbstractITCase {
 
         assertNotNull(policyTO);
         assertTrue(policyTO.getUsedByResources().contains(RESOURCE_NAME_NOPROPAGATION));
-        assertTrue(policyTO.getUsedByRealms().containsAll(Arrays.asList("/", "/odd", "/even")));
+        assertTrue(policyTO.getUsedByRealms().containsAll(List.of("/", "/odd", "/even")));
     }
 
     @Test
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
index 63ec15e..1abcabd 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
@@ -27,7 +27,6 @@ import java.io.IOException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Calendar;
 import java.util.Collections;
 import java.util.HashSet;
@@ -437,7 +436,7 @@ public class PropagationTaskITCase extends AbstractTaskITCase {
 
             Set<Attribute> propagationAttrs = new HashSet<>();
             if (StringUtils.isNotBlank(tasks.getResult().get(0).getAttributes())) {
-                propagationAttrs.addAll(Arrays.asList(
+                propagationAttrs.addAll(List.of(
                         POJOHelper.deserialize(tasks.getResult().get(0).getAttributes(), Attribute[].class)));
             }
 
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
index 9c56b91..798b5d6 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
@@ -449,7 +449,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
         assertNotNull(groupConnObject);
         Attr groupDn = groupConnObject.getAttr(Name.NAME).get();
         updateLdapRemoteObject(RESOURCE_LDAP_ADMIN_DN, RESOURCE_LDAP_ADMIN_PWD,
-                groupDn.getValues().get(0), Collections.singletonMap("uniquemember", "uid=admin,ou=system"));
+                groupDn.getValues().get(0), Map.of("uniquemember", "uid=admin,ou=system"));
 
         execProvisioningTask(taskService, TaskType.PULL, "1e419ca4-ea81-4493-a14f-28b90113686d", 50, false);
 
@@ -1261,7 +1261,7 @@ public class PullTaskITCase extends AbstractTaskITCase {
 
             // 4. update the user on the external resource
             updateLdapRemoteObject(RESOURCE_LDAP_ADMIN_DN, RESOURCE_LDAP_ADMIN_PWD,
-                    userDn.getValues().get(0), Collections.singletonMap("mail", "pullFromLDAP2@syncope.apache.org"));
+                    userDn.getValues().get(0), Map.of("mail", "pullFromLDAP2@syncope.apache.org"));
 
             connObject = resourceService.readConnObject(RESOURCE_NAME_LDAP, AnyTypeKind.USER.name(), user.getKey());
             assertNotNull(connObject);
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ResourceITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ResourceITCase.java
index 61d4763..ff54564 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ResourceITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ResourceITCase.java
@@ -28,7 +28,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
@@ -170,7 +169,7 @@ public class ResourceITCase extends AbstractITCase {
         prop.setSchema(schema);
         prop.getValues().add("http://invalidurl/");
 
-        Set<ConnConfProperty> connectorConfigurationProperties = new HashSet<>(Arrays.asList(prop));
+        Set<ConnConfProperty> connectorConfigurationProperties = Set.of(prop);
         resourceTO.getConfOverride().addAll(connectorConfigurationProperties);
 
         Response response = resourceService.create(resourceTO);
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2CallbackHandler.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2CallbackHandler.java
index 1ffdfb2..378d1ec 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2CallbackHandler.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2CallbackHandler.java
@@ -19,7 +19,8 @@
 package org.apache.syncope.fit.core;
 
 import java.io.IOException;
-import java.util.Collections;
+import java.util.List;
+
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
 import javax.security.auth.callback.UnsupportedCallbackException;
@@ -63,7 +64,7 @@ public class SAML2CallbackHandler implements CallbackHandler {
                 samlCallback.setSubject(subjectBean);
                 AuthenticationStatementBean authBean = new AuthenticationStatementBean();
                 authBean.setAuthenticationMethod("Password");
-                samlCallback.setAuthenticationStatementData(Collections.singletonList(authBean));
+                samlCallback.setAuthenticationStatementData(List.of(authBean));
             } else {
                 throw new UnsupportedCallbackException(callback, "Unrecognized Callback");
             }
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2ITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2ITCase.java
index 8c5aa7d..b4553c8 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2ITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2ITCase.java
@@ -42,9 +42,7 @@ import java.security.KeyStore;
 import java.security.SecureRandom;
 import java.security.cert.Certificate;
 import java.security.cert.X509Certificate;
-import java.util.Arrays;
 import java.util.Base64;
-import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Optional;
@@ -496,8 +494,8 @@ public class SAML2ITCase extends AbstractITCase {
         conditions.setNotAfter(new DateTime().plusMinutes(5));
 
         AudienceRestrictionBean audienceRestriction = new AudienceRestrictionBean();
-        audienceRestriction.setAudienceURIs(Collections.singletonList("http://recipient.apache.org/"));
-        conditions.setAudienceRestrictions(Collections.singletonList(audienceRestriction));
+        audienceRestriction.setAudienceURIs(List.of("http://recipient.apache.org/"));
+        conditions.setAudienceRestrictions(List.of(audienceRestriction));
         callbackHandler.setConditions(conditions);
 
         SAMLCallback samlCallback = new SAMLCallback();
@@ -579,7 +577,7 @@ public class SAML2ITCase extends AbstractITCase {
             basedir = new File(".").getCanonicalPath();
         }
 
-        List<String> fileNames = Arrays.asList("fediz.xml", "fediz_realmb.xml");
+        List<String> fileNames = List.of("fediz.xml", "fediz_realmb.xml");
         for (String fileName : fileNames) {
             Path path = FileSystems.getDefault().getPath(basedir, "/src/test/resources/" + fileName);
             String content = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SCIMITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SCIMITCase.java
index 2c01e7d..d613390 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SCIMITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SCIMITCase.java
@@ -30,8 +30,6 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import java.io.IOException;
 import java.text.SimpleDateFormat;
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.UUID;
@@ -119,7 +117,7 @@ public class SCIMITCase extends AbstractITCase {
     }
 
     private WebClient webClient() {
-        return WebClient.create(SCIM_ADDRESS, Arrays.asList(new SCIMJacksonJsonProvider())).
+        return WebClient.create(SCIM_ADDRESS, List.of(new SCIMJacksonJsonProvider())).
                 accept(SCIMConstants.APPLICATION_SCIM_JSON_TYPE).
                 type(SCIMConstants.APPLICATION_SCIM_JSON_TYPE).
                 header(HttpHeaders.AUTHORIZATION, "Bearer " + adminClient.getJWT());
@@ -339,7 +337,7 @@ public class SCIMITCase extends AbstractITCase {
     }
 
     private SCIMUser getSampleUser(final String username) {
-        SCIMUser user = new SCIMUser(null, Collections.singletonList(Resource.User.schema()), null, username, true);
+        SCIMUser user = new SCIMUser(null, List.of(Resource.User.schema()), null, username, true);
         user.setPassword("password123");
 
         SCIMUserName name = new SCIMUserName();
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
index e6c3f53..dbf3fec 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
@@ -30,7 +30,6 @@ import static org.junit.jupiter.api.Assumptions.assumeTrue;
 import java.io.IOException;
 import java.security.AccessControlException;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -202,7 +201,7 @@ public class UserITCase extends AbstractITCase {
 
             UserTO userTO = createUser(userCR).getEntity();
             assertNotNull(userTO);
-            assertEquals(Collections.singleton(resourceTO.getKey()), userTO.getResources());
+            assertEquals(Set.of(resourceTO.getKey()), userTO.getResources());
         } finally {
             resourceService.delete(resourceTO.getKey());
         }
@@ -583,10 +582,10 @@ public class UserITCase extends AbstractITCase {
         assertFalse(userTO.getDerAttrs().isEmpty());
 
         Attr userIdAttr = userTO.getPlainAttr("userId").get();
-        assertEquals(Collections.singletonList(newUserId), userIdAttr.getValues());
+        assertEquals(List.of(newUserId), userIdAttr.getValues());
 
         Attr fullNameAttr = userTO.getPlainAttr("fullname").get();
-        assertEquals(Collections.singletonList(newFullName), fullNameAttr.getValues());
+        assertEquals(List.of(newFullName), fullNameAttr.getValues());
 
         // update by username
         userUR = new UserUR();
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
index 6f3419e..5295947 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
@@ -30,7 +30,6 @@ import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.Base64;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -845,7 +844,7 @@ public class UserIssuesITCase extends AbstractITCase {
         ProvisioningResult<UserTO> result = updateUser(userUR);
         assertNotNull(result);
         userTO = result.getEntity();
-        assertEquals(Collections.singleton(RESOURCE_NAME_WS1), userTO.getResources());
+        assertEquals(Set.of(RESOURCE_NAME_WS1), userTO.getResources());
         assertNotEquals(ExecStatus.SUCCESS, result.getPropagationStatuses().get(0).getStatus());
         assertTrue(result.getPropagationStatuses().get(0).getFailureReason().
                 startsWith("Not attempted because there are mandatory attributes without value(s): [__PASSWORD__]"));
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java
index a1d0b26..2c6edcb 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java
@@ -27,7 +27,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -554,7 +553,7 @@ public class UserSelfITCase extends AbstractITCase {
         assertEquals(1, userTO.getMemberships().size());
         assertEquals("0cbcabd2-4410-4b6b-8f05-a052b451d18f", userTO.getMemberships().get(0).getGroupKey());
         assertEquals("createApproval", userTO.getStatus());
-        assertEquals(Collections.singleton(RESOURCE_NAME_TESTDB), userTO.getResources());
+        assertEquals(Set.of(RESOURCE_NAME_TESTDB), userTO.getResources());
 
         assertTrue(result.getPropagationStatuses().isEmpty());
 
@@ -604,7 +603,7 @@ public class UserSelfITCase extends AbstractITCase {
         assertNotNull(userTO);
         assertEquals(updatedUsername, userTO.getUsername());
         assertEquals("active", userTO.getStatus());
-        assertEquals(Collections.singleton(RESOURCE_NAME_TESTDB), userTO.getResources());
+        assertEquals(Set.of(RESOURCE_NAME_TESTDB), userTO.getResources());
 
         String username = queryForObject(
                 jdbcTemplate, 50, "SELECT id FROM test WHERE id=?", String.class, userTO.getUsername());
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/AbstractEnduserITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/AbstractEnduserITCase.java
index b40a68b..58d5088 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/AbstractEnduserITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/AbstractEnduserITCase.java
@@ -23,7 +23,7 @@ import com.giffing.wicket.spring.boot.context.extensions.boot.actuator.WicketEnd
 import com.giffing.wicket.spring.boot.starter.app.classscanner.candidates.WicketClassCandidatesHolder;
 import com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.general.GeneralSettingsProperties;
 import com.giffing.wicket.spring.boot.starter.configuration.extensions.external.spring.boot.actuator.WicketEndpointRepositoryDefault;
-import java.util.Collections;
+
 import java.util.Date;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
@@ -77,7 +77,7 @@ public abstract class AbstractEnduserITCase extends AbstractUITCase {
 
         @Bean
         public List<WicketApplicationInitConfiguration> configurations() {
-            return Collections.emptyList();
+            return List.of();
         }
 
         @Bean
diff --git a/sra/src/main/java/org/apache/syncope/sra/RouteProvider.java b/sra/src/main/java/org/apache/syncope/sra/RouteProvider.java
index 876a012..65dec8d 100644
--- a/sra/src/main/java/org/apache/syncope/sra/RouteProvider.java
+++ b/sra/src/main/java/org/apache/syncope/sra/RouteProvider.java
@@ -19,8 +19,6 @@
 package org.apache.syncope.sra;
 
 import java.time.ZonedDateTime;
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -346,7 +344,7 @@ public class RouteProvider {
             case HOST:
                 String[] hostArgs = gwpredicate.getArgs().split(",");
                 predicate = ctx.getBean(HostRoutePredicateFactory.class).
-                        applyAsync(c -> c.setPatterns(Arrays.asList(hostArgs)));
+                        applyAsync(c -> c.setPatterns(List.of(hostArgs)));
                 break;
 
             case METHOD:
@@ -357,7 +355,7 @@ public class RouteProvider {
             case PATH:
                 String[] pathArgs = gwpredicate.getArgs().split(",");
                 predicate = ctx.getBean(PathRoutePredicateFactory.class).
-                        applyAsync(c -> c.setPatterns(Arrays.asList(pathArgs)));
+                        applyAsync(c -> c.setPatterns(List.of(pathArgs)));
                 break;
 
             case QUERY:
@@ -370,7 +368,7 @@ public class RouteProvider {
             case REMOTE_ADDR:
                 String[] remoteAddrArgs = gwpredicate.getArgs().split(",");
                 predicate = ctx.getBean(RemoteAddrRoutePredicateFactory.class).
-                        applyAsync(c -> c.setSources(Arrays.asList(remoteAddrArgs)));
+                        applyAsync(c -> c.setSources(List.of(remoteAddrArgs)));
                 break;
 
             case CUSTOM:
@@ -459,7 +457,7 @@ public class RouteProvider {
                             create(new AnonymousAuthenticationHandler(anonymousUser, anonymousKey));
                 } catch (Exception e) {
                     LOG.error("Could not init SyncopeClient", e);
-                    return Collections.emptyList();
+                    return List.of();
                 }
             }
         }
diff --git a/sra/src/test/java/org/apache/syncope/sra/SyncopeSRATestCoreStartup.java b/sra/src/test/java/org/apache/syncope/sra/SyncopeSRATestCoreStartup.java
index 9a12b66..71c44ea 100644
--- a/sra/src/test/java/org/apache/syncope/sra/SyncopeSRATestCoreStartup.java
+++ b/sra/src/test/java/org/apache/syncope/sra/SyncopeSRATestCoreStartup.java
@@ -19,7 +19,7 @@
 package org.apache.syncope.sra;
 
 import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
-import java.util.Collections;
+
 import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
@@ -63,7 +63,7 @@ public class SyncopeSRATestCoreStartup extends SyncopeSRAStartStop
         sf.setResourceProvider(
                 GatewayRouteService.class,
                 new SingletonResourceProvider(new StubGatewayRouteService(), true));
-        sf.setProviders(Collections.singletonList(new JacksonJsonProvider()));
+        sf.setProviders(List.of(new JacksonJsonProvider()));
         sf.create();
 
         // 2. register Core in Keymaster