Latest java-client fails with IllegalStateException
Something in https://github.com/splitio/java-client/compare/4.13.0...4.13.1 causes this to happen in our tests:
SplitFetcherImp: RefreshableSplitFetcher failed: Problem fetching splitChanges since -1: java.lang.IllegalStateException: Could not retrieve splitChanges since -1; http return code 403
(The RefreshableSplitFetcher should be SplitFetcherImpl, as reported separately in https://github.com/splitio/java-client/issues/525.)
If we force the version to 4.13.0, the problem goes away.
Hi @jimshowalter, could you please provide full debug logs? the 403 error means incorrect api key, so just want to see the whole request and the rest of debug lines.
Thanks Bilal
Will try to get that to you today.
The developer who ran into this problem is currently buried working to deadline on a product GA, but he'll try to get the information to you soon.
Not sure how useful this is, but this is all of the logs:
2025-01-15 14:58:08,324 WARN [SPLIT-Initialization-0] SplitHttpClient: Response status was: 403. Reason: Forbidden
2025-01-15 14:58:08,326 ERROR [SPLIT-Initialization-0] SplitFetcherImp: RefreshableSplitFetcher failed: Problem fetching splitChanges since -1: java.lang.IllegalStateException: Could not retrieve splitChanges since -1; http return code 403
2025-01-15 14:58:09,416 WARN [SPLIT-Initialization-0] SplitHttpClient: Response status was: 403. Reason: Forbidden
2025-01-15 14:58:09,417 ERROR [SPLIT-Initialization-0] SplitFetcherImp: RefreshableSplitFetcher failed: Problem fetching splitChanges since -1: java.lang.IllegalStateException: Could not retrieve splitChanges since -1; http return code 403
2025-01-15 14:58:11,504 WARN [SPLIT-Initialization-0] SplitHttpClient: Response status was: 403. Reason: Forbidden
2025-01-15 14:58:11,505 ERROR [SPLIT-Initialization-0] SplitFetcherImp: RefreshableSplitFetcher failed: Problem fetching splitChanges since -1: java.lang.IllegalStateException: Could not retrieve splitChanges since -1; http return code 403
2025-01-15 14:58:15,596 WARN [SPLIT-Initialization-0] SplitHttpClient: Response status was: 403. Reason: Forbidden
2025-01-15 14:58:15,597 ERROR [SPLIT-Initialization-0] SplitFetcherImp: RefreshableSplitFetcher failed: Problem fetching splitChanges since -1: java.lang.IllegalStateException: Could not retrieve splitChanges since -1; http return code 403
2025-01-15 14:58:18,157 ERROR [main] SplitFactoryConfig: Failure to initialize Split connection
error_type: com.foo.bar.featureflip.exceptions.FooBarFeatureFlipException
error_message: Timeout during feature client creation: SDK was not ready in 10000 milliseconds
error_stack: com.foo.bar.util.splitio.SplitFactoryConfig.initSplitClient(SplitFactoryConfig.java:96)
com.foo.bar.util.splitio.SplitFactoryConfig.initSplit(SplitFactoryConfig.java:67)
com.foo.bar.util.splitio.SplitFactoryConfig.reloadConfig(SplitFactoryConfig.java:117)
com.foo.bar.util.splitio.SplitFactoryConfig.<init>(SplitFactoryConfig.java:56)
com.foo.bar.service.SpringConfig.splitFactoryConfig(SpringConfig.java:284)
com.foo.bar.service.SpringConfig$$SpringCGLIB$$0.CGLIB$splitFactoryConfig$4(<generated>)
com.foo.bar.service.SpringConfig$$SpringCGLIB$$FastClass$$1.invoke(<generated>)
org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:258)
org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:348)
com.foo.bar.service.SpringConfig$$SpringCGLIB$$0.splitFactoryConfig(<generated>)
java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
java.base/java.lang.reflect.Method.invoke(Method.java:580)
org.springframework.beans.factory.support.SimpleInstantiationStrategy.lambda$instantiate$0(SimpleInstantiationStrategy.java:171)
org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiateWithFactoryMethod(SimpleInstantiationStrategy.java:88)
org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:168)
org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)
org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:645)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1351)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1181)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:563)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523)
org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:336)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:288)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1626)
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1514)
org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:913)
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1371)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1208)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:563)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523)
org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:336)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:288)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1626)
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1514)
org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:913)
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1371)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1208)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:563)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523)
org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:336)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:288)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1122)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1093)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1030)
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:987)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627)
org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752)
org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439)
org.springframework.boot.SpringApplication.run(SpringApplication.java:318)
org.springframework.boot.SpringApplication.run(SpringApplication.java:1361)
org.springframework.boot.SpringApplication.run(SpringApplication.java:1350)
com.foo.bar.ServiceApplication.main(ServiceApplication.java:29)
java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
java.base/java.lang.reflect.Method.invoke(Method.java:580)
org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:102)
org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:64)
org.springframework.boot.loader.launch.JarLauncher.main(JarLauncher.java:40)
Did something in 4.13.1 change how to authenticate?
This magically healed itself in the latest version.