fix throw npe when router context is null

pull/634/head
lepdou 3 years ago
parent 4e88462d83
commit b6e2d10cbb

@ -5,3 +5,4 @@
- [Optimize: optimize configuration conditional & optimize config data tips"](https://github.com/Tencent/spring-cloud-tencent/pull/604) - [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) - [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 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)

@ -59,11 +59,11 @@ import static com.tencent.cloud.common.constant.ContextConstant.UTF_8;
/** /**
* Service routing entrance. * Service routing entrance.
* * <p>
* Rule routing needs to rely on request parameters for server filtering. * Rule routing needs to rely on request parameters for server filtering.
* The interface cannot obtain the context object of the request granularity, * The interface cannot obtain the context object of the request granularity,
* so the routing capability cannot be achieved through ServerListFilter. * so the routing capability cannot be achieved through ServerListFilter.
* * <p>
* And {@link PolarisRouterServiceInstanceListSupplier#get(Request)} provides the ability to pass in http headers, * And {@link PolarisRouterServiceInstanceListSupplier#get(Request)} provides the ability to pass in http headers,
* so routing capabilities are implemented through IRule. * so routing capabilities are implemented through IRule.
* *
@ -95,21 +95,23 @@ public class PolarisRouterServiceInstanceListSupplier extends DelegatingServiceI
Flux<List<ServiceInstance>> allServers = getDelegate().get(); Flux<List<ServiceInstance>> allServers = getDelegate().get();
// 2. filter by router // 2. filter by router
PolarisRouterContext routerContext = null;
DefaultRequestContext requestContext = (DefaultRequestContext) request.getContext(); DefaultRequestContext requestContext = (DefaultRequestContext) request.getContext();
PolarisRouterContext key;
if (requestContext instanceof RequestDataContext) { if (requestContext instanceof RequestDataContext) {
key = buildRouterContext(((RequestDataContext) requestContext).getClientRequest().getHeaders()); routerContext = buildRouterContext(((RequestDataContext) requestContext).getClientRequest().getHeaders());
} }
else if (requestContext.getClientRequest() instanceof PolarisLoadBalancerRequest) { else if (requestContext.getClientRequest() instanceof PolarisLoadBalancerRequest) {
key = buildRouterContext(((PolarisLoadBalancerRequest<?>) requestContext.getClientRequest()).getRequest() routerContext = buildRouterContext(((PolarisLoadBalancerRequest<?>) requestContext.getClientRequest()).getRequest()
.getHeaders()); .getHeaders());
} }
else {
if (routerContext == null) {
// return all servers if router context is null. // return all servers if router context is null.
return allServers; return allServers;
} }
return doRouter(allServers, key); return doRouter(allServers, routerContext);
} }
//set method to public for unit test //set method to public for unit test

Loading…
Cancel
Save