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); }
public void NotMagical_False() { Assert.False(EmbeddedHeaderUtils.MayHaveEmbeddedHeaders(new byte[] { 0x0, 0, 0, 0, 0, 0, 0, 0, 0 })); }
public void LongAndMagical_True() { Assert.True(EmbeddedHeaderUtils.MayHaveEmbeddedHeaders(new byte[] { 0xff, 0, 0, 0, 0, 0, 0, 0, 0 })); }
public void ShortMessage_False() { Assert.False(EmbeddedHeaderUtils.MayHaveEmbeddedHeaders(new byte[] { 0xff, 0, 0, 0, 0, 0, 0, 0 })); }