From 85ef54a9a1b3cd75e36ae0d6f5a585e67bac059f Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Thu, 21 Jul 2016 08:25:25 +0100 Subject: [PATCH] Fix Feign validation for Spring 4.2 and 4.3 There is a utility method in Spring that we can use to merge all the aliases. That way 4.2 and 4.3 behave the same way. Fixes gh-1192 --- .../cloud/netflix/feign/FeignClientsRegistrar.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientsRegistrar.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientsRegistrar.java index 3501b30d..cd111ed3 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientsRegistrar.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientsRegistrar.java @@ -40,6 +40,7 @@ import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.ResourceLoaderAware; import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; +import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.io.ResourceLoader; import org.springframework.core.type.AnnotationMetadata; import org.springframework.core.type.ClassMetadata; @@ -154,6 +155,8 @@ class FeignClientsRegistrar implements ImportBeanDefinitionRegistrar, Map attributes = annotationMetadata .getAnnotationAttributes( FeignClient.class.getCanonicalName()); + // Spring 4.2 didn't do this for us. With 4.3 it's idempotent. + attributes = AnnotationAttributes.fromMap(attributes); String name = getClientName(attributes); registerClientConfiguration(registry, name, @@ -193,10 +196,6 @@ class FeignClientsRegistrar implements ImportBeanDefinitionRegistrar, Assert.isTrue(!StringUtils.hasText((String) attributes.get("serviceId")), "Either name (serviceId) or value can be specified, but not both"); } - if (StringUtils.hasText((String) attributes.get("name"))) { - Assert.isTrue(!StringUtils.hasText((String) attributes.get("serviceId")), - "Either name or serviceId can be specified, but not both"); - } } private String getName(Map attributes) {