docs: @SneakyThrows
      public <T extends SAMLObject> T encode(final T samlObject,
                                             final SamlRegisteredService service,
                                             final SamlRegisteredServiceServiceProviderMetadataFacade adaptor,
                                             final HttpServletResponse response,
                                             final HttpServletRequest request,
                                             final String binding,
                                             final RequestAbstractType authnRequest) throws SamlException {
  
          LOGGER.trace("Attempting to encode [{}] for [{}]", samlObject.getClass().getName(), adaptor.getEntityId());
          val outboundContext = new MessageContext<T>();
          prepareOutboundContext(samlObject, adaptor, outboundContext, binding, authnRequest);
          prepareSecurityParametersContext(adaptor, outboundContext, service);
          prepareEndpointURLSchemeSecurityHandler(outboundContext);
          prepareSamlOutboundDestinationHandler(outboundContext);
          prepareSamlOutboundProtocolMessageSigningHandler(outboundContext);
          return samlObject;
  
      }