Documentation for a newer release is available. View Latest

Agregar cabeceras a TransportMessages

¿Cómo agrego cabeceras a un mensaje saliente?

Este ejemplo de Connector muestra cómo puede agregar cualquier número de cabeceras a los mensajes enviados por un SendingConnector. Las cabeceras se crean durante la conversión de un tipo de destino a la etapa TransportMessage, como se describe en Stages.

Implementación de un SendTransportMessageConverter

El componente que realiza la transformación a TransportMessage se llama SendTransportMessageConverter. Para ver cómo registrar su convertidor con un connector, consulte esta página de primeros pasos.

A continuación se muestra un convertidor de ejemplo que, condicionalmente, crea algunas cabeceras y las agrega al mensaje de transporte:

SendTransportMessageConverter<YourTargetType> converter() {
    return toSend -> {
        MessageHeaders headers = /*condition*/
            ? new MessageHeaders("foo", "bar") (1)
            : new MessageHeaders(Map.of("foo", "bar", "baz", "qux")); (2)

        if (/*another condition*/) {
            headers = headers.putHeader("a", "b") (3)
        } else {
            headers = headers.putHeaders(Map.of("c", MultiValueHeader.of("d", "e"))) (4)
        }

        return new TransportMessage(headers, SerializationHelper.objectToString(toSend)); (5)
    }
}
1 Creación de una instancia de MessageHeaders con una sola cabecera (foo) que contiene un único valor (bar)
2 Creación de una instancia de MessageHeaders a partir de un Map, donde cada par clave-valor corresponde a un nombre de cabecera y su valor
3 Observe la asignación a headers: MessageHeaders es un tipo inmutable, por lo que putHeader crea una nueva instancia que contiene la cabecera adicional a
4 También es posible crear una cabecera multi-valor: simplemente use una instancia del tipo MultiValueHeader como contenedor para sus valores
5 Finalmente, no olvide crear el TransportMessage resultante con la instancia correcta de MessageHeaders