Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NullPointerException in KafkaRecordReceiverContext #2736

Closed
ITman1 opened this issue Jul 12, 2023 · 2 comments · Fixed by #2737
Closed

NullPointerException in KafkaRecordReceiverContext #2736

ITman1 opened this issue Jul 12, 2023 · 2 comments · Fixed by #2737
Milestone

Comments

@ITman1
Copy link

ITman1 commented Jul 12, 2023

In what version(s) of Spring for Apache Kafka are you seeing this issue?

3.0.8

Describe the bug

Do not ask me why and how, using Spring Boot 3.1.1 it does happen under some situation - when b3 is not present in message it is added into Kafka Message headers anyway with null value and later on it fails on NPE. No matter how, KafkaRecordReceiverContext should be more bullet proof.

ava.lang.IllegalStateException: This error handler cannot process 'java.lang.NullPointerException's; no record information is available
	at org.springframework.kafka.listener.DefaultErrorHandler.handleOtherException(DefaultErrorHandler.java:204)
	at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.handleConsumerException(KafkaMessageListenerContainer.java:2011)
	at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.run(KafkaMessageListenerContainer.java:1446)
	at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run$$$capture(CompletableFuture.java:1804)
	at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.NullPointerException: Cannot read the array length because "bytes" is null
	at java.base/java.lang.String.<init>(String.java:1385)
	at org.springframework.kafka.support.micrometer.KafkaRecordReceiverContext.lambda$new$0(KafkaRecordReceiverContext.java:46)
	at io.micrometer.tracing.handler.PropagatingReceiverTracingObservationHandler.lambda$onStart$0(PropagatingReceiverTracingObservationHandler.java:59)
	at brave.propagation.B3Propagation$B3Extractor.extract(B3Propagation.java:272)
	at org.springframework.boot.actuate.autoconfigure.tracing.CompositePropagationFactory$CompositePropagation.lambda$extractor$5(CompositePropagationFactory.java:215)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.AbstractList$RandomAccessSpliterator.tryAdvance(AbstractList.java:706)
	at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129)
	at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647)
	at org.springframework.boot.actuate.autoconfigure.tracing.CompositePropagationFactory$CompositePropagation.lambda$extractor$6(CompositePropagationFactory.java:217)
	at brave.baggage.BaggagePropagation$BaggageExtractor.extract(BaggagePropagation.java:360)
	at io.micrometer.tracing.brave.bridge.BravePropagator.extract(BravePropagator.java:58)
	at io.micrometer.tracing.handler.PropagatingReceiverTracingObservationHandler.onStart(PropagatingReceiverTracingObservationHandler.java:58)
	at io.micrometer.tracing.handler.PropagatingReceiverTracingObservationHandler.onStart(PropagatingReceiverTracingObservationHandler.java:35)
	at io.micrometer.observation.ObservationHandler$FirstMatchingCompositeObservationHandler.onStart(ObservationHandler.java:149)
	at io.micrometer.observation.SimpleObservation.notifyOnObservationStarted(SimpleObservation.java:222)
	at io.micrometer.observation.SimpleObservation.start(SimpleObservation.java:169)
	at io.micrometer.observation.Observation.observeWithContext(Observation.java:601)
	at io.micrometer.observation.Observation.observe(Observation.java:544)
	at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeRecordListener(KafkaMessageListenerContainer.java:2820)
	at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeWithRecords(KafkaMessageListenerContainer.java:2672)
	at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeRecordListener(KafkaMessageListenerContainer.java:2558)
	at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeListener(KafkaMessageListenerContainer.java:2200)
	at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeIfHaveRecords(KafkaMessageListenerContainer.java:1555)
	at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.pollAndInvoke(KafkaMessageListenerContainer.java:1519)
	at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.run(KafkaMessageListenerContainer.java:1394)

image

@vishalsingh2972
Copy link

is this issue resolved @garyrussell @ITman1 ?

artembilan pushed a commit that referenced this issue Jul 12, 2023
@garyrussell
Copy link
Contributor

It's fixed in the next release (due Monday).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants