2017-09-07 11 views
1

구아바의 RateLimiter를 사용하기 때문에 API에서 초당 최대 요청 수 (I'ts 5 ..)에 도달하지 않았습니다. 그것은 잘 작동, 나는 지금은 속도 제한을 치는 적이 있지만 지금 이상한 문제가 있습니다. 몇 가지 이유 때문에 6 호출 중 하나의 응용 프로그램에게 예외를 실행 한 5 점 만점 시간을 제공 :구아바의 RateLimiter를 사용하는 동안 잭슨 구문 분석 예외가 발생했습니다.

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.fasterxml.jackson.databind.JavaType.equals(java.lang.Object)' on a null object reference 
               at com.fasterxml.jackson.databind.type.ResolvedRecursiveType.equals(ResolvedRecursiveType.java:103) 
               at com.fasterxml.jackson.databind.type.TypeBindings$AsKey.equals(TypeBindings.java:458) 
               at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1014) 
               at java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1522) 
               at com.fasterxml.jackson.databind.util.LRUMap.putIfAbsent(LRUMap.java:64) 
               at com.fasterxml.jackson.databind.type.TypeFactory._fromClass(TypeFactory.java:1274) 
               at com.fasterxml.jackson.databind.type.TypeFactory._fromParamType(TypeFactory.java:1384) 
               at com.fasterxml.jackson.databind.type.TypeFactory._fromAny(TypeFactory.java:1154) 
               at com.fasterxml.jackson.databind.type.TypeFactory._resolveSuperInterfaces(TypeFactory.java:1298) 
               at com.fasterxml.jackson.databind.type.TypeFactory._fromClass(TypeFactory.java:1247) 
               at com.fasterxml.jackson.databind.type.TypeFactory._fromAny(TypeFactory.java:1150) 
               at com.fasterxml.jackson.databind.type.TypeFactory.constructType(TypeFactory.java:618) 
               at com.fasterxml.jackson.databind.cfg.MapperConfig.constructType(MapperConfig.java:290) 
               at com.fasterxml.jackson.databind.cfg.MapperConfig.introspectClassAnnotations(MapperConfig.java:320) 
               at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findTypeDeserializer(BasicDeserializerFactory.java:1338) 
               at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:481) 
               at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:3890) 
               at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:3756) 
               at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:2198) 
               at dk.nykredit.jackson.dataformat.hal.deser.HALBeanDeserializer.deserialize(HALBeanDeserializer.java:27) 
               at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3789) 
               at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2913) 
               at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:179) 
               at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.read(MappingJackson2HttpMessageConverter.java:174) 
               at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:89) 
               at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:738) 
               at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:723) 
               at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:544) 
               at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:506) 
               at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:455) 
               at nl.app.App.API.RestClient_.getAdviseurs(RestClient_.java:117) 
               at nl.app.App.Services.AdviseurService.getAdviseur(AdviseurService.java:60) 
               at nl.app.App.Services.AdviseurService.getAdviseurAsync(AdviseurService.java:49) 
               at nl.app.App.Services.AdviseurService_.access$101(AdviseurService_.java:19) 
               at nl.app.App.Services.AdviseurService_$2.execute(AdviseurService_.java:66) 
               at org.androidannotations.api.BackgroundExecutor$Task.run(BackgroundExecutor.java:405) 
               at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428) 
               at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
               at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272) 
               at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 

답변

0

그 예외가 RateLimiter와 아무 상관이 나타나지 않습니다. 스택 트레이스는 Spring 및/또는 Jackson이 null 참조에서 리플렉션을 통해 .equals()에 전화를 걸려고했음을 나타냅니다. 내 생각 엔 null을 넘지 말아야 할 것입니다. 요금 제한기에 충분한 허가가없는 경우 null을 돌려 주겠습니까?

문제의 코드를 보지 않고도이 오류의 원인을 정확히 말하기는 어렵습니다. 오류를 복제하는 MCVE을 만들어보십시오. MCVE를 만들면 문제를 쉽게 찾을 수 있습니다.