Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FeignContentGzipEncodingAutoConfiguration is throwing exception when okhttp is not in the classpath #2797

Closed
ezraroi opened this issue Mar 28, 2018 · 10 comments
Assignees
Milestone

Comments

@ezraroi
Copy link

ezraroi commented Mar 28, 2018

Looks like the latest fix for #2462 broke some stuff.
We get this exception:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.cloud.netflix.feign.encoding.FeignContentGzipEncodingAutoConfiguration': Initialization of bean failed; nested exception is java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:372)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:519)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:508)
	at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1188)
	at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:261)
	at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:265)
	at org.springframework.cloud.context.named.NamedContextFactory.getInstances(NamedContextFactory.java:133)
	at org.springframework.cloud.sleuth.instrument.web.client.feign.TraceFeignContext.getInstances(TraceFeignContext.java:36)
	at org.springframework.cloud.netflix.feign.FeignClientFactoryBean.configureUsingConfiguration(FeignClientFactoryBean.java:135)
	at org.springframework.cloud.netflix.feign.FeignClientFactoryBean.configureFeign(FeignClientFactoryBean.java:105)
	at org.springframework.cloud.netflix.feign.FeignClientFactoryBean.feign(FeignClientFactoryBean.java:96)
	at org.springframework.cloud.netflix.feign.FeignClientFactoryBean.getObject(FeignClientFactoryBean.java:221)
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:168)
	... 55 more
Caused by: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
	at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:724)
	at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:531)
	at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:355)
	at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286)
	at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120)
	at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72)
	at java.lang.Class.createAnnotationData(Class.java:3521)
	at java.lang.Class.annotationData(Class.java:3510)
	at java.lang.Class.createAnnotationData(Class.java:3526)
	at java.lang.Class.annotationData(Class.java:3510)
	at java.lang.Class.getAnnotations(Class.java:3446)
	at org.springframework.transaction.annotation.AnnotationTransactionAttributeSource.determineTransactionAttribute(AnnotationTransactionAttributeSource.java:153)
	at org.springframework.transaction.annotation.AnnotationTransactionAttributeSource.findTransactionAttribute(AnnotationTransactionAttributeSource.java:138)
	at org.springframework.transaction.interceptor.AbstractFallbackTransactionAttributeSource.computeTransactionAttribute(AbstractFallbackTransactionAttributeSource.java:164)
	at org.springframework.transaction.interceptor.AbstractFallbackTransactionAttributeSource.getTransactionAttribute(AbstractFallbackTransactionAttributeSource.java:105)
	at org.springframework.transaction.interceptor.TransactionAttributeSourcePointcut.matches(TransactionAttributeSourcePointcut.java:41)
	at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:242)
	at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:279)
	at org.springframework.aop.support.AopUtils.findAdvisorsThatCanApply(AopUtils.java:311)
	at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply(AbstractAdvisorAutoProxyCreator.java:119)
	at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:89)
	at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:70)
	at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:346)
	at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:298)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:423)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1633)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
	... 81 more

When we add okhttp to our classpath everything works fine again.
Looks like this is causing the problem:
@ConditionalOnMissingBean(OkHttpClient.class)

@ezraroi
Copy link
Author

ezraroi commented Mar 28, 2018

the same for FeignAcceptGzipEncodingAutoConfiguration

@ryanjbaxter
Copy link
Contributor

Can you provide details of how to reproduce this, besides just not having OKHTTP on the classpath? What is the app doing?

@ezraroi
Copy link
Author

ezraroi commented Mar 29, 2018

The application is not starting as the above exception is thrown while building the context

@ryanjbaxter
Copy link
Contributor

OK I just need more details on how to reproduce it besides just excluding OKHTTP, can you provide a sample?

@ezraroi
Copy link
Author

ezraroi commented Mar 30, 2018

Sure, will try.. This happened to all our applications but we have a framework between. Will try to create a minimal example

@Alvise88
Copy link

Alvise88 commented Apr 6, 2018

I've the same problem. The problem is present only from 1.4.4 version. Looking at FeignContentGzipEncodingAutoConfiguration i discovered that in version 1.4.3 there is this condition @ConditionalOnBean(ApacheHttpClient.class) instead in version 1.4.4 the condition becomes @ConditionalOnMissingBean(OkHttpClient.class). The possible workaround is to set feign.compression.response.enabled=false or to leave the default value.

@rogerluoz
Copy link

I also encounter this issue when I upgraded spring-cloud-dependencies from "Edgware.SR2" to "Edgware.SR3", my temporary solution is set below 2 properties to 'false':
feign.compression.request.enabled=false
feign.compression.response.enabled=false

@ryanjbaxter
Copy link
Contributor

Again, looking for a project that reproduces this. When I try this locally without OK HTTP on the classpath I am not getting the exception

@poulbildsoe
Copy link

If the class is missing completely the exceptions is the expected outcome. This is for the same reason as ConditionalOnMissingClass only takes String value. The solution is to either use ConditionalOnMissingClass or set the type as a String ie. type in ConditionalOnMissingBean.

@ryanjbaxter
Copy link
Contributor

@poulbildsoe yes i know the solution, I just cant get into a state where I see the issue. This is why I have asked multiple times for a project to reproduce this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants