Как спроецировать Avro-сериализованное хранилище Kafka State Store на конечную точку REST - PullRequest
0 голосов
/ 08 июля 2020

Я пытаюсь спроецировать значения из определенного хранилища состояний в конечную точку REST.

Я создал свою службу REST так же, как в Confluent's Kafka Musi c Пример и добавил одну конечную точку.

@GET
@Path("/foo")
@Produces(MediaType.APPLICATION_JSON)
public List<Foo> getFoo() {

    List<Foo> values = new ArrayList<Foo>();

    StoreQueryParameters<ReadOnlyKeyValueStore<String, Foo>> params = StoreQueryParameters
            .fromNameAndType("FooStore", QueryableStoreTypes
                    .<String, Foo>keyValueStore());

    ReadOnlyKeyValueStore<String, Foo> keyValueStore = streams
            .store(params);

    KeyValueIterator<String, Foo> range = keyValueStore.all();
    while (range.hasNext()) {
        KeyValue<String, Foo> next = range.next();
        values.add(next.value);
    }

    return values;
}

Значения в моем магазине были сериализованы Avro, а класс Foo сгенерирован плагином Avro Maven.

Когда я go к конечной точке в моем браузере, однако я получаю сообщение об ошибке: Not an array: {"type":"record","name":"Foo","namespace":"com.example","fields":[...]} (through reference chain: java.util.ArrayList[0]->com.example.Foo["schema"]->org.apache.avro.Schema$RecordSchema["elementType"]).

Я думаю, что смогу использовать AvroMapper Джексона каким-то образом, как предложено в этот ответ , но мне не удалось заставить его работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...