private IMessage SerializeAndEmbedHeadersIfApplicable(IMessage message)
            {
                var transformed = new MessageValues(message);

                object payload;

                if (_embedHeaders)
                {
                    transformed.TryGetValue(MessageHeaders.CONTENT_TYPE, out var contentType);

                    // transform content type headers to String, so that they can be properly
                    // embedded in JSON
                    if (contentType != null)
                    {
                        transformed[MessageHeaders.CONTENT_TYPE] = contentType.ToString();
                    }

                    payload = EmbeddedHeaderUtils.EmbedHeaders(transformed, _embeddedHeaders);
                }
                else
                {
                    payload = transformed.Payload;
                }

                return(IntegrationServices.MessageBuilderFactory.WithPayload(payload).CopyHeaders(transformed.Headers).Build());
            }
        public void TestHeaderEmbedding()
        {
            byte[] typeHeaderName  = Encoding.UTF8.GetBytes("type");             // 4 bytes
            byte[] typeHeaderValue = Encoding.UTF8.GetBytes("GreetingsMessage"); // 16 bytes
            byte[] idHeaderName    = Encoding.UTF8.GetBytes("id");               // 2 bytes
            byte[] idHeaderValue   = Encoding.UTF8.GetBytes("{1234-5678}");      // 11 bytes
            byte[] body            = Encoding.UTF8.GetBytes("Hello Kafka-さん");   // 12 + 2*3 = 18 bytes
            var    typeHeader      = new Header(typeHeaderName, typeHeaderValue);
            var    idHeader        = new Header(idHeaderName, idHeaderValue);
            var    originalHeaders = new List <Header> {
                typeHeader, idHeader
            };

            byte[] payload = EmbeddedHeaderUtils.EmbedHeaders(originalHeaders, body);
            Assert.Equal(0xff, payload[0]);
            Assert.Equal(2, payload[1]);
            Assert.Equal(4, payload[2]);
            Assert.Equal(typeHeaderName, Slice(payload, 3, 4));
            Assert.Equal(new byte[] { 0, 0, 0, 16 }, Slice(payload, 7, 4));
            Assert.Equal(typeHeaderValue, Slice(payload, 11, 16));
            Assert.Equal(2, payload[27]);
            Assert.Equal(idHeaderName, Slice(payload, 28, 2));
            Assert.Equal(new byte[] { 0, 0, 0, 11 }, Slice(payload, 30, 4));
            Assert.Equal(idHeaderValue, Slice(payload, 34, 11));
            Assert.Equal(body, Slice(payload, 45, 18));

            (var extractedHeaders, var extractedBody) = EmbeddedHeaderUtils.ExtractHeaders(payload);
            Assert.Equal(2, extractedHeaders.Count);
            Assert.Equal(typeHeaderName, extractedHeaders[0].Name);
            Assert.Equal(typeHeaderValue, extractedHeaders[0].Value);
            Assert.Equal(idHeaderName, extractedHeaders[1].Name);
            Assert.Equal(idHeaderValue, extractedHeaders[1].Value);
            Assert.Equal(body, extractedBody);
        }
Esempio n. 3
0
 public void NotMagical_False()
 {
     Assert.False(EmbeddedHeaderUtils.MayHaveEmbeddedHeaders(new byte[] { 0x0, 0, 0, 0, 0, 0, 0, 0, 0 }));
 }
Esempio n. 4
0
 public void LongAndMagical_True()
 {
     Assert.True(EmbeddedHeaderUtils.MayHaveEmbeddedHeaders(new byte[] { 0xff, 0, 0, 0, 0, 0, 0, 0, 0 }));
 }
Esempio n. 5
0
 public void ShortMessage_False()
 {
     Assert.False(EmbeddedHeaderUtils.MayHaveEmbeddedHeaders(new byte[] { 0xff, 0, 0, 0, 0, 0, 0, 0 }));
 }