protected AbstractPac4jDecoder getDecoder(final CallContext callContext) {
        final AbstractPac4jDecoder decoder;
        val artifact = callContext.webContext().getRequestParameter("SAMLart");
        // artifact binding
        if (artifact.isPresent()) {
            decoder = new SAML2ArtifactBindingDecoder(callContext, idpMetadataResolver,
                spMetadataResolver, soapPipelineProvider);
            try {
                decoder.setParserPool(Configuration.getParserPool());
                decoder.initialize();
                decoder.decode();
            } catch (final Exception e) {
                throw new SAMLException("Error decoding Artifact SAML message", e);
            }

        // POST / SOAP binding
        } else if (WebContextHelper.isPost(callContext.webContext())) {
            decoder = new Pac4jHTTPPostDecoder(callContext);
            try {
                decoder.setParserPool(Configuration.getParserPool());
                decoder.initialize();
                decoder.decode();

            } catch (final Exception e) {
                throw new SAMLException("Error decoding POST SAML message", e);
            }

        // HTTP Redirect binding
        } else if (WebContextHelper.isGet(callContext.webContext())) {
            decoder = new Pac4jHTTPRedirectDeflateDecoder(callContext);

            try {
                decoder.setParserPool(Configuration.getParserPool());
                decoder.initialize();
                decoder.decode();

            } catch (final Exception e) {
                throw new SAMLException("Error decoding HTTP-Redirect SAML message", e);
            }
        } else {
            throw new SAMLException("Unsupported binding");
        }
        return decoder;
    }
<p>getDecoder.</p>

@param callContext a {@link CallContext} object
@return a {@link AbstractPac4jDecoder} object
pac4j-saml/src/main/java/org/pac4j/saml/credentials/extractor/SAML2CredentialsExtractor.java