java.lang.IllegalStateException: Error resolving argument [0] of type [sample.web.reactive.BootStarter] on method [public reactor.core.publisher.Mono<sample.web.reactive.BootStarter> sample.web.reactive.HomeController.createUser(sample.web.reactive.User)]

Spring JIRA | Brian Clozel | 4 months ago
  1. 0

    Given a Controller like the following: {code} @RequestMapping(value = "/", consumes="application/json") public Mono<Void> createUser(@RequestBody User user) {code} Sending a request with the wrong content type results in a HTTP 415, as expected. {code} curl -H "Content-Type:text/plain" -X POST -D"wrong" http://localhost:8080 {code} Now, deleting the {{consumes}} part of the method declaration yields a different result, with an HTTP 500 response: {code} @RequestMapping(value = "/") public Mono<Void> createUser(@RequestBody User user) {code} It seems the {{InvocableHandlerMethod}} wraps the original {{ResponseStatusException}} in a {{IllegalStateException}}, making it impossible for the {{ResponseStatusExceptionHandler}} to do the right thing and update the HTTP response status. The next element in the pipeline handles that exception and marks the response as an HTTP 500. {code} java.lang.IllegalStateException: Error resolving argument [0] of type [sample.web.reactive.BootStarter] on method [public reactor.core.publisher.Mono<sample.web.reactive.BootStarter> sample.web.reactive.HomeController.createUser(sample.web.reactive.User)] at org.springframework.web.reactive.result.method.InvocableHandlerMethod.getArgError(InvocableHandlerMethod.java:154) ~[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT] at org.springframework.web.reactive.result.method.InvocableHandlerMethod.lambda$null$28(InvocableHandlerMethod.java:132) ~[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT] at reactor.core.publisher.FluxResume$ResumeSubscriber.onError(FluxResume.java:89) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.Operators$MonoSubscriber.onError(Operators.java:866) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.Operators.error(Operators.java:208) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoError.subscribe(MonoError.java:80) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoDefaultIfEmpty.subscribe(MonoDefaultIfEmpty.java:37) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoOtherwise.subscribe(MonoOtherwise.java:47) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoPeek.subscribe(MonoPeek.java:98) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoWhen$MonoWhenCoordinator.subscribe(MonoWhen.java:126) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoWhen.subscribe(MonoWhen.java:92) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoThenApply.subscribe(MonoThenApply.java:57) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:66) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoOtherwise.subscribe(MonoOtherwise.java:47) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoThenApply$MonoThenApplyManager.onNext(MonoThenApply.java:131) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:71) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:81) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:383) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:192) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:95) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:59) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:116) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:44) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoOtherwiseIfEmpty.subscribe(MonoOtherwiseIfEmpty.java:47) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoThenApply.subscribe(MonoThenApply.java:57) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoThenApply.subscribe(MonoThenApply.java:57) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoOtherwise.subscribe(MonoOtherwise.java:47) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoOtherwise.subscribe(MonoOtherwise.java:47) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoOtherwise.subscribe(MonoOtherwise.java:47) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoThenSupply$MonoConcatIgnoreManager.drain(MonoThenSupply.java:166) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.core.publisher.MonoThenSupply.subscribe(MonoThenSupply.java:54) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] at reactor.ipc.netty.http.NettyHttpServerHandler.channelRead(NettyHttpServerHandler.java:92) ~[reactor-netty-0.6.0.BUILD-20160822.170641-2.jar:na] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:350) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:435) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:250) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:350) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:123) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:571) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:512) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:426) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:398) ~[netty-all-4.1.3.Final.jar:4.1.3.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:877) ~[netty-common-4.1.3.Final.jar:4.1.3.Final] at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_102] Caused by: org.springframework.web.server.UnsupportedMediaTypeStatusException: Request failure [status: 415, reason: "Content type 'text/plain' not supported"] at org.springframework.web.reactive.result.method.annotation.AbstractMessageReaderArgumentResolver.readBody(AbstractMessageReaderArgumentResolver.java:163) ~[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT] at org.springframework.web.reactive.result.method.annotation.RequestBodyArgumentResolver.resolveArgument(RequestBodyArgumentResolver.java:81) ~[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT] at org.springframework.web.reactive.result.method.InvocableHandlerMethod.lambda$resolveArguments$29(InvocableHandlerMethod.java:130) ~[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT] at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[na:1.8.0_102] at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:1.8.0_102] at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_102] at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_102] at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[na:1.8.0_102] at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_102] at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) ~[na:1.8.0_102] at org.springframework.web.reactive.result.method.InvocableHandlerMethod.resolveArguments(InvocableHandlerMethod.java:139) ~[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT] at org.springframework.web.reactive.result.method.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:93) ~[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT] at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.handle(RequestMappingHandlerAdapter.java:242) ~[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT] at org.springframework.web.reactive.DispatcherHandler.invokeHandler(DispatcherHandler.java:119) ~[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT] at org.springframework.web.reactive.DispatcherHandler.lambda$handle$1(DispatcherHandler.java:112) ~[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT] at reactor.core.publisher.MonoThenApply$MonoThenApplyManager.onNext(MonoThenApply.java:97) ~[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na] ... 38 common frames omitted {code} Is this expected behavior? Can we improve the current situation?

    Spring JIRA | 4 months ago | Brian Clozel
    java.lang.IllegalStateException: Error resolving argument [0] of type [sample.web.reactive.BootStarter] on method [public reactor.core.publisher.Mono<sample.web.reactive.BootStarter> sample.web.reactive.HomeController.createUser(sample.web.reactive.User)]

    Root Cause Analysis

    1. org.springframework.web.server.UnsupportedMediaTypeStatusException

      Request failure [status: 415, reason: "Content type 'text/plain' not supported"]

      at org.springframework.web.reactive.result.method.annotation.AbstractMessageReaderArgumentResolver.readBody()
    2. org.springframework.web
      InvocableHandlerMethod.lambda$resolveArguments$29
      1. org.springframework.web.reactive.result.method.annotation.AbstractMessageReaderArgumentResolver.readBody(AbstractMessageReaderArgumentResolver.java:163)[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT]
      2. org.springframework.web.reactive.result.method.annotation.RequestBodyArgumentResolver.resolveArgument(RequestBodyArgumentResolver.java:81)[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT]
      3. org.springframework.web.reactive.result.method.InvocableHandlerMethod.lambda$resolveArguments$29(InvocableHandlerMethod.java:130)[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT]
      3 frames
    3. Java RT
      ReferencePipeline.collect
      1. java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)[na:1.8.0_102]
      2. java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)[na:1.8.0_102]
      3. java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)[na:1.8.0_102]
      4. java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)[na:1.8.0_102]
      5. java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)[na:1.8.0_102]
      6. java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)[na:1.8.0_102]
      7. java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)[na:1.8.0_102]
      7 frames
    4. org.springframework.web
      DispatcherHandler.lambda$handle$1
      1. org.springframework.web.reactive.result.method.InvocableHandlerMethod.resolveArguments(InvocableHandlerMethod.java:139)[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT]
      2. org.springframework.web.reactive.result.method.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:93)[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT]
      3. org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.handle(RequestMappingHandlerAdapter.java:242)[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT]
      4. org.springframework.web.reactive.DispatcherHandler.invokeHandler(DispatcherHandler.java:119)[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT]
      5. org.springframework.web.reactive.DispatcherHandler.lambda$handle$1(DispatcherHandler.java:112)[spring-web-reactive-5.0.0.BUILD-20160822.150545-100.jar:5.0.0.BUILD-SNAPSHOT]
      5 frames
    5. reactor.core.publisher
      MonoThenSupply.subscribe
      1. reactor.core.publisher.MonoThenApply$MonoThenApplyManager.onNext(MonoThenApply.java:97)[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na]
      2. reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:71)[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na]
      3. reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:81)[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na]
      4. reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:383)[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na]
      5. reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:192)[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na]
      6. reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:95)[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na]
      7. reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:59)[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na]
      8. reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:116)[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na]
      9. reactor.core.publisher.MonoNext.subscribe(MonoNext.java:44)[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na]
      10. reactor.core.publisher.MonoOtherwiseIfEmpty.subscribe(MonoOtherwiseIfEmpty.java:47)[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na]
      11. reactor.core.publisher.MonoThenApply.subscribe(MonoThenApply.java:57)[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na]
      12. reactor.core.publisher.MonoThenApply.subscribe(MonoThenApply.java:57)[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na]
      13. reactor.core.publisher.MonoOtherwise.subscribe(MonoOtherwise.java:47)[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na]
      14. reactor.core.publisher.MonoOtherwise.subscribe(MonoOtherwise.java:47)[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na]
      15. reactor.core.publisher.MonoOtherwise.subscribe(MonoOtherwise.java:47)[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na]
      16. reactor.core.publisher.MonoThenSupply$MonoConcatIgnoreManager.drain(MonoThenSupply.java:166)[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na]
      17. reactor.core.publisher.MonoThenSupply.subscribe(MonoThenSupply.java:54)[reactor-core-3.0.1.BUILD-20160822.145222-2.jar:na]
      17 frames
    6. reactor.ipc.netty
      NettyHttpServerHandler.channelRead
      1. reactor.ipc.netty.http.NettyHttpServerHandler.channelRead(NettyHttpServerHandler.java:92)[reactor-netty-0.6.0.BUILD-20160822.170641-2.jar:na]
      1 frame
    7. Netty
      SingleThreadEventExecutor$5.run
      1. io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      2. io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      3. io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:350)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      4. io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:435)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      5. io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      6. io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      7. io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:250)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      8. io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      9. io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      10. io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:350)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      11. io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      12. io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      13. io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      14. io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      15. io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:123)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      16. io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:571)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      17. io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:512)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      18. io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:426)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      19. io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:398)[netty-all-4.1.3.Final.jar:4.1.3.Final]
      20. io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:877)[netty-common-4.1.3.Final.jar:4.1.3.Final]
      20 frames
    8. Java RT
      Thread.run
      1. java.lang.Thread.run(Thread.java:745)[na:1.8.0_102]
      1 frame