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