Class DefaultKafkaHeaderMapper

  • All Implemented Interfaces:
    KafkaHeaderMapper

    public class DefaultKafkaHeaderMapper
    extends AbstractKafkaHeaderMapper
    Default header mapper for Apache Kafka. Most headers in KafkaHeaders are not mapped on outbound messages. The exceptions are correlation and reply headers for request/reply messaging. Header types are added to a special header JSON_TYPES.
    Since:
    1.3
    Author:
    Gary Russell, Artem Bilan
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String JSON_TYPES
      Header name for java types of other headers.
    • Constructor Summary

      Constructors 
      Constructor Description
      DefaultKafkaHeaderMapper()
      Construct an instance with the default object mapper and default header patterns for outbound headers; all inbound headers are mapped.
      DefaultKafkaHeaderMapper​(com.fasterxml.jackson.databind.ObjectMapper objectMapper)
      Construct an instance with the provided object mapper and default header patterns for outbound headers; all inbound headers are mapped.
      DefaultKafkaHeaderMapper​(com.fasterxml.jackson.databind.ObjectMapper objectMapper, java.lang.String... patterns)
      Construct an instance with the provided object mapper and the provided header patterns for outbound headers; all inbound headers are mapped.
      DefaultKafkaHeaderMapper​(java.lang.String... patterns)
      Construct an instance with a default object mapper and the provided header patterns for outbound headers; all inbound headers are mapped.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addToStringClasses​(java.lang.String... classNames)
      Add class names that the outbound mapper should perform toString() operations on before mapping.
      void addTrustedPackages​(java.lang.String... packagesToTrust)
      Add packages to the trusted packages list (default java.util, java.lang) used when constructing objects from JSON.
      void fromHeaders​(org.springframework.messaging.MessageHeaders headers, org.apache.kafka.common.header.Headers target)
      Map from the given MessageHeaders to the specified target message.
      protected com.fasterxml.jackson.databind.ObjectMapper getObjectMapper()
      Return the object mapper.
      protected java.util.Set<java.lang.String> getToStringClasses()
      Provide direct access to the toString() classes by subclasses.
      protected java.util.Set<java.lang.String> getTrustedPackages()
      Provide direct access to the trusted packages set for subclasses.
      protected boolean isEncodeStrings()  
      void setEncodeStrings​(boolean encodeStrings)
      Set to true to encode String-valued headers as JSON ("..."), by default just the raw String value is converted to a byte array using the configured charset.
      void toHeaders​(org.apache.kafka.common.header.Headers source, java.util.Map<java.lang.String,​java.lang.Object> headers)
      Map from the given target message to abstracted MessageHeaders.
      protected boolean trusted​(java.lang.String requestedType)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • JSON_TYPES

        public static final java.lang.String JSON_TYPES
        Header name for java types of other headers.
        See Also:
        Constant Field Values
    • Constructor Detail

      • DefaultKafkaHeaderMapper

        public DefaultKafkaHeaderMapper()
        Construct an instance with the default object mapper and default header patterns for outbound headers; all inbound headers are mapped. The default pattern list is "!id", "!timestamp" and "*". In addition, most of the headers in KafkaHeaders are never mapped as headers since they represent data in consumer/producer records.
        See Also:
        DefaultKafkaHeaderMapper(ObjectMapper)
      • DefaultKafkaHeaderMapper

        public DefaultKafkaHeaderMapper​(com.fasterxml.jackson.databind.ObjectMapper objectMapper)
        Construct an instance with the provided object mapper and default header patterns for outbound headers; all inbound headers are mapped. The patterns are applied in order, stopping on the first match (positive or negative). Patterns are negated by preceding them with "!". The default pattern list is "!id", "!timestamp" and "*". In addition, most of the headers in KafkaHeaders are never mapped as headers since they represent data in consumer/producer records.
        Parameters:
        objectMapper - the object mapper.
        See Also:
        PatternMatchUtils.simpleMatch(String, String)
      • DefaultKafkaHeaderMapper

        public DefaultKafkaHeaderMapper​(java.lang.String... patterns)
        Construct an instance with a default object mapper and the provided header patterns for outbound headers; all inbound headers are mapped. The patterns are applied in order, stopping on the first match (positive or negative). Patterns are negated by preceding them with "!". The patterns will replace the default patterns; you generally should not map the "id" and "timestamp" headers. Note: most of the headers in KafkaHeaders are ever mapped as headers since they represent data in consumer/producer records.
        Parameters:
        patterns - the patterns.
        See Also:
        PatternMatchUtils.simpleMatch(String, String)
      • DefaultKafkaHeaderMapper

        public DefaultKafkaHeaderMapper​(com.fasterxml.jackson.databind.ObjectMapper objectMapper,
                                        java.lang.String... patterns)
        Construct an instance with the provided object mapper and the provided header patterns for outbound headers; all inbound headers are mapped. The patterns are applied in order, stopping on the first match (positive or negative). Patterns are negated by preceding them with "!". The patterns will replace the default patterns; you generally should not map the "id" and "timestamp" headers. Note: most of the headers in KafkaHeaders are never mapped as headers since they represent data in consumer/producer records.
        Parameters:
        objectMapper - the object mapper.
        patterns - the patterns.
        See Also:
        PatternMatchUtils.simpleMatch(String, String)
    • Method Detail

      • getObjectMapper

        protected com.fasterxml.jackson.databind.ObjectMapper getObjectMapper()
        Return the object mapper.
        Returns:
        the mapper.
      • getTrustedPackages

        protected java.util.Set<java.lang.String> getTrustedPackages()
        Provide direct access to the trusted packages set for subclasses.
        Returns:
        the trusted packages.
        Since:
        2.2
      • getToStringClasses

        protected java.util.Set<java.lang.String> getToStringClasses()
        Provide direct access to the toString() classes by subclasses.
        Returns:
        the toString() classes.
        Since:
        2.2
      • isEncodeStrings

        protected boolean isEncodeStrings()
      • setEncodeStrings

        public void setEncodeStrings​(boolean encodeStrings)
        Set to true to encode String-valued headers as JSON ("..."), by default just the raw String value is converted to a byte array using the configured charset. Set to true if a consumer of the outbound record is using Spring for Apache Kafka version less than 2.3
        Parameters:
        encodeStrings - true to encode (default false).
        Since:
        2.3
      • addTrustedPackages

        public void addTrustedPackages​(java.lang.String... packagesToTrust)
        Add packages to the trusted packages list (default java.util, java.lang) used when constructing objects from JSON. If any of the supplied packages is "*", all packages are trusted. If a class for a non-trusted package is encountered, the header is returned to the application with value of type DefaultKafkaHeaderMapper.NonTrustedHeaderType.
        Parameters:
        packagesToTrust - the packages to trust.
      • addToStringClasses

        public void addToStringClasses​(java.lang.String... classNames)
        Add class names that the outbound mapper should perform toString() operations on before mapping.
        Parameters:
        classNames - the class names.
        Since:
        2.2
      • fromHeaders

        public void fromHeaders​(org.springframework.messaging.MessageHeaders headers,
                                org.apache.kafka.common.header.Headers target)
        Description copied from interface: KafkaHeaderMapper
        Map from the given MessageHeaders to the specified target message.
        Parameters:
        headers - the abstracted MessageHeaders.
        target - the native target message.
      • toHeaders

        public void toHeaders​(org.apache.kafka.common.header.Headers source,
                              java.util.Map<java.lang.String,​java.lang.Object> headers)
        Description copied from interface: KafkaHeaderMapper
        Map from the given target message to abstracted MessageHeaders.
        Parameters:
        source - the native target message.
        headers - the target headers.
      • trusted

        protected boolean trusted​(java.lang.String requestedType)