InterceptorExecutor.java 文件源码

java
阅读 23 收藏 0 点赞 0 评论 0

项目:karyon 作者:
/**
 * Executes the interceptor chain for the passed request and response.
 *
 * @param request Request to be executed.
 * @param response Response to be populated.
 * @param keyEvaluationContext The context for {@link InterceptorKey} evaluation.
 *
 * @return The final result of execution after executing all the inbound and outbound interceptors and the router.
 */
public Observable<Void> execute(final I request, final O response, C keyEvaluationContext) {
    final ExecutionContext context = new ExecutionContext(request, keyEvaluationContext);
    InboundInterceptor<I, O> nextIn = context.nextIn(request);
    Observable<Void> startingPoint;

    if (null != nextIn) {
        startingPoint = nextIn.in(request, response);
    } else if (context.invokeRouter()){
        startingPoint = router.handle(request, response);
    } else {
        return Observable.error(new IllegalStateException("No router defined.")); // No router defined.
    }

    return startingPoint.lift(new Observable.Operator<Void, Void>() {
        @Override
        public Subscriber<? super Void> call(Subscriber<? super Void> child) {
            SerialSubscription subscription = new SerialSubscription();
            ChainSubscriber chainSubscriber = new ChainSubscriber(subscription, context, request, response, child);
            subscription.set(chainSubscriber);
            child.add(subscription);
            return chainSubscriber;
        }
    });
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号