首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring-cloud-gateway:java.lang.IndexOutOfBoundsException

spring-cloud-gateway:java.lang.IndexOutOfBoundsException
EN

Stack Overflow用户
提问于 2019-01-24 15:20:42
回答 1查看 367关注 0票数 0

当我使用spring-cloud-gateway时,产生了以下错误:

代码语言:javascript
复制
2019-01-21 00:35:22.906 [reactor-http-server-epoll-6] ERROR org.springframework.boot.autoconfigure.web.reactive.error.DefaultErrorWebExceptionHandler - Failed to handle request [POST xxxxxxxxxxxxxxxx]java.lang.IndexOutOfBoundsException: Index: 1, Size: 5
        at java.util.ArrayList.rangeCheck(ArrayList.java:653)
        at java.util.ArrayList.get(ArrayList.java:429)
        at org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter.addWeightConfig(WeightCalculatorWebFilter.java:157)
        at org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter.handle(WeightCalculatorWebFilter.java:117)
        at org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter.onApplicationEvent(WeightCalculatorWebFilter.java:98)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:400)
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:354)
        at org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator.lookup(RouteDefinitionRouteLocator.java:224)
        at org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator.combinePredicates(RouteDefinitionRouteLocator.java:200)
        at org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator.convertToRoute(RouteDefinitionRouteLocator.java:127)
        at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:100)
        at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:646)
        at reactor.core.publisher.FluxFlatMap$FlatMapMain.drain(FluxFlatMap.java:523)
        at reactor.core.publisher.FluxFlatMap$FlatMapInner.onSubscribe(FluxFlatMap.java:897)
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:128)
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:61)
        at reactor.core.publisher.Flux.subscribe(Flux.java:6873)
        at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:372)
        at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:232)
        at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:190)
        at reactor.core.publisher.FluxFlatMap$FlatMapMain.onSubscribe(FluxFlatMap.java:332)
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:128)
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:61)
        at reactor.core.publisher.FluxFlatMap.subscribe(FluxFlatMap.java:97)
        at reactor.core.publisher.FluxMap.subscribe(FluxMap.java:62)
        at reactor.core.publisher.FluxMap.subscribe(FluxMap.java:62)
        at reactor.core.publisher.Flux.subscribe(Flux.java:6873)
        at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:372)
        at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:232)
        at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:190)
        at reactor.core.publisher.FluxFlatMap$FlatMapMain.onSubscribe(FluxFlatMap.java:332)
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:128)
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:61)
        at reactor.core.publisher.FluxFlatMap.subscribe(FluxFlatMap.java:97)
        at reactor.core.publisher.MonoCollectList.subscribe(MonoCollectList.java:59)
        at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59)
        at reactor.core.publisher.MonoFlattenIterable.subscribe(MonoFlattenIterable.java:101)
        at reactor.core.publisher.FluxMaterialize.subscribe(FluxMaterialize.java:40)
        at reactor.core.publisher.MonoCollectList.subscribe(MonoCollectList.java:59)
        at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:74)
        at reactor.core.publisher.MonoFlattenIterable.subscribe(MonoFlattenIterable.java:101)
        at reactor.core.publisher.FluxDematerialize.subscribe(FluxDematerialize.java:39)
        at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:54)
        at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121)
        at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40)

下面是有问题的源代码:

代码语言:javascript
复制
config.ranges.clear();
config.ranges.add(0.0);

List<Double> values = new ArrayList<>(config.normalizedWeights.values());
        for (int i = 0; i < values.size(); i++) {
            Double currentWeight = values.get(i);
            Double previousRange = config.ranges.get(i);
            Double range = previousRange + currentWeight;
            config.ranges.add(range);
        }

我猜这可能是由于并发性,但我不知道这是如何发生的,我想知道这是如何发生的,或者有其他可能的原因导致这个问题的发生。

EN

回答 1

Stack Overflow用户

发布于 2019-01-24 15:35:22

当您想要访问该列表的第一个元素时,请确保config.ranges不为空。

代码语言:javascript
复制
for (int i = 0; i < values.size(); i++) {
    System.out.println(String.format("Size of config.ranges - %d", format.ranges.size()));
    ...

如果config.ranges的大小实际上是0,那么您将需要更好的方法来实现您正在尝试实现的任何东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54341272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档