From b6e2d10cbb133a10c73f116e79045e47f793f2ff Mon Sep 17 00:00:00 2001 From: lepdou Date: Mon, 10 Oct 2022 16:19:08 +0800 Subject: [PATCH] fix throw npe when router context is null --- CHANGELOG.md | 1 + ...PolarisRouterServiceInstanceListSupplier.java | 16 +++++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b53f12e2e..89ae4b162 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,3 +5,4 @@ - [Optimize: optimize configuration conditional & optimize config data tips"](https://github.com/Tencent/spring-cloud-tencent/pull/604) - [Optimize: Maybe remove Chinese characters](https://github.com/Tencent/spring-cloud-tencent/pull/608) - [Bugfix: fix feign report call result error when using feign direct call](https://github.com/Tencent/spring-cloud-tencent/pull/622) +- [Bugfix: fix throw npe when router context is null](https://github.com/Tencent/spring-cloud-tencent/pull/634) diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRouterServiceInstanceListSupplier.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRouterServiceInstanceListSupplier.java index 63be917cc..3de268ce6 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRouterServiceInstanceListSupplier.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRouterServiceInstanceListSupplier.java @@ -59,11 +59,11 @@ import static com.tencent.cloud.common.constant.ContextConstant.UTF_8; /** * Service routing entrance. - * + *

* Rule routing needs to rely on request parameters for server filtering. * The interface cannot obtain the context object of the request granularity, * so the routing capability cannot be achieved through ServerListFilter. - * + *

* And {@link PolarisRouterServiceInstanceListSupplier#get(Request)} provides the ability to pass in http headers, * so routing capabilities are implemented through IRule. * @@ -95,21 +95,23 @@ public class PolarisRouterServiceInstanceListSupplier extends DelegatingServiceI Flux> allServers = getDelegate().get(); // 2. filter by router + PolarisRouterContext routerContext = null; + DefaultRequestContext requestContext = (DefaultRequestContext) request.getContext(); - PolarisRouterContext key; if (requestContext instanceof RequestDataContext) { - key = buildRouterContext(((RequestDataContext) requestContext).getClientRequest().getHeaders()); + routerContext = buildRouterContext(((RequestDataContext) requestContext).getClientRequest().getHeaders()); } else if (requestContext.getClientRequest() instanceof PolarisLoadBalancerRequest) { - key = buildRouterContext(((PolarisLoadBalancerRequest) requestContext.getClientRequest()).getRequest() + routerContext = buildRouterContext(((PolarisLoadBalancerRequest) requestContext.getClientRequest()).getRequest() .getHeaders()); } - else { + + if (routerContext == null) { // return all servers if router context is null. return allServers; } - return doRouter(allServers, key); + return doRouter(allServers, routerContext); } //set method to public for unit test