docs: protected void handleEcpRequest(final HttpServletResponse response, final HttpServletRequest request,
                                      final MessageContext soapContext, final Credential credential,
                                      final String binding) {
          LOGGER.debug("Handling ECP request for SOAP context [{}]", soapContext);
  
          val envelope = soapContext.getSubcontext(SOAP11Context.class).getEnvelope();
          SamlUtils.logSamlObject(getSamlProfileHandlerConfigurationContext().getOpenSamlConfigBean(), envelope);
  
          val authnRequest = (AuthnRequest) soapContext.getMessage();
          val authenticationContext = Pair.of(authnRequest, soapContext);
          try {
              LOGGER.trace("Verifying ECP authentication request [{}]", authnRequest);
              val serviceRequest = verifySamlAuthenticationRequest(authenticationContext, request);
  
              LOGGER.trace("Attempting to authenticate ECP request for credential id [{}]", credential.getId());
              val authentication = authenticateEcpRequest(credential, authenticationContext);
              LOGGER.debug("Authenticated [{}] successfully with authenticated principal [{}]",
                  credential.getId(), authentication.getPrincipal());
  
              LOGGER.trace("Building ECP SAML response for [{}]", credential.getId());
              val issuer = SamlIdPUtils.getIssuerFromSamlObject(authnRequest);
              val service = getSamlProfileHandlerConfigurationContext().getWebApplicationServiceFactory().createService(issuer);
              val casAssertion = buildCasAssertion(authentication, service, serviceRequest.getKey(), new LinkedHashMap<>());
  
              LOGGER.trace("CAS assertion to use for building ECP SAML response is [{}]", casAssertion);
              buildSamlResponse(response, request, authenticationContext, casAssertion, binding);
          } catch (final AuthenticationException e) {
              LOGGER.error(e.getMessage(), e);
              val error = e.getHandlerErrors().values()
                  .stream()
                  .map(Throwable::getMessage)
                  .filter(Objects::nonNull)
                  .collect(Collectors.joining(","));
              buildEcpFaultResponse(response, request, Pair.of(authnRequest, error));
          } catch (final Exception e) {
              LOGGER.error(e.getMessage(), e);
              buildEcpFaultResponse(response, request, Pair.of(authnRequest, e.getMessage()));
          }
      }