From 7bea518f56bf209398c5b3b679e9df5330dfa5d2 Mon Sep 17 00:00:00 2001 From: swirekadam Date: Wed, 14 Mar 2018 22:48:20 +0100 Subject: [PATCH] fix default method gets wrapped twice (#641) * fix default method gets wrapped twice * check if default method only once --- .../feign/hystrix/HystrixInvocationHandler.java | 5 ++++- .../java/feign/hystrix/HystrixBuilderTest.java | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/hystrix/src/main/java/feign/hystrix/HystrixInvocationHandler.java b/hystrix/src/main/java/feign/hystrix/HystrixInvocationHandler.java index e6b653aa..16e41a8a 100644 --- a/hystrix/src/main/java/feign/hystrix/HystrixInvocationHandler.java +++ b/hystrix/src/main/java/feign/hystrix/HystrixInvocationHandler.java @@ -26,6 +26,7 @@ import java.util.Set; import feign.InvocationHandlerFactory.MethodHandler; import feign.Target; +import feign.Util; import rx.Completable; import rx.Observable; import rx.Single; @@ -143,7 +144,9 @@ final class HystrixInvocationHandler implements InvocationHandler { } }; - if (isReturnsHystrixCommand(method)) { + if (Util.isDefault(method)) { + return hystrixCommand.execute(); + } else if (isReturnsHystrixCommand(method)) { return hystrixCommand; } else if (isReturnsObservable(method)) { // Create a cold Observable diff --git a/hystrix/src/test/java/feign/hystrix/HystrixBuilderTest.java b/hystrix/src/test/java/feign/hystrix/HystrixBuilderTest.java index b1c8407f..7cbed19c 100644 --- a/hystrix/src/test/java/feign/hystrix/HystrixBuilderTest.java +++ b/hystrix/src/test/java/feign/hystrix/HystrixBuilderTest.java @@ -51,6 +51,18 @@ public class HystrixBuilderTest { @Rule public final MockWebServer server = new MockWebServer(); + @Test + public void defaultMethodReturningHystrixCommand() { + server.enqueue(new MockResponse().setBody("\"foo\"")); + + TestInterface api = target(); + + HystrixCommand command = api.defaultMethodReturningCommand(); + + assertThat(command).isNotNull(); + assertThat(command.execute()).isEqualTo("foo"); + } + @Test public void hystrixCommand() { server.enqueue(new MockResponse().setBody("\"foo\"")); @@ -606,6 +618,10 @@ public class HystrixBuilderTest { @Headers("Accept: application/json") HystrixCommand command(); + default HystrixCommand defaultMethodReturningCommand() { + return command(); + } + @RequestLine("GET /") @Headers("Accept: application/json") HystrixCommand intCommand();