docs: protected ModelAndView handleTicketValidation(final HttpServletRequest request, final WebApplicationService service, final String serviceTicketId) {
          var proxyGrantingTicketId = (TicketGrantingTicket) null;
          val serviceCredential = getServiceCredentialsFromRequest(service, request);
          if (serviceCredential != null) {
              try {
                  proxyGrantingTicketId = handleProxyGrantingTicketDelivery(serviceTicketId, serviceCredential);
              } catch (final AuthenticationException e) {
                  LOGGER.warn("Failed to authenticate service credential [{}]", serviceCredential);
                  return generateErrorView(CasProtocolConstants.ERROR_CODE_INVALID_PROXY_CALLBACK, new Object[]{serviceCredential.getId()}, request, service);
              } catch (final InvalidTicketException e) {
                  LOGGER.error("Failed to create proxy granting ticket due to an invalid ticket for [{}]", serviceCredential, e);
                  return generateErrorView(e.getCode(), new Object[]{serviceTicketId}, request, service);
              } catch (final AbstractTicketException e) {
                  LOGGER.error("Failed to create proxy granting ticket for [{}]", serviceCredential, e);
                  return generateErrorView(e.getCode(), new Object[]{serviceCredential.getId()}, request, service);
              }
          }
          val assertion = validateServiceTicket(service, serviceTicketId);
          if (!validateAssertion(request, serviceTicketId, assertion, service)) {
              return generateErrorView(CasProtocolConstants.ERROR_CODE_INVALID_TICKET, new Object[]{serviceTicketId}, request, service);
          }
  
          val ctxResult = serviceValidateConfigurationContext.getRequestedContextValidator().validateAuthenticationContext(assertion, request);
          if (!ctxResult.getKey()) {
              throw new UnsatisfiedAuthenticationContextTicketValidationException(assertion.getService());
          }
  
          var proxyIou = StringUtils.EMPTY;
          val proxyHandler = serviceValidateConfigurationContext.getProxyHandler();
          if (serviceCredential != null && proxyHandler != null && proxyHandler.canHandle(serviceCredential)) {
              proxyIou = handleProxyIouDelivery(serviceCredential, proxyGrantingTicketId);
              if (StringUtils.isEmpty(proxyIou)) {
                  return generateErrorView(CasProtocolConstants.ERROR_CODE_INVALID_PROXY_CALLBACK, new Object[]{serviceCredential.getId()}, request, service);
              }
          } else {
              LOGGER.debug("No service credentials specified, and/or the proxy handler [{}] cannot handle credentials", proxyHandler);
          }
          onSuccessfulValidation(serviceTicketId, assertion);
          LOGGER.debug("Successfully validated service ticket [{}] for service [{}]", serviceTicketId, service.getId());
          return generateSuccessView(assertion, proxyIou, service, request, ctxResult.getValue(), proxyGrantingTicketId);
      }