Spring, Apache Avro, конструктор Allargs - PullRequest
0 голосов
/ 19 ноября 2018

У меня проблема с десериализацией сообщений, опубликованных в теме Кафки. Я использую Spring-boot, Spring Cloud Stream, Apache Kafka и Apache Avro. У объекта, который я пытаюсь десериализовать, есть конструктор, который принимает два аргумента. При получении сообщения из темы я получаю исключение:

org.springframework.messaging.MessagingException: Exception thrown while invoking com.foo.bar.messaging.ResponseListener#handleResponse[1 args]; 
nested exception is java.lang.RuntimeException: java.lang.NoSuchMethodException: com.foo.bar.TheObject.<init>()     at org.springframework.cloud.stream.binding.StreamListenerMessageHandler.handleRequestMessage(StreamListenerMessageHandler.java:63) ~[spring-cloud-stream-2.0.1.RELEASE.jar:2.0.1.RELEASE]

Десериализованный класс имеет конструктор, который принимает 2 аргумента и выглядит следующим образом:

public class TheObject {
    private final int thingOne;
    private final int thingTwo;
    @JsonCreator
    public TheObject(@JsonProperty("thingOne") int thingOne, @JsonProperty("thingTwo") int thingTwo) {
      this.thingOne = thingOne;
      this.thingTwo = thingTwo;
    }
}

Ранее я использовал Джексона и только что опубликовал Strings в теме kafka, поэтому аннотации @JsonCreator было достаточно, чтобы указать мапперу, как построить объект, но теперь я перехожу к использованию Arvo. Джексон больше не используется для этой сериализации. Я оставил аннотации на примере выше, чтобы показать, как он работал.

С точки зрения конфигурации, я использую свойство: dynamicSchemaGenerationEnabled: true, а не объявляю схемы объекта явно. Похоже, это нормально работает как с весенним реестром схемы, так и с реестром схемы слияния (за исключением описанной здесь проблемы)

Есть ли эквивалент аннотации @JsonCreator, который будет работать с десериализацией Arvo?

спасибо

...