Hello,
I wanted to add Kafka extension to an existing Axon project. Here’s my configuration:
axon:
serializer:
general: jackson
axonserver:
servers: ${AXONSERVER_SERVERS:localhost}
token: ${AXON_APPLICATION_TOKEN:''}
kafka:
bootstrap-servers: ${KAFKA_URL:localhost:9092}
client-id: axon-kafka-test
default-topic: ${KAFKA_TOPIC:test}
properties:
security.protocol: PLAINTEXT
publisher:
confirmation-mode: transactional
producer:
transaction-id-prefix: axon-kafka-test
event-processor-mode: tracking
Everything worked fine locally. However, once I deployed it threw this exception:
org.axonframework.serialization.SerializationException: Unable to serialize object
at org.axonframework.serialization.json.JacksonSerializer.serialize(JacksonSerializer.java:149) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.serialization.SerializedMessage.serializePayload(SerializedMessage.java:123) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.messaging.MessageDecorator.serializePayload(MessageDecorator.java:66) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.extensions.kafka.eventhandling.DefaultKafkaMessageConverter.createKafkaMessage(DefaultKafkaMessageConverter.java:126) ~[axon-kafka-4.8.0.jar:4.8.0]
at org.axonframework.extensions.kafka.eventhandling.producer.KafkaPublisher.send(KafkaPublisher.java:151) ~[axon-kafka-4.8.0.jar:4.8.0]
at org.axonframework.extensions.kafka.eventhandling.producer.KafkaEventPublisher.handle(KafkaEventPublisher.java:77) ~[axon-kafka-4.8.0.jar:4.8.0]
at org.axonframework.eventhandling.SimpleEventHandlerInvoker.invokeHandlers(SimpleEventHandlerInvoker.java:128) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.eventhandling.SimpleEventHandlerInvoker.handle(SimpleEventHandlerInvoker.java:114) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.eventhandling.MultiEventHandlerInvoker.handle(MultiEventHandlerInvoker.java:91) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.eventhandling.AbstractEventProcessor.lambda$null$1(AbstractEventProcessor.java:174) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.tracing.Span.runCallable(Span.java:132) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.eventhandling.AbstractEventProcessor.lambda$null$2(AbstractEventProcessor.java:171) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.messaging.DefaultInterceptorChain.proceed(DefaultInterceptorChain.java:57) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.messaging.interceptors.CorrelationDataInterceptor.handle(CorrelationDataInterceptor.java:67) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.messaging.DefaultInterceptorChain.proceed(DefaultInterceptorChain.java:55) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.tracing.Span.runCallable(Span.java:132) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.eventhandling.TrackingEventProcessor.lambda$new$3(TrackingEventProcessor.java:185) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.messaging.DefaultInterceptorChain.proceed(DefaultInterceptorChain.java:55) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.eventhandling.TrackingEventProcessor.lambda$new$1(TrackingEventProcessor.java:179) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.messaging.DefaultInterceptorChain.proceed(DefaultInterceptorChain.java:55) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.eventhandling.AbstractEventProcessor.lambda$processInUnitOfWork$3(AbstractEventProcessor.java:182) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.messaging.unitofwork.BatchingUnitOfWork.executeWithResult(BatchingUnitOfWork.java:92) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.eventhandling.AbstractEventProcessor.processInUnitOfWork(AbstractEventProcessor.java:165) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.eventhandling.TrackingEventProcessor.processBatch(TrackingEventProcessor.java:490) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.eventhandling.TrackingEventProcessor.processingLoop(TrackingEventProcessor.java:318) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.eventhandling.TrackingEventProcessor$TrackingSegmentWorker.run(TrackingEventProcessor.java:1145) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.eventhandling.TrackingEventProcessor$WorkerLauncher.cleanUp(TrackingEventProcessor.java:1340) ~[axon-messaging-4.8.1.jar:4.8.1]
at org.axonframework.eventhandling.TrackingEventProcessor$WorkerLauncher.run(TrackingEventProcessor.java:1317) ~[axon-messaging-4.8.1.jar:4.8.1]
at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.axonframework.serialization.UnknownSerializedType and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.14.2.jar:2.14.2]
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1306) ~[jackson-databind-2.14.2.jar:2.14.2]
at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:408) ~[jackson-databind-2.14.2.jar:2.14.2]
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:53) ~[jackson-databind-2.14.2.jar:2.14.2]
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:30) ~[jackson-databind-2.14.2.jar:2.14.2]
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480) ~[jackson-databind-2.14.2.jar:2.14.2]
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319) ~[jackson-databind-2.14.2.jar:2.14.2]
at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1572) ~[jackson-databind-2.14.2.jar:2.14.2]
at com.fasterxml.jackson.databind.ObjectWriter._writeValueAndClose(ObjectWriter.java:1273) ~[jackson-databind-2.14.2.jar:2.14.2]
at com.fasterxml.jackson.databind.ObjectWriter.writeValueAsBytes(ObjectWriter.java:1163) ~[jackson-databind-2.14.2.jar:2.14.2]
at org.axonframework.serialization.json.JacksonSerializer.serialize(JacksonSerializer.java:144) ~[axon-messaging-4.8.1.jar:4.8.1]
... 28 common frames omitted
What does this error mean exactly and how should I handle this situation? As I understand it, it may be that we’ve deleted the data class of some very old event that now can’t be serialized. It would be helpful if the exception contained the actual class it was looking for. So should I implement a serializer for org.axonframework.serialization.UnknownSerializedType
or disable SerializationFeature.FAIL_ON_EMPTY_BEANS
(and how would I disable it)?