diff --git a/spring-cloud-openfeign-core/pom.xml b/spring-cloud-openfeign-core/pom.xml index 78476ceb..263b214d 100644 --- a/spring-cloud-openfeign-core/pom.xml +++ b/spring-cloud-openfeign-core/pom.xml @@ -220,36 +220,6 @@ test - - - - org.apache.maven.plugins - maven-surefire-plugin - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - org.springframework.cloud.openfeign.NonSpringDataTest - - - - Non-Spring-Data - - org.springframework.cloud.openfeign.NonSpringDataTest - - org.springframework.data:spring-data-commons - - - - - - - - java8plus diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/EnableFeignClients.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/EnableFeignClients.java index dfed4f63..35ca3f23 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/EnableFeignClients.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/EnableFeignClients.java @@ -25,10 +25,10 @@ import java.lang.annotation.Target; import org.springframework.context.annotation.Import; /** - * Scans for interfaces that declare they are feign clients (via {@link FeignClient - * @FeignClient}). Configures component scanning directives for use with - * {@link org.springframework.context.annotation.Configuration - * @Configuration} classes. + * Scans for interfaces that declare they are feign clients (via {@link org.springframework.cloud.openfeign.FeignClient} + * @FeignClient). Configures component scanning directives for use with + * {@link org.springframework.context.annotation.Configuration} + * @Configuration classes. * * @author Spencer Gibb * @author Dave Syer diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignAutoConfiguration.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignAutoConfiguration.java index cdf6b06c..337643d9 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignAutoConfiguration.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignAutoConfiguration.java @@ -22,7 +22,6 @@ import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.TimeUnit; -import com.fasterxml.jackson.databind.Module; import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; import org.apache.http.config.RegistryBuilder; @@ -40,10 +39,8 @@ import org.springframework.cloud.commons.httpclient.ApacheHttpClientFactory; import org.springframework.cloud.commons.httpclient.OkHttpClientConnectionPoolFactory; import org.springframework.cloud.commons.httpclient.OkHttpClientFactory; import org.springframework.cloud.openfeign.support.FeignHttpClientProperties; -import org.springframework.cloud.openfeign.support.PageJacksonModule; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.data.domain.Page; import feign.Client; import feign.Feign; @@ -209,10 +206,4 @@ public class FeignAutoConfiguration { return new OkHttpClient(client); } } - - @Bean - @ConditionalOnClass(Page.class) - public Module pageJacksonModule(){ - return new PageJacksonModule(); - } } diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientsConfiguration.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientsConfiguration.java index c7118d2e..6f737499 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientsConfiguration.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientsConfiguration.java @@ -20,6 +20,7 @@ package org.springframework.cloud.openfeign; import java.util.ArrayList; import java.util.List; +import com.fasterxml.jackson.databind.Module; import org.springframework.beans.factory.ObjectFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -27,15 +28,12 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; -import org.springframework.cloud.openfeign.support.PageableSpringEncoder; -import org.springframework.cloud.openfeign.support.ResponseEntityDecoder; -import org.springframework.cloud.openfeign.support.SpringDecoder; -import org.springframework.cloud.openfeign.support.SpringEncoder; -import org.springframework.cloud.openfeign.support.SpringMvcContract; +import org.springframework.cloud.openfeign.support.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; import org.springframework.core.convert.ConversionService; +import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.format.support.DefaultFormattingConversionService; import org.springframework.format.support.FormattingConversionService; @@ -136,4 +134,9 @@ public class FeignClientsConfiguration { return new DefaultFeignLoggerFactory(logger); } + @Bean + @ConditionalOnClass(Page.class) + public Module pageJacksonModule(){ + return new PageJacksonModule(); + } } diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/EnableFeignClientsTests.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/EnableFeignClientsTests.java index af6b9a51..4a96d7b7 100644 --- a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/EnableFeignClientsTests.java +++ b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/EnableFeignClientsTests.java @@ -17,19 +17,20 @@ package org.springframework.cloud.openfeign; +import org.junit.After; +import org.junit.Before; import org.junit.Test; -import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.cloud.netflix.archaius.ArchaiusAutoConfiguration; import org.springframework.cloud.openfeign.support.SpringEncoder; import org.springframework.cloud.openfeign.support.SpringMvcContract; +import org.springframework.cloud.test.ClassPathExclusions; +import org.springframework.cloud.test.ModifiedClassPathRunner; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import feign.Contract; import feign.Feign; @@ -42,46 +43,57 @@ import feign.slf4j.Slf4jLogger; /** * @author Spencer Gibb */ -@RunWith(SpringJUnit4ClassRunner.class) -@SpringBootTest(classes = EnableFeignClientsTests.PlainConfiguration.class) -@DirtiesContext -@Category({NonSpringDataTest.class}) +@RunWith(ModifiedClassPathRunner.class) +@ClassPathExclusions({"spring-data-commons-*.jar"}) public class EnableFeignClientsTests { - @Autowired - private FeignContext feignContext; + private ConfigurableApplicationContext context; + + @Before + public void setUp() { + context = new SpringApplicationBuilder().web(WebApplicationType.NONE) + .properties("debug=true", "feign.httpclient.enabled=false") + .sources(EnableFeignClientsTests.PlainConfiguration.class).run(); + } + + @After + public void tearDown() { + if(context != null) { + context.close(); + } + } + @Test public void decoderDefaultCorrect() { OptionalDecoder.class - .cast(this.feignContext.getInstance("foo", Decoder.class)); + .cast(this.context.getBeansOfType(Decoder.class).get(0)); } @Test public void encoderDefaultCorrect() { - - SpringEncoder.class.cast(this.feignContext.getInstance("foo", Encoder.class)); + SpringEncoder.class.cast(this.context.getBeansOfType(Encoder.class).get(0)); } @Test public void loggerDefaultCorrect() { - Slf4jLogger.class.cast(this.feignContext.getInstance("foo", Logger.class)); + Slf4jLogger.class.cast(this.context.getBeansOfType( Logger.class).get(0)); } @Test public void contractDefaultCorrect() { SpringMvcContract.class - .cast(this.feignContext.getInstance("foo", Contract.class)); + .cast(this.context.getBeansOfType(Contract.class).get(0)); } @Test public void builderDefaultCorrect() { Feign.Builder.class - .cast(this.feignContext.getInstance("foo", Feign.Builder.class)); + .cast(this.context.getBeansOfType(Feign.Builder.class).get(0)); } @Configuration - @Import({ PropertyPlaceholderAutoConfiguration.class, ArchaiusAutoConfiguration.class, + @Import({ ArchaiusAutoConfiguration.class, FeignAutoConfiguration.class }) protected static class PlainConfiguration { } diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/NonSpringDataTest.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/NonSpringDataTest.java deleted file mode 100644 index b2af3bfb..00000000 --- a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/NonSpringDataTest.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.springframework.cloud.openfeign; - -public interface NonSpringDataTest { -} diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/encoding/FeignContentEncodingTests.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/encoding/FeignContentEncodingTests.java index c85fad45..748b0e6e 100644 --- a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/encoding/FeignContentEncodingTests.java +++ b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/encoding/FeignContentEncodingTests.java @@ -23,7 +23,6 @@ import java.util.Collections; import java.util.List; import org.junit.Test; -import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -31,7 +30,6 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.cloud.openfeign.NonSpringDataTest; import org.springframework.cloud.openfeign.encoding.app.client.InvoiceClient; import org.springframework.cloud.openfeign.encoding.app.domain.Invoice; import org.springframework.cloud.netflix.ribbon.RibbonClient; @@ -39,11 +37,6 @@ import org.springframework.cloud.openfeign.test.NoSecurityConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.web.config.EnableSpringDataWebSupport; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -62,7 +55,6 @@ import com.netflix.loadbalancer.Server; "hystrix.command.default.execution.isolation.strategy=SEMAPHORE", "ribbon.OkToRetryOnAllOperations=false" }) @RunWith(SpringJUnit4ClassRunner.class) -@Category({NonSpringDataTest.class}) public class FeignContentEncodingTests { @Autowired diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/encoding/FeignPageableEncodingTests.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/encoding/FeignPageableEncodingTests.java index c5dbffcc..08c93aca 100644 --- a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/encoding/FeignPageableEncodingTests.java +++ b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/encoding/FeignPageableEncodingTests.java @@ -28,6 +28,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.cloud.netflix.ribbon.RibbonClient; import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.cloud.openfeign.FeignClientsConfiguration; import org.springframework.cloud.openfeign.encoding.app.client.InvoiceClient; import org.springframework.cloud.openfeign.encoding.app.domain.Invoice; import org.springframework.cloud.openfeign.test.NoSecurityConfiguration; @@ -85,7 +86,7 @@ public class FeignPageableEncodingTests { @RibbonClient(name = "local", configuration = LocalRibbonClientConfiguration.class) @SpringBootApplication(scanBasePackages = "org.springframework.cloud.openfeign.encoding.app") @EnableSpringDataWebSupport - @Import(NoSecurityConfiguration.class) + @Import({NoSecurityConfiguration.class, FeignClientsConfiguration.class}) public static class Application { }