Skip to content

Commit

Permalink
Adding a constructor for the RetryableException to include a Response… (
Browse files Browse the repository at this point in the history
#2123)

* Adding a constructor for the RetryableException to include a Response Body and Response Header parameter

* formatting test
  • Loading branch information
FloLei authored Jul 16, 2023
1 parent fa38500 commit 189ab43
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 0 deletions.
12 changes: 12 additions & 0 deletions core/src/main/java/feign/RetryableException.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@
package feign;

import feign.Request.HttpMethod;
import java.util.Collection;
import java.util.Date;
import java.util.Map;

/**
* This exception is raised when the {@link Response} is deemed to be retryable, typically via an
Expand Down Expand Up @@ -47,6 +49,16 @@ public RetryableException(int status, String message, HttpMethod httpMethod, Dat
this.retryAfter = retryAfter != null ? retryAfter.getTime() : null;
}

/**
* @param retryAfter usually corresponds to the {@link feign.Util#RETRY_AFTER} header.
*/
public RetryableException(int status, String message, HttpMethod httpMethod, Date retryAfter,
Request request, byte[] responseBody, Map<String, Collection<String>> responseHeaders) {
super(status, message, request, responseBody, responseHeaders);
this.httpMethod = httpMethod;
this.retryAfter = retryAfter != null ? retryAfter.getTime() : null;
}

/**
* Sometimes corresponds to the {@link feign.Util#RETRY_AFTER} header present in {@code 503}
* status. Other times parsed from an application-specific response. Null if unknown.
Expand Down
43 changes: 43 additions & 0 deletions core/src/test/java/feign/RetryableExceptionTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* Copyright 2012-2023 The Feign Authors
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package feign;

import org.junit.Test;
import java.nio.charset.StandardCharsets;
import java.util.*;
import static feign.Util.UTF_8;
import static org.junit.Assert.*;

public class RetryableExceptionTest {

@Test
public void createRetryableExceptionWithResponseAndResponseHeader() {
// given
Request request =
Request.create(Request.HttpMethod.GET, "/", Collections.emptyMap(), null, Util.UTF_8);
byte[] response = "response".getBytes(StandardCharsets.UTF_8);
Map<String, Collection<String>> responseHeader = new HashMap<>();
responseHeader.put("TEST_HEADER", Arrays.asList("TEST_CONTENT"));

// when
RetryableException retryableException =
new RetryableException(-1, null, null, new Date(5000), request, response, responseHeader);

// then
assertNotNull(retryableException);
assertEquals(new String(response, UTF_8), retryableException.contentUTF8());
assertTrue(retryableException.responseHeaders().containsKey("TEST_HEADER"));
assertTrue(retryableException.responseHeaders().get("TEST_HEADER").contains("TEST_CONTENT"));
}
}

0 comments on commit 189ab43

Please sign in to comment.