Exception stack as follows. It seems like a tomcat bug?
r.n.channel.ChannelOperationsHandler
[adebb74e, L:/172.20.15.124:50868 - R:172.20.2.114/172.20.2.114:8080] Error was received while reading the incoming data. The connection will be closed.
java.lang.NullPointerException: null
at org.apache.tomcat.util.http.NamesEnumerator.findNext(MimeHeaders.java:449)
at org.apache.tomcat.util.http.NamesEnumerator.nextElement(MimeHeaders.java:475)
at org.apache.tomcat.util.http.NamesEnumerator.nextElement(MimeHeaders.java:433)
at org.springframework.http.server.reactive.TomcatHeadersAdapter$EntryIterator.next(TomcatHeadersAdapter.java:210)
at org.springframework.http.server.reactive.TomcatHeadersAdapter$EntryIterator.next(TomcatHeadersAdapter.java:199)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at org.springframework.http.ReadOnlyHttpHeaders.entrySet(ReadOnlyHttpHeaders.java:152)
at co.elastic.apm.agent.springwebflux.WebfluxHelper.copyHeaders(WebfluxHelper.java:290)
at co.elastic.apm.agent.springwebflux.WebfluxHelper.fillRequest(WebfluxHelper.java:264)
at co.elastic.apm.agent.springwebflux.WebfluxHelper.endTransaction(WebfluxHelper.java:170)
at co.elastic.apm.agent.springwebflux.TransactionAwareSubscriber.onComplete(TransactionAwareSubscriber.java:177)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onComplete(MonoFlatMap.java:181)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onComplete(FluxHide.java:147)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:196)
at reactor.core.publisher.MonoFlatMap$FlatMapInner.onComplete(MonoFlatMap.java:268)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:209)
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:238)
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:209)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onComplete(MonoPeekTerminal.java:299)
at org.springframework.http.server.reactive.ChannelSendOperator$WriteCompletionBarrier.onComplete(ChannelSendOperator.java:423)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onComplete(MonoIgnoreElements.java:89)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:230)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at reactor.core.publisher.MonoNext$NextSubscriber.onComplete(MonoNext.java:102)
at reactor.core.publisher.MonoNext$NextSubscriber.onComplete(MonoNext.java:102)
at org.springframework.http.server.reactive.WriteResultPublisher$State.publishComplete(WriteResultPublisher.java:266)
at org.springframework.http.server.reactive.WriteResultPublisher.publishComplete(WriteResultPublisher.java:88)
at org.springframework.http.server.reactive.AbstractListenerWriteFlushProcessor$State$3.handleSourceCompleted(AbstractListenerWriteFlushProcessor.java:344)
at org.springframework.http.server.reactive.AbstractListenerWriteFlushProcessor$State$3.writeComplete(AbstractListenerWriteFlushProcessor.java:320)
at org.springframework.http.server.reactive.AbstractListenerWriteFlushProcessor$State$WriteResultSubscriber.onComplete(AbstractListenerWriteFlushProcessor.java:465)
at org.springframework.http.server.reactive.WriteResultPublisher$State.publishComplete(WriteResultPublisher.java:266)
at org.springframework.http.server.reactive.WriteResultPublisher.publishComplete(WriteResultPublisher.java:88)
at org.springframework.http.server.reactive.AbstractListenerWriteProcessor.changeStateToComplete(AbstractListenerWriteProcessor.java:311)
at org.springframework.http.server.reactive.AbstractListenerWriteProcessor.access$300(AbstractListenerWriteProcessor.java:46)
at org.springframework.http.server.reactive.AbstractListenerWriteProcessor$State$3.onWritePossible(AbstractListenerWriteProcessor.java:399)
at org.springframework.http.server.reactive.AbstractListenerWriteProcessor.onWritePossible(AbstractListenerWriteProcessor.java:158)
at org.springframework.http.server.reactive.AbstractListenerWriteProcessor.writeIfPossible(AbstractListenerWriteProcessor.java:324)
at org.springframework.http.server.reactive.AbstractListenerWriteProcessor.changeStateToReceived(AbstractListenerWriteProcessor.java:303)
at org.springframework.http.server.reactive.AbstractListenerWriteProcessor.access$400(AbstractListenerWriteProcessor.java:46)
at org.springframework.http.server.reactive.AbstractListenerWriteProcessor$State$2.onComplete(AbstractListenerWriteProcessor.java:390)
at org.springframework.http.server.reactive.AbstractListenerWriteProcessor.onComplete(AbstractListenerWriteProcessor.java:145)
at org.springframework.http.server.reactive.ChannelSendOperator$WriteBarrier.onComplete(ChannelSendOperator.java:231)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260)
at co.elastic.apm.agent.reactor.TracedSubscriber.onComplete(TracedSubscriber.java:140)
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
at reactor.netty.channel.FluxReceive.terminateReceiver(FluxReceive.java:481)
at reactor.netty.channel.FluxReceive.drainReceiver(FluxReceive.java:273)
at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:417)
at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:424)
at reactor.netty.channel.ChannelOperations.terminate(ChannelOperations.java:478)
at reactor.netty.http.client.HttpClientOperations.onInboundNext(HttpClientOperations.java:712)
at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:113)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)
at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:800)
at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:509)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:407)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)