use of org.apache.pulsar.common.schema.KeyValue in project flink by apache.
the class PulsarSchemaUtilsTest method createSchemaForComplexSchema.
@Test
void createSchemaForComplexSchema() {
// Avro
Schema<Foo> avro1 = Schema.AVRO(Foo.class);
PulsarSchema<Foo> avro2 = new PulsarSchema<>(avro1, Foo.class);
SchemaInfo info1 = avro1.getSchemaInfo();
assertThrows(NullPointerException.class, () -> PulsarSchemaUtils.createSchema(info1));
Schema<Foo> schema = PulsarSchemaUtils.createSchema(avro2.getSchemaInfo());
assertNotEquals(schema.getSchemaInfo(), avro1.getSchemaInfo());
assertEquals(schema.getSchemaInfo(), avro2.getSchemaInfo());
// JSON
Schema<FL> json1 = Schema.JSON(FL.class);
PulsarSchema<FL> json2 = new PulsarSchema<>(json1, FL.class);
Schema<FL> json3 = PulsarSchemaUtils.createSchema(json2.getSchemaInfo());
assertNotEquals(json3.getSchemaInfo(), json1.getSchemaInfo());
assertEquals(json3.getSchemaInfo(), json2.getSchemaInfo());
// Protobuf Native
Schema<TestMessage> proto1 = Schema.PROTOBUF_NATIVE(TestMessage.class);
PulsarSchema<TestMessage> proto2 = new PulsarSchema<>(proto1, TestMessage.class);
Schema<TestMessage> proto3 = PulsarSchemaUtils.createSchema(proto2.getSchemaInfo());
assertNotEquals(proto3.getSchemaInfo(), proto1.getSchemaInfo());
assertEquals(proto3.getSchemaInfo(), proto2.getSchemaInfo());
// KeyValue
Schema<KeyValue<byte[], byte[]>> kvBytes1 = Schema.KV_BYTES();
PulsarSchema<KeyValue<byte[], byte[]>> kvBytes2 = new PulsarSchema<>(kvBytes1, byte[].class, byte[].class);
Schema<KeyValue<byte[], byte[]>> kvBytes3 = PulsarSchemaUtils.createSchema(kvBytes2.getSchemaInfo());
assertNotEquals(kvBytes3.getSchemaInfo(), kvBytes1.getSchemaInfo());
}
use of org.apache.pulsar.common.schema.KeyValue in project flink by apache.
the class KeyValueSchemaFactory method createSchema.
@Override
public Schema<KeyValue<K, V>> createSchema(SchemaInfo info) {
KeyValue<SchemaInfo, SchemaInfo> kvSchemaInfo = decodeKeyValueSchemaInfo(info);
Schema<K> keySchema = PulsarSchemaUtils.createSchema(kvSchemaInfo.getKey());
Schema<V> valueSchema = PulsarSchemaUtils.createSchema(kvSchemaInfo.getValue());
KeyValueEncodingType encodingType = decodeKeyValueEncodingType(info);
Schema<KeyValue<K, V>> schema = KeyValueSchemaImpl.of(keySchema, valueSchema, encodingType);
// Append extra class name into schema info properties.
// KeyValueSchema don't have custom properties builder method, we have to use side effects.
SchemaInfo schemaInfo = schema.getSchemaInfo();
Map<String, String> properties = schemaInfo.getProperties();
properties.put(CLASS_INFO_PLACEHOLDER, KeyValue.class.getName());
return schema;
}
Aggregations