Skip to content

UnsupportedMessageTypeException: DefaultFileRegion when returning FileSystemResource from controller on TLS #102

@oleg-alexeyev

Description

@oleg-alexeyev

Stack: Spring WebFlux 5.0.0.M5 / Reactor Netty 0.6.2 / Reactor Core 3.0.7 / Netty 4.1.8.
Having a controller returning Mono<FileSystemResource>, everythinig works fine with plain HTTP endpoint, but fails on HTTPS one:

io.netty.handler.codec.UnsupportedMessageTypeException: io.netty.channel.DefaultFileRegion (expected: io.netty.buffer.ByteBuf)
	at io.netty.handler.ssl.SslHandler.write(SslHandler.java:594) ~[netty-handler-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:739) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:731) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:817) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:724) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:111) ~[netty-codec-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:739) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:731) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:817) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:724) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at reactor.ipc.netty.http.server.HttpServerHandler.write(HttpServerHandler.java:166) ~[reactor-netty-0.6.2.RELEASE.jar:0.6.2.RELEASE]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:739) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:802) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:815) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:795) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at reactor.ipc.netty.channel.ChannelOperationsHandler.doWrite(ChannelOperationsHandler.java:272) ~[reactor-netty-0.6.2.RELEASE.jar:0.6.2.RELEASE]
	at reactor.ipc.netty.channel.ChannelOperationsHandler.drain(ChannelOperationsHandler.java:401) ~[reactor-netty-0.6.2.RELEASE.jar:0.6.2.RELEASE]
	at reactor.ipc.netty.channel.ChannelOperationsHandler.flush(ChannelOperationsHandler.java:179) ~[reactor-netty-0.6.2.RELEASE.jar:0.6.2.RELEASE]
	at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:777) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:803) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:815) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:795) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:832) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:1032) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:296) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at reactor.ipc.netty.NettyOutbound.lambda$sendFile$1(NettyOutbound.java:185) ~[reactor-netty-0.6.2.RELEASE.jar:0.6.2.RELEASE]
	at reactor.core.publisher.MonoUsing.subscribe(MonoUsing.java:81) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoSource.subscribe(MonoSource.java:72) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenIgnore$ThenIgnoreMain.drain(MonoThenIgnore.java:147) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenIgnore.subscribe(MonoThenIgnore.java:55) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxConcatIterable$ConcatIterableSubscriber.onComplete(FluxConcatIterable.java:139) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxConcatIterable.subscribe(FluxConcatIterable.java:60) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:416) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onNext(FluxConcatMap.java:242) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxTake$TakeSubscriber.onNext(FluxTake.java:117) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:126) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at com.fsecure.fspms.hostinterface.SwupDbController.lambda$swupDbFile$0(SwupDbController.java:79) ~[classes/:?]
	at reactor.core.publisher.MonoCreate.subscribe(MonoCreate.java:51) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxSource.subscribe(FluxSource.java:65) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxTake.subscribe(FluxTake.java:55) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:117) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenMap$ThenMapMain.onNext(MonoThenMap.java:150) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:962) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenMap$ThenMapMain$ThenMapInner.onNext(MonoThenMap.java:237) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:962) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenMap$ThenMapMain$ThenMapInner.onNext(MonoThenMap.java:237) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:72) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:188) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:962) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenMap$ThenMapMain.onNext(MonoThenMap.java:144) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:962) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoWhen$WhenCoordinator.signal(MonoWhen.java:249) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoWhen$WhenInner.onNext(MonoWhen.java:308) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:173) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onNext(FluxDefaultIfEmpty.java:92) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:115) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:1668) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:159) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:1482) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:1356) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:90) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoDefaultIfEmpty.subscribe(MonoDefaultIfEmpty.java:37) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoPeek.subscribe(MonoPeek.java:70) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoWhen$WhenCoordinator.subscribe(MonoWhen.java:178) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoWhen.subscribe(MonoWhen.java:124) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenMap.subscribe(MonoThenMap.java:59) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:77) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenMap$ThenMapMain.onNext(MonoThenMap.java:150) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:962) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenIgnore$ThenIgnoreMain.drain(MonoThenIgnore.java:141) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenIgnore.subscribe(MonoThenIgnore.java:55) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenMap.subscribe(MonoThenMap.java:59) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenMap$ThenMapMain.onNext(MonoThenMap.java:150) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:272) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:782) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:115) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:962) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenIgnore$ThenAcceptInner.onNext(MonoThenIgnore.java:285) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:1668) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenIgnore$ThenAcceptInner.onSubscribe(MonoThenIgnore.java:274) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenIgnore$ThenIgnoreMain.drain(MonoThenIgnore.java:147) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenIgnore.subscribe(MonoThenIgnore.java:55) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:416) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:212) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:89) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:54) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:117) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenMap.subscribe(MonoThenMap.java:59) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenMap.subscribe(MonoThenMap.java:59) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenIgnore$ThenIgnoreMain.drain(MonoThenIgnore.java:165) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoThenIgnore.subscribe(MonoThenIgnore.java:55) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:56) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:60) ~[reactor-core-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at reactor.ipc.netty.channel.ChannelOperations.applyHandler(ChannelOperations.java:378) ~[reactor-netty-0.6.2.RELEASE.jar:0.6.2.RELEASE]
	at reactor.ipc.netty.http.server.HttpServerOperations.onHandlerStart(HttpServerOperations.java:354) ~[reactor-netty-0.6.2.RELEASE.jar:0.6.2.RELEASE]
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) ~[netty-common-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403) ~[netty-common-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:445) ~[netty-transport-4.1.8.Final.jar:4.1.8.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) ~[netty-common-4.1.8.Final.jar:4.1.8.Final]
	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_131]

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions