Search in sources :

Example 1 with AvroSchemaRegistryClientMessageConverter

use of org.springframework.cloud.stream.schema.avro.AvroSchemaRegistryClientMessageConverter in project spring-cloud-stream by spring-cloud.

the class AvroMessageConverterSerializationTests method sourceWriteSameVersion.

@Test
public void sourceWriteSameVersion() throws Exception {
    User specificRecord = new User();
    specificRecord.setName("joe");
    Schema v1 = new Schema.Parser().parse(AvroMessageConverterSerializationTests.class.getClassLoader().getResourceAsStream("schemas/user.avsc"));
    GenericRecord genericRecord = new GenericData.Record(v1);
    genericRecord.put("name", "joe");
    SchemaRegistryClient client = new DefaultSchemaRegistryClient();
    AvroSchemaRegistryClientMessageConverter converter = new AvroSchemaRegistryClientMessageConverter(client, new NoOpCacheManager());
    converter.setSubjectNamingStrategy(new DefaultSubjectNamingStrategy());
    converter.setDynamicSchemaGenerationEnabled(false);
    converter.afterPropertiesSet();
    Message specificMessage = converter.toMessage(specificRecord, new MutableMessageHeaders(Collections.<String, Object>emptyMap()), MimeTypeUtils.parseMimeType("application/*+avro"));
    SchemaReference specificRef = extractSchemaReference(MimeTypeUtils.parseMimeType(specificMessage.getHeaders().get("contentType").toString()));
    Message genericMessage = converter.toMessage(genericRecord, new MutableMessageHeaders(Collections.<String, Object>emptyMap()), MimeTypeUtils.parseMimeType("application/*+avro"));
    SchemaReference genericRef = extractSchemaReference(MimeTypeUtils.parseMimeType(genericMessage.getHeaders().get("contentType").toString()));
    Assert.assertEquals(genericRef, specificRef);
    Assert.assertEquals(1, genericRef.getVersion());
}
Also used : User(example.avro.User) Message(org.springframework.messaging.Message) Schema(org.apache.avro.Schema) NoOpCacheManager(org.springframework.cache.support.NoOpCacheManager) SchemaReference(org.springframework.cloud.stream.schema.SchemaReference) DefaultSubjectNamingStrategy(org.springframework.cloud.stream.schema.avro.DefaultSubjectNamingStrategy) AvroSchemaRegistryClientMessageConverter(org.springframework.cloud.stream.schema.avro.AvroSchemaRegistryClientMessageConverter) GenericRecord(org.apache.avro.generic.GenericRecord) GenericRecord(org.apache.avro.generic.GenericRecord) MutableMessageHeaders(org.springframework.integration.support.MutableMessageHeaders) DefaultSchemaRegistryClient(org.springframework.cloud.stream.schema.client.DefaultSchemaRegistryClient) DefaultSchemaRegistryClient(org.springframework.cloud.stream.schema.client.DefaultSchemaRegistryClient) SchemaRegistryClient(org.springframework.cloud.stream.schema.client.SchemaRegistryClient) Test(org.junit.Test)

Example 2 with AvroSchemaRegistryClientMessageConverter

use of org.springframework.cloud.stream.schema.avro.AvroSchemaRegistryClientMessageConverter in project spring-cloud-stream by spring-cloud.

the class AvroMessageConverterSerializationTests method testOriginalContentTypeHeaderOnly.

@Test
public void testOriginalContentTypeHeaderOnly() throws Exception {
    User specificRecord = new User();
    specificRecord.setName("joe");
    Schema v1 = new Schema.Parser().parse(AvroMessageConverterSerializationTests.class.getClassLoader().getResourceAsStream("schemas/user.avsc"));
    GenericRecord genericRecord = new GenericData.Record(v1);
    genericRecord.put("name", "joe");
    SchemaRegistryClient client = new DefaultSchemaRegistryClient();
    client.register("user", "avro", v1.toString());
    AvroSchemaRegistryClientMessageConverter converter = new AvroSchemaRegistryClientMessageConverter(client, new NoOpCacheManager());
    converter.setDynamicSchemaGenerationEnabled(false);
    converter.afterPropertiesSet();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    DatumWriter<User> writer = new SpecificDatumWriter<>(User.class);
    Encoder encoder = EncoderFactory.get().binaryEncoder(baos, null);
    writer.write(specificRecord, encoder);
    encoder.flush();
    Message source = MessageBuilder.withPayload(baos.toByteArray()).setHeader(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.APPLICATION_OCTET_STREAM).setHeader(BinderHeaders.BINDER_ORIGINAL_CONTENT_TYPE, "application/vnd.user.v1+avro").build();
    Object converted = converter.fromMessage(source, User.class);
    Assert.assertNotNull(converted);
    Assert.assertEquals(specificRecord.getName().toString(), ((User) converted).getName().toString());
}
Also used : User(example.avro.User) Message(org.springframework.messaging.Message) Schema(org.apache.avro.Schema) NoOpCacheManager(org.springframework.cache.support.NoOpCacheManager) ByteArrayOutputStream(java.io.ByteArrayOutputStream) SpecificDatumWriter(org.apache.avro.specific.SpecificDatumWriter) AvroSchemaRegistryClientMessageConverter(org.springframework.cloud.stream.schema.avro.AvroSchemaRegistryClientMessageConverter) Encoder(org.apache.avro.io.Encoder) GenericRecord(org.apache.avro.generic.GenericRecord) GenericRecord(org.apache.avro.generic.GenericRecord) DefaultSchemaRegistryClient(org.springframework.cloud.stream.schema.client.DefaultSchemaRegistryClient) DefaultSchemaRegistryClient(org.springframework.cloud.stream.schema.client.DefaultSchemaRegistryClient) SchemaRegistryClient(org.springframework.cloud.stream.schema.client.SchemaRegistryClient) Test(org.junit.Test)

Example 3 with AvroSchemaRegistryClientMessageConverter

use of org.springframework.cloud.stream.schema.avro.AvroSchemaRegistryClientMessageConverter in project spring-cloud-stream by spring-cloud.

the class AvroSchemaRegistryClientMessageConverterTests method testNoCacheConfiguration.

@Test
public void testNoCacheConfiguration() {
    ConfigurableApplicationContext sourceContext = SpringApplication.run(NoCacheConfiguration.class, "--spring.main.web-environment=false");
    AvroSchemaRegistryClientMessageConverter converter = sourceContext.getBean(AvroSchemaRegistryClientMessageConverter.class);
    DirectFieldAccessor accessor = new DirectFieldAccessor(converter);
    assertThat(accessor.getPropertyValue("cacheManager")).isInstanceOf(NoOpCacheManager.class);
}
Also used : ConfigurableApplicationContext(org.springframework.context.ConfigurableApplicationContext) AvroSchemaRegistryClientMessageConverter(org.springframework.cloud.stream.schema.avro.AvroSchemaRegistryClientMessageConverter) DirectFieldAccessor(org.springframework.beans.DirectFieldAccessor) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)3 AvroSchemaRegistryClientMessageConverter (org.springframework.cloud.stream.schema.avro.AvroSchemaRegistryClientMessageConverter)3 User (example.avro.User)2 Schema (org.apache.avro.Schema)2 GenericRecord (org.apache.avro.generic.GenericRecord)2 NoOpCacheManager (org.springframework.cache.support.NoOpCacheManager)2 DefaultSchemaRegistryClient (org.springframework.cloud.stream.schema.client.DefaultSchemaRegistryClient)2 SchemaRegistryClient (org.springframework.cloud.stream.schema.client.SchemaRegistryClient)2 Message (org.springframework.messaging.Message)2 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 Encoder (org.apache.avro.io.Encoder)1 SpecificDatumWriter (org.apache.avro.specific.SpecificDatumWriter)1 DirectFieldAccessor (org.springframework.beans.DirectFieldAccessor)1 SchemaReference (org.springframework.cloud.stream.schema.SchemaReference)1 DefaultSubjectNamingStrategy (org.springframework.cloud.stream.schema.avro.DefaultSubjectNamingStrategy)1 ConfigurableApplicationContext (org.springframework.context.ConfigurableApplicationContext)1 MutableMessageHeaders (org.springframework.integration.support.MutableMessageHeaders)1