You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by GitBox <gi...@apache.org> on 2019/09/02 06:28:06 UTC

[GitHub] [skywalking] zturning edited a comment on issue #3392: Webflux plugin throw ClassCastException when defining a filter

zturning edited a comment on issue #3392: Webflux plugin throw ClassCastException when defining a filter
URL: https://github.com/apache/skywalking/issues/3392#issuecomment-527018772
 
 
   Do you reconsider the AsyncSpan, because the plugin throw NullPointerException when I print logs in a scheduler.
   
   ```java
   @Component
   public class MyFilter implements WebFilter {
   
       @Override
       public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
           return chain.filter(new MyServerWebExchangeDecorator(exchange));
       }
   
       public static class MyServerWebExchangeDecorator extends ServerWebExchangeDecorator {
   
           private MyServerHttpRequestDecorator requestDecorator;
   
           public MyServerWebExchangeDecorator(ServerWebExchange delegate) {
               super(delegate);
               requestDecorator = new MyServerHttpRequestDecorator(delegate.getRequest());
           }
   
           @Override
           public ServerHttpRequest getRequest() {
               return requestDecorator;
           }
       }
   
       public static class MyServerHttpRequestDecorator extends ServerHttpRequestDecorator {
   
           public MyServerHttpRequestDecorator(ServerHttpRequest delegate) {
               super(delegate);
           }
   
           @Override
           public Flux<DataBuffer> getBody() {
               // using a scheduler
               return super.getBody().publishOn(Schedulers.elastic()).map(dataBuffer -> printBody(dataBuffer));
           }
   
           private DataBuffer printBody(DataBuffer dataBuffer) {
               // print body
               return dataBuffer;
           }
       }
   
   }
   
   @RestController
   public class HelloController {
   
       @PostMapping("/hello")
       public Mono<String> hello(@RequestBody String body) {
           // do something with body
           return Mono.just("Hello World");
       }
   
   }
   ```
   
   and the NullPointerException:
   
   ```java
   DEBUG 2019-09-02 14:23:24:315 reactor-http-nio-2 SkyWalkingAgent :  Finish the prepare stage for org.springframework.web.server.ServerWebExchangeDecorator. 
   DEBUG 2019-09-02 14:23:24:320 reactor-http-nio-2 SkyWalkingAgent :  On Transformation class org.springframework.web.server.ServerWebExchangeDecorator. 
   ERROR 2019-09-02 14:23:24:523 elastic-2 InstMethodsInter :  class[class org.springframework.web.reactive.DispatcherHandler] after method[handleResult] intercept failure 
   java.lang.NullPointerException
   	at org.apache.skywalking.apm.agent.core.context.ContextManager.stopSpan(ContextManager.java:184)
   	at org.apache.skywalking.apm.agent.core.context.ContextManager.stopSpan(ContextManager.java:180)
   	at org.apache.skywalking.apm.plugin.spring.webflux.v5.DispatcherHandlerHandleResultMethodInterceptor.afterMethod(DispatcherHandlerHandleResultMethodInterceptor.java:46)
   	at org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstMethodsInter.intercept(InstMethodsInter.java:105)
   	at org.springframework.web.reactive.DispatcherHandler.handleResult(DispatcherHandler.java)
   	at org.springframework.web.reactive.DispatcherHandler.lambda$handle$2(DispatcherHandler.java:152)
   	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:118)
   	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1515)
   	at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:241)
   	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:73)
   	at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:204)
   	at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:204)
   	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1515)
   	at reactor.core.publisher.MonoIgnoreThen$ThenAcceptInner.onNext(MonoIgnoreThen.java:296)
   	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1515)
   	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:144)
   	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1515)
   	at reactor.core.publisher.MonoZip$ZipCoordinator.signal(MonoZip.java:247)
   	at reactor.core.publisher.MonoZip$ZipInner.onNext(MonoZip.java:329)
   	at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:192)
   	at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onNext(FluxDefaultIfEmpty.java:92)
   	at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67)
   	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:73)
   	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:121)
   	at reactor.core.publisher.FluxContextStart$ContextStartSubscriber.onNext(FluxContextStart.java:103)
   	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:287)
   	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:331)
   	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1515)
   	at reactor.core.publisher.MonoCollectList$MonoCollectListSubscriber.onComplete(MonoCollectList.java:121)
   	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onComplete(FluxMapFuseable.java:144)
   	at reactor.core.publisher.FluxPublishOn$PublishOnSubscriber.doComplete(FluxPublishOn.java:462)
   	at reactor.core.publisher.FluxPublishOn$PublishOnSubscriber.checkTerminated(FluxPublishOn.java:501)
   	at reactor.core.publisher.FluxPublishOn$PublishOnSubscriber.runAsync(FluxPublishOn.java:390)
   	at reactor.core.publisher.FluxPublishOn$PublishOnSubscriber.run(FluxPublishOn.java:484)
   	at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84)
   	at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37)
   	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
   	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
   	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
   	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
   	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
   	at java.lang.Thread.run(Thread.java:748)
   ```

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services