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

springboot 3.2 app not starting with reactive feign in class path #651

Open
jbaddam17 opened this issue Dec 8, 2023 · 20 comments
Open

springboot 3.2 app not starting with reactive feign in class path #651

jbaddam17 opened this issue Dec 8, 2023 · 20 comments

Comments

@jbaddam17
Copy link

Invalid value type for attribute 'factoryBeanObjectType': java.lang.String

java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration.propertySourcesPlaceholderConfigurer
	at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:60) ~[spring-boot-autoconfigure-3.2.0.jar:3.2.0]
	at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:108) ~[spring-context-6.1.1.jar:6.1.1]
	at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForBeanMethod(ConfigurationClassBeanDefinitionReader.java:183) ~[spring-context-6.1.1.jar:6.1.1]
	at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:144) ~[spring-context-6.1.1.jar:6.1.1]
	at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) ~[spring-context-6.1.1.jar:6.1.1]
	at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) ~[spring-context-6.1.1.jar:6.1.1]
	at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) ~[spring-context-6.1.1.jar:6.1.1]
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) ~[spring-context-6.1.1.jar:6.1.1]
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) ~[spring-context-6.1.1.jar:6.1.1]
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) ~[spring-context-6.1.1.jar:6.1.1]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) ~[spring-context-6.1.1.jar:6.1.1]
	at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66) ~[spring-boot-3.2.0.jar:3.2.0]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) ~[spring-boot-3.2.0.jar:3.2.0]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) ~[spring-boot-3.2.0.jar:3.2.0]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) ~[spring-boot-3.2.0.jar:3.2.0]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1342) ~[spring-boot-3.2.0.jar:3.2.0]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1331) ~[spring-boot-3.2.0.jar:3.2.0]
	at u.s.apigateway.ApiGatewayApplication.main(ApiGatewayApplication.java:30) ~[classes/:na]
Caused by: java.lang.IllegalArgumentException: **Invalid value type for attribute 'factoryBeanObjectType': java.lang.String**
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getTypeForFactoryBeanFromAttributes(FactoryBeanRegistrySupport.java:86) ~[spring-beans-6.1.1.jar:6.1.1]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:838) ~[spring-beans-6.1.1.jar:6.1.1]
	at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:620) ~[spring-beans-6.1.1.jar:6.1.1]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:573) ~[spring-beans-6.1.1.jar:6.1.1]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:532) ~[spring-beans-6.1.1.jar:6.1.1]
	at org.springframework.boot.autoconfigure.condition.OnBeanCondition.collectBeanNamesForType(OnBeanCondition.java:247) ~[spring-boot-autoconfigure-3.2.0.jar:3.2.0]
	at org.springframework.boot.autoconfigure.condition.OnBeanCondition.getBeanNamesForType(OnBeanCondition.java:240) ~[spring-boot-autoconfigure-3.2.0.jar:3.2.0]
	at org.springframework.boot.autoconfigure.condition.OnBeanCondition.getBeanNamesForType(OnBeanCondition.java:230) ~[spring-boot-autoconfigure-3.2.0.jar:3.2.0]
	at org.springframework.boot.autoconfigure.condition.OnBeanCondition.getMatchingBeans(OnBeanCondition.java:183) ~[spring-boot-autoconfigure-3.2.0.jar:3.2.0]
	at org.springframework.boot.autoconfigure.condition.OnBeanCondition.getMatchOutcome(OnBeanCondition.java:158) ~[spring-boot-autoconfigure-3.2.0.jar:3.2.0]
	at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:47) ~[spring-boot-autoconfigure-3.2.0.jar:3.2.0]
	... 17 common frames omitted

using following version

openJDK17
spring-cloud.version 2023.0.0
spring boot parent version 3.2.0
feign-reactor-spring-cloud-starter version 4.0.3

NOTE: Application started normally after removing reactive feign from class path

@ramzes3333
Copy link

Following fix should solve the problem:

Index: feign-reactor-spring-configuration/src/main/java/reactivefeign/spring/config/ReactiveFeignClientsRegistrar.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/feign-reactor-spring-configuration/src/main/java/reactivefeign/spring/config/ReactiveFeignClientsRegistrar.java b/feign-reactor-spring-configuration/src/main/java/reactivefeign/spring/config/ReactiveFeignClientsRegistrar.java
--- a/feign-reactor-spring-configuration/src/main/java/reactivefeign/spring/config/ReactiveFeignClientsRegistrar.java	(revision 01ff94d5eafceaa49c1ca2aee1928a8808ae56b9)
+++ b/feign-reactor-spring-configuration/src/main/java/reactivefeign/spring/config/ReactiveFeignClientsRegistrar.java	(date 1702303241012)
@@ -178,7 +178,8 @@
 
 		String alias = name + "ReactiveFeignClient";
 		AbstractBeanDefinition beanDefinition = definition.getBeanDefinition();
-		beanDefinition.setAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE, className);
+		Class<?> type = ClassUtils.resolveClassName(className, null);
+		beanDefinition.setAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE, type);
 
 		boolean primary = (Boolean)attributes.get("primary"); // has a default, won't be null
 

ramzes3333 added a commit to ramzes3333/feign-reactive that referenced this issue Dec 11, 2023
springboot 3.2 app not starting with reactive feign in class path
@zzzzizu123
Copy link

Hey, @ramzes3333

I am using the reactive feign client solution. Are you going to release a version with the fix, or should I use your example as solution in my code.

however, how can I implement your solution in my code?

Thanks ahead.

@ramzes3333
Copy link

I think it's best to wait for the authors to release an official package with this fix. For testing purposes, you can clone my fork with this fix, build it, and integrate it into your project.

@zzzzizu123
Copy link

zzzzizu123 commented Dec 17, 2023

Thanks @ramzes3333
I used your solution and it seems to be working.
I encountered another issue that happens according to this: spring-projects/spring-boot#38536

We get run error of finding multiple beans for feignConvrtionService.
The solution should be to modify
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <parameters>true</parameters> </configuration> </plugin>

As described here:
https://github.com/spring-projects/spring-framework/wiki/Upgrading-to-Spring-Framework-6.x#core-container:~:text=jndi%2Dlookup%3E.-,Parameter%20Name%20Retention,-LocalVariableTableParameterNameDiscoverer%20has%20been

@zzzzizu123
Copy link

Do you have any estimation when the version with the fix will be released?
Thanks, ahead

@ramzes3333
Copy link

Do you have any estimation when the version with the fix will be released? Thanks, ahead

@zzzzizu123 Unfortunately, I do not have the knowledge of when the version with the fix will be released. I am not the owner of this repository. Just like you, I use this library and want to use it together with Spring Boot in version 3.2 :)

@fflandrin-yseop
Copy link

We are having the same issue. Using @ramzes3333 fork works great as a temporary fix while waiting for a release with a permanent fix.

@Ahoo-Wang
Copy link

I waited too long for this feature, so I had to create CoApi - https://github.com/Ahoo-Wang/CoApi

@miwurster
Copy link

Following fix should solve the problem:

Index: feign-reactor-spring-configuration/src/main/java/reactivefeign/spring/config/ReactiveFeignClientsRegistrar.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/feign-reactor-spring-configuration/src/main/java/reactivefeign/spring/config/ReactiveFeignClientsRegistrar.java b/feign-reactor-spring-configuration/src/main/java/reactivefeign/spring/config/ReactiveFeignClientsRegistrar.java
--- a/feign-reactor-spring-configuration/src/main/java/reactivefeign/spring/config/ReactiveFeignClientsRegistrar.java	(revision 01ff94d5eafceaa49c1ca2aee1928a8808ae56b9)
+++ b/feign-reactor-spring-configuration/src/main/java/reactivefeign/spring/config/ReactiveFeignClientsRegistrar.java	(date 1702303241012)
@@ -178,7 +178,8 @@
 
 		String alias = name + "ReactiveFeignClient";
 		AbstractBeanDefinition beanDefinition = definition.getBeanDefinition();
-		beanDefinition.setAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE, className);
+		Class<?> type = ClassUtils.resolveClassName(className, null);
+		beanDefinition.setAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE, type);
 
 		boolean primary = (Boolean)attributes.get("primary"); // has a default, won't be null
 

Hey guys, is there a plan to release this fix somehow soon(ish)?

@Jardo-51
Copy link

Jardo-51 commented Feb 14, 2024

EDIT: this solution doesn't work if you need to use any extended functionality, such as request interceptors

I managed to figure out a workaround to use the solution from @ramzes3333 without having to build my own version of the entire project.

  1. Copy the implementation of ReactiveFeignClientsRegistrar into your project. It uses a couple of package-private classes. You have to copy those as well.
  2. Make the fix suggested by @ramzes3333
  3. Copy the annotation @EnableReactiveFeignClients into your project and modify the @Import annotation to use your custom implementation of ReactiveFeignClientsRegistrar
  4. Modify your implementation of ReactiveFeignClientsRegistrar to use your custom implementation of @EnableReactiveFeignClients (from the previous step).
  5. Define a bean of type FormattingConversionService and mark it as @Primary

And that's it. Happy coding :)

@tomaszwasik
Copy link

Hey guys, is there a plan to release this fix somehow soon(ish)?

@sahassakhare
Copy link

Hi team, any plans to release spring boot 3.2.x compatible version ?

@caosDvlp
Copy link

Hi Guys! I'm in the same state as the rest, any plasn to release spring boot 3.2.x compatible version ?

@9you
Copy link

9you commented Apr 10, 2024

I managed to figure out a workaround to use the solution from @ramzes3333 without having to build my own version of the entire project.

  1. Copy the implementation of ReactiveFeignClientsRegistrar into your project. It uses a couple of package-private classes. You have to copy those as well.
  2. Make the fix suggested by @ramzes3333
  3. Copy the annotation @EnableReactiveFeignClients into your project and modify the @Import annotation to use your custom implementation of ReactiveFeignClientsRegistrar
  4. Modify your implementation of ReactiveFeignClientsRegistrar to use your custom implementation of @EnableReactiveFeignClients (from the previous step).
  5. Define a bean of type FormattingConversionService and mark it as @Primary

And that's it. Happy coding :)

This solution not working with Load Balancer and Resilience4 :(

@kyra-ohare
Copy link

Hi
I would also love to know when this will be Spring Boot 3 compatible. Please.

@ChiragMoradiya
Copy link

Hi, we also encountered the same issue. This limits us to upgrade spring-boot to 3.1 only. Is there any timeline planned for the fix?

@Jardo-51
Copy link

Jardo-51 commented May 8, 2024

I have created a fork of @ramzes3333's fix and published a new version to Maven Central, to make it available for everyone.

Just replace the starter dependency in your pom.xml with this, and it should work:

		<dependency>
			<groupId>com.jardoapps.reactivefeign</groupId>
			<artifactId>feign-reactor-spring-cloud-starter</artifactId>
			<version>4.1.0</version>
			<type>pom</type>
		</dependency>

If you need any other modules, just replace the groupId with com.jardoapps.reactivefeign and the version with 4.1.0.

@ChiragMoradiya
Copy link

Thanks @Jardo-51 we will try it for sure.

@ramzes3333
Copy link

Hi, we also encountered the same issue. This limits us to upgrade spring-boot to 3.1 only. Is there any timeline planned for the fix?

I think the project is abandoned. In my project, I replaced Feign Reactive with a pure solution based on WebClient.

@Jardo-51
Copy link

I think the project is abandoned.

That's the reason why I decided to fork it and publish a new version.

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