<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright (c) 2021-2025, WSO2 LLC. (http://www.wso2.com).
  ~
  ~ WSO2 LLC. licenses this file to you under the Apache License,
  ~ Version 2.0 (the "License"); you may not use this file except
  ~ in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~ http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied.  See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <display-name>WSO2 Identity Server REST API</display-name>
    <description>WSO2 Identity Server REST API</description>

    <!-- Servlet instance for /server/v1 -->
    <servlet>
        <servlet-name>ServerV1ApiServlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.rest.api.server.claim.management.v1.ClaimManagementApi,
                org.wso2.carbon.identity.rest.api.server.email.template.v1.EmailApi,
                org.wso2.carbon.identity.rest.api.server.notification.template.v1.NotificationApi,
                org.wso2.carbon.identity.api.server.identity.governance.v1.IdentityGovernanceApi,
                org.wso2.carbon.identity.api.server.admin.advisory.management.v1.AdminAdvisoryManagementApi,
                org.wso2.carbon.identity.api.server.application.management.v1.ApplicationsApi,
                org.wso2.carbon.identity.api.server.asynchronous.operation.status.management.v1.AsyncOperationsApi,
                org.wso2.carbon.identity.api.server.userstore.v1.UserstoresApi,
                org.wso2.carbon.identity.api.server.permission.management.v1.PermissionManagementApi,
                org.wso2.carbon.identity.api.server.keystore.management.v1.KeystoresApi,
                org.wso2.carbon.identity.api.server.idp.v1.IdentityProvidersApi,
                org.wso2.carbon.identity.api.server.idp.v1.TrustedTokenIssuersApi,
                org.wso2.carbon.identity.api.server.configs.v1.ConfigsApi,
                org.wso2.carbon.identity.api.server.oidc.scope.management.v1.OidcApi,
                org.wso2.carbon.identity.api.server.script.library.v1.ScriptLibrariesApi,
                org.wso2.carbon.identity.api.server.tenant.management.v1.TenantsApi,
                org.wso2.carbon.identity.api.server.tenant.management.v1.ChannelVerifiedTenantsApi,
                org.wso2.carbon.identity.api.server.cors.v1.CorsApi,
                org.wso2.carbon.identity.api.server.notification.sender.v1.NotificationSendersApi,
                org.wso2.carbon.identity.api.server.authenticators.v1.AuthenticatorsApi,
                org.wso2.carbon.identity.api.server.secret.management.v1.SecretsApi,
                org.wso2.carbon.identity.api.server.secret.management.v1.SecretTypeApi,
                org.wso2.carbon.identity.api.server.branding.preference.management.v1.BrandingPreferenceApi,
                org.wso2.carbon.identity.api.server.input.validation.v1.ValidationRulesApi,
                org.wso2.carbon.identity.api.server.extension.management.v1.ExtensionsApi,
                org.wso2.carbon.identity.api.server.idv.provider.v1.IdvProvidersApi,
                org.wso2.carbon.identity.api.server.organization.management.v1.OrganizationsApi,
                org.wso2.carbon.identity.api.server.organization.role.management.v1.OrganizationsApi,
                org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1.GuestsApi,
                org.wso2.carbon.identity.api.server.organization.user.sharing.management.v1.UsersApi,
                org.wso2.carbon.identity.api.server.organization.configs.v1.OrganizationConfigsApi,
                org.wso2.carbon.identity.api.expired.password.identification.v1.PasswordExpiredUsersApi,
                org.wso2.carbon.identity.api.server.api.resource.v1.ApiResourcesApi,
                org.wso2.carbon.identity.api.server.api.resource.v1.ScopesApi,
                org.wso2.carbon.identity.api.server.organization.selfservice.v1.SelfServiceApi,
                org.wso2.carbon.identity.api.server.api.resource.v1.MetaApi,
                org.wso2.carbon.identity.api.server.action.management.v1.ActionsApi,
                org.wso2.carbon.identity.api.server.certificate.validation.management.v1.CertificateValidationApi,
                org.wso2.carbon.identity.api.server.webhook.management.v1.WebhooksApi,
                org.wso2.carbon.identity.api.server.webhook.metadata.v1.WebhooksApi,
                org.wso2.carbon.identity.api.server.rule.metadata.v1.RulesApi,
                org.wso2.carbon.identity.api.server.api.resource.v1.AuthorizationDetailsTypesApi,
                org.wso2.carbon.identity.api.server.flow.management.v1.FlowApi,
                org.wso2.carbon.identity.api.server.flow.execution.v1.FlowApi,
                org.wso2.carbon.identity.rest.api.server.workflow.v1.WorkflowsApi,
                org.wso2.carbon.identity.rest.api.server.workflow.v1.WorkflowAssociationsApi,
                org.wso2.carbon.identity.rest.api.server.workflow.v1.WorkflowInstancesApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomJacksonJsonProvider,
                com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider,
                org.wso2.carbon.identity.api.dispatcher.core.JsonProcessingExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.APIErrorExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.InputValidationExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.DefaultExceptionMapper,
                org.apache.cxf.jaxrs.ext.search.SearchContextProvider
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.inInterceptors</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomBeanValidationInterceptor
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServerV1ApiServlet</servlet-name>
        <url-pattern>/server/v1/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /server/v2 -->
    <servlet>
        <servlet-name>ServerV2Servlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.rest.api.server.email.template.v2.EmailApi,
                org.wso2.carbon.identity.api.server.notification.sender.v2.NotificationSendersApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomJacksonJsonProvider,
                org.wso2.carbon.identity.api.dispatcher.core.JsonProcessingExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.APIErrorExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.InputValidationExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.DefaultExceptionMapper,
                org.apache.cxf.jaxrs.ext.search.SearchContextProvider
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServerV2Servlet</servlet-name>
        <url-pattern>/server/v2/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /o/server/v1 -->
    <servlet>
        <servlet-name>OrganizationServerV1Servlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.rest.api.server.claim.management.v1.ClaimManagementApi,
                org.wso2.carbon.identity.rest.api.server.email.template.v1.EmailApi,
                org.wso2.carbon.identity.rest.api.server.notification.template.v1.NotificationApi,
                org.wso2.carbon.identity.api.server.identity.governance.v1.IdentityGovernanceApi,
                org.wso2.carbon.identity.api.server.application.management.v1.ApplicationsApi,
                org.wso2.carbon.identity.api.server.asynchronous.operation.status.management.v1.AsyncOperationsApi,
                org.wso2.carbon.identity.api.server.userstore.v1.UserstoresApi,
                org.wso2.carbon.identity.api.server.idp.v1.IdentityProvidersApi,
                org.wso2.carbon.identity.api.server.configs.v1.ConfigsApi,
                org.wso2.carbon.identity.api.server.cors.v1.CorsApi,
                org.wso2.carbon.identity.api.server.notification.sender.v1.NotificationSendersApi,
                org.wso2.carbon.identity.api.server.authenticators.v1.AuthenticatorsApi,
                org.wso2.carbon.identity.api.server.branding.preference.management.v1.BrandingPreferenceApi,
                org.wso2.carbon.identity.api.server.input.validation.v1.ValidationRulesApi,
                org.wso2.carbon.identity.api.server.extension.management.v1.ExtensionsApi,
                org.wso2.carbon.identity.api.server.idv.provider.v1.IdvProvidersApi,
                org.wso2.carbon.identity.api.server.organization.management.v1.OrganizationsApi,
                org.wso2.carbon.identity.api.server.organization.role.management.v1.OrganizationsApi,
                org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1.GuestsApi,
                org.wso2.carbon.identity.api.server.organization.user.sharing.management.v1.UsersApi,
                org.wso2.carbon.identity.api.server.organization.configs.v1.OrganizationConfigsApi,
                org.wso2.carbon.identity.api.server.organization.selfservice.v1.SelfServiceApi,
                org.wso2.carbon.identity.api.expired.password.identification.v1.PasswordExpiredUsersApi,
                org.wso2.carbon.identity.api.server.api.resource.v1.ApiResourcesApi,
                org.wso2.carbon.identity.api.server.api.resource.v1.ScopesApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomJacksonJsonProvider,
                com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider,
                org.wso2.carbon.identity.api.dispatcher.core.JsonProcessingExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.APIErrorExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.InputValidationExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.DefaultExceptionMapper,
                org.apache.cxf.jaxrs.ext.search.SearchContextProvider
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.inInterceptors</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomBeanValidationInterceptor
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>OrganizationServerV1Servlet</servlet-name>
        <url-pattern>/o/server/v1/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /o/server/v2 -->
    <servlet>
        <servlet-name>OrganizationServerV2Servlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.rest.api.server.email.template.v2.EmailApi,
                org.wso2.carbon.identity.api.server.notification.sender.v2.NotificationSendersApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomJacksonJsonProvider,
                com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider,
                org.wso2.carbon.identity.api.dispatcher.core.JsonProcessingExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.APIErrorExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.InputValidationExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.DefaultExceptionMapper,
                org.apache.cxf.jaxrs.ext.search.SearchContextProvider
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>OrganizationServerV2Servlet</servlet-name>
        <url-pattern>/o/server/v2/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /users/v1/me/organizations -->
    <servlet>
        <servlet-name>OrgUserServlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.rest.api.user.organization.v1.RootApi,
                org.wso2.carbon.identity.rest.api.user.organization.v1.MeApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomJacksonJsonProvider,
                org.wso2.carbon.identity.api.dispatcher.core.JsonProcessingExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.APIErrorExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.InputValidationExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.DefaultExceptionMapper
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.inInterceptors</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomBeanValidationInterceptor
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>OrgUserServlet</servlet-name>
        <url-pattern>/users/v1/me/organizations/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /users/v1/me/push -->
    <servlet>
        <servlet-name>UsersPushApiServlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.rest.api.user.push.v1.DevicesApi,
                org.wso2.carbon.identity.rest.api.user.push.v1.DiscoveryDataApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomJacksonJsonProvider,
                org.wso2.carbon.identity.api.dispatcher.core.JsonProcessingExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.APIErrorExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.InputValidationExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.DefaultExceptionMapper
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.inInterceptors</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomBeanValidationInterceptor
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>UsersPushApiServlet</servlet-name>
        <url-pattern>/users/v1/me/push/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /o/users/v1/me/push -->
    <servlet>
        <servlet-name>OrgUsersPushApiServlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.rest.api.user.push.v1.DevicesApi,
                org.wso2.carbon.identity.rest.api.user.push.v1.DiscoveryDataApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomJacksonJsonProvider,
                org.wso2.carbon.identity.api.dispatcher.core.JsonProcessingExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.APIErrorExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.InputValidationExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.DefaultExceptionMapper
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.inInterceptors</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomBeanValidationInterceptor
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>OrgUsersPushApiServlet</servlet-name>
        <url-pattern>/o/users/v1/me/push/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for users/v1 -->
    <servlet>
        <servlet-name>UserV1Servlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.rest.api.user.application.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.association.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.association.v1.UserIdApi,
                org.wso2.carbon.identity.rest.api.user.association.v1.FederatedAssociationsApi,
                org.wso2.carbon.identity.rest.api.user.authorized.apps.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.authorized.apps.v1.UserIdApi,
                org.wso2.carbon.identity.rest.api.user.backupcode.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.fido2.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.functionality.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.functionality.v1.UserIdApi,
                org.wso2.carbon.identity.rest.api.user.mfa.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.recovery.v1.RecoveryApi,
                org.wso2.carbon.identity.rest.api.user.session.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.session.v1.SessionsApi,
                org.wso2.carbon.identity.rest.api.user.session.v1.UserIdApi,
                org.wso2.carbon.identity.rest.api.user.totp.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.idv.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.idv.v1.DefaultApi,
                org.wso2.carbon.identity.api.user.onboard.v1.OfflineInviteLinkApi,
                org.wso2.carbon.identity.rest.api.user.approval.v1.MeApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomJacksonJsonProvider,
                org.wso2.carbon.identity.api.dispatcher.core.JsonProcessingExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.APIErrorExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.InputValidationExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.DefaultExceptionMapper
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.inInterceptors</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomBeanValidationInterceptor
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>UserV1Servlet</servlet-name>
        <url-pattern>/users/v1/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /users/v2/me/webauthn -->
    <servlet>
        <servlet-name>UsersV2MeWebauthnApiServlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.application.authenticator.fido2.endpoint.DefaultApi,
                org.wso2.carbon.identity.application.authenticator.fido2.endpoint.FinishRegistrationApi,
                org.wso2.carbon.identity.application.authenticator.fido2.endpoint.StartRegistrationApi,
                org.wso2.carbon.identity.application.authenticator.fido2.endpoint.StartUsernamelessRegistrationApi,
                org.wso2.carbon.identity.application.authenticator.fido2.endpoint.CredentialIdApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>UsersV2MeWebauthnApiServlet</servlet-name>
        <url-pattern>/users/v2/me/webauthn/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for users/v2 -->
    <servlet>
        <servlet-name>UsersV2Servlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.rest.api.user.authorized.apps.v2.MeApi,
                org.wso2.carbon.identity.rest.api.user.authorized.apps.v2.UserIdApi,
                org.wso2.carbon.identity.rest.api.user.authorized.apps.v2.AuthorizedAppsApi,
                org.wso2.carbon.identity.rest.api.user.recovery.v2.RecoveryApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomJacksonJsonProvider,
                org.wso2.carbon.identity.api.dispatcher.core.JsonProcessingExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.APIErrorExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.InputValidationExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.DefaultExceptionMapper
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.inInterceptors</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomBeanValidationInterceptor
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>UsersV2Servlet</servlet-name>
        <url-pattern>/users/v2/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /o/users/v1/me/organizations -->
    <servlet>
        <servlet-name>OrganizationOrgUserServlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.rest.api.user.organization.v1.RootApi,
                org.wso2.carbon.identity.rest.api.user.organization.v1.MeApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomJacksonJsonProvider,
                org.wso2.carbon.identity.api.dispatcher.core.JsonProcessingExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.APIErrorExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.InputValidationExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.DefaultExceptionMapper
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.inInterceptors</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomBeanValidationInterceptor
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>OrganizationOrgUserServlet</servlet-name>
        <url-pattern>/o/users/v1/me/organizations/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /o/users/v1 -->
    <servlet>
        <servlet-name>OrganizationUsersV1Servlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.rest.api.user.application.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.association.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.association.v1.UserIdApi,
                org.wso2.carbon.identity.rest.api.user.association.v1.FederatedAssociationsApi,
                org.wso2.carbon.identity.rest.api.user.authorized.apps.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.authorized.apps.v1.UserIdApi,
                org.wso2.carbon.identity.rest.api.user.backupcode.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.fido2.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.functionality.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.functionality.v1.UserIdApi,
                org.wso2.carbon.identity.rest.api.user.mfa.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.recovery.v1.RecoveryApi,
                org.wso2.carbon.identity.rest.api.user.session.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.session.v1.SessionsApi,
                org.wso2.carbon.identity.rest.api.user.session.v1.UserIdApi,
                org.wso2.carbon.identity.rest.api.user.totp.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.idv.v1.MeApi,
                org.wso2.carbon.identity.rest.api.user.idv.v1.DefaultApi,
                org.wso2.carbon.identity.api.user.onboard.v1.OfflineInviteLinkApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomJacksonJsonProvider,
                org.wso2.carbon.identity.api.dispatcher.core.JsonProcessingExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.APIErrorExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.InputValidationExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.DefaultExceptionMapper
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.inInterceptors</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomBeanValidationInterceptor
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>OrganizationUsersV1Servlet</servlet-name>
        <url-pattern>/o/users/v1/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /o/users/v2 -->
    <servlet>
        <servlet-name>OrganizationUsersV2Servlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.rest.api.user.authorized.apps.v2.MeApi,
                org.wso2.carbon.identity.rest.api.user.authorized.apps.v2.UserIdApi,
                org.wso2.carbon.identity.rest.api.user.authorized.apps.v2.AuthorizedAppsApi,
                org.wso2.carbon.identity.rest.api.user.recovery.v2.RecoveryApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomJacksonJsonProvider,
                org.wso2.carbon.identity.api.dispatcher.core.JsonProcessingExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.APIErrorExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.InputValidationExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.DefaultExceptionMapper
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.inInterceptors</param-name>
            <param-value>
                org.wso2.carbon.identity.servlet.mgt.CustomBeanValidationInterceptor
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>OrganizationUsersV2Servlet</servlet-name>
        <url-pattern>/o/users/v2/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /identity/config-mgt/v1.0 -->
    <servlet>
        <servlet-name>ConfigMgtServlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.configuration.mgt.endpoint.ResourceApi,
                org.wso2.carbon.identity.configuration.mgt.endpoint.ResourceTypeApi,
                org.wso2.carbon.identity.configuration.mgt.endpoint.SearchApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider,
                org.apache.cxf.jaxrs.ext.search.SearchContextProvider
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>ConfigMgtServlet</servlet-name>
        <url-pattern>/identity/config-mgt/v1.0/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /identity/user/v1.0 -->
    <servlet>
        <servlet-name>IdentityUserV1ApiServlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.user.endpoint.IntrospectCodeApi,
                org.wso2.carbon.identity.user.endpoint.LiteApi,
                org.wso2.carbon.identity.user.endpoint.MeApi,
                org.wso2.carbon.identity.user.endpoint.PiInfoApi,
                org.wso2.carbon.identity.user.endpoint.ResendCodeApi,
                org.wso2.carbon.identity.user.endpoint.UpdateUsernameApi,
                org.wso2.carbon.identity.user.endpoint.ValidateCodeApi,
                org.wso2.carbon.identity.user.endpoint.ValidateUsernameApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider,
                org.wso2.carbon.identity.user.endpoint.exceptions.UserEndpointExceptionMapper
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>IdentityUserV1ApiServlet</servlet-name>
        <url-pattern>/identity/user/v1.0/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /identity/recovery/v0.9 -->
    <servlet>
        <servlet-name>IdentityRecoveryV0_9ApiServlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.recovery.endpoint.ClaimsApi,
                org.wso2.carbon.identity.recovery.endpoint.RecoverPasswordApi,
                org.wso2.carbon.identity.recovery.endpoint.RecoverUsernameApi,
                org.wso2.carbon.identity.recovery.endpoint.SetPasswordApi,
                org.wso2.carbon.identity.recovery.endpoint.ValidateCodeApi,
                org.wso2.carbon.identity.recovery.endpoint.CaptchaApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider,
                org.wso2.carbon.identity.recovery.endpoint.filter.ResponseValidationFilter,
                org.wso2.carbon.identity.recovery.endpoint.Exceptions.RecoveryEndpointExceptionMapper
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>IdentityRecoveryV0_9ApiServlet</servlet-name>
        <url-pattern>/identity/recovery/v0.9/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /identity/consent-mgt/v1.0 -->
    <servlet>
        <servlet-name>IdentityConsentMgtV1ApiServlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.consent.mgt.endpoint.ConsentsApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider,
                org.wso2.carbon.consent.mgt.endpoint.expmapper.ConsentEndpointExceptionMapper,
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>IdentityConsentMgtV1ApiServlet</servlet-name>
        <url-pattern>/identity/consent-mgt/v1.0/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /identity/oauth2/dcr/v1.1 -->
    <servlet>
        <servlet-name>IdentityOAuth2DcrV1_1ApiServlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.oauth2.dcr.endpoint.RegisterApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider,
                org.wso2.carbon.identity.oauth2.dcr.endpoint.exmapper.JsonProcessingExceptionMapper,
                com.fasterxml.jackson.jaxrs.base.JsonMappingExceptionMapper,
                com.fasterxml.jackson.jaxrs.base.JsonParseExceptionMapper
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>IdentityOAuth2DcrV1_1ApiServlet</servlet-name>
        <url-pattern>/identity/oauth2/dcr/v1.1/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /identity/oauth2/v1.0 -->
    <servlet>
        <servlet-name>IdentityOAuth2V1ApiServlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.oauth.scope.endpoint.ScopesApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider,
                org.wso2.carbon.identity.oauth.scope.endpoint.expmapper.JsonProcessingExceptionMapper
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>IdentityOAuth2V1ApiServlet</servlet-name>
        <url-pattern>/identity/oauth2/v1.0/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /identity/auth/v1.1 -->
    <servlet>
        <servlet-name>IdentityAuthV1_1ApiServlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.local.auth.api.endpoint.AuthenticateApi,
                org.wso2.carbon.identity.local.auth.api.endpoint.ContextApi,
                org.wso2.carbon.identity.local.auth.api.endpoint.DataApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider,
                org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper(printStackTrace=false)
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>IdentityAuthV1_1ApiServlet</servlet-name>
        <url-pattern>/identity/auth/v1.1/*</url-pattern>
    </servlet-mapping>

    <!--  Servlet instance for /idle-account-identification/v1/ -->
    <servlet>
        <servlet-name>IdleAccountIdentificationV1Servlet</servlet-name>
        <servlet-class>
            org.wso2.carbon.identity.servlet.mgt.CustomCXFNonSpringJaxrsServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>
                org.wso2.carbon.identity.api.idle.account.identification.v1.InactiveUsersApi
            </param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.providers</param-name>
            <param-value>
                com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider,
                org.wso2.carbon.identity.api.dispatcher.core.JsonProcessingExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.APIErrorExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.InputValidationExceptionMapper,
                org.wso2.carbon.identity.api.dispatcher.core.DefaultExceptionMapper
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>IdleAccountIdentificationV1Servlet</servlet-name>
        <url-pattern>/idle-account-identification/v1/*</url-pattern>
    </servlet-mapping>
</web-app>
