{"id":29,"date":"2017-04-12T22:55:48","date_gmt":"2017-04-12T22:55:48","guid":{"rendered":"http:\/\/www.matez.de\/?p=29"},"modified":"2017-04-12T22:55:48","modified_gmt":"2017-04-12T22:55:48","slug":"exploring-feign-retrying","status":"publish","type":"post","link":"https:\/\/www.matez.de\/index.php\/2017\/04\/12\/exploring-feign-retrying\/","title":{"rendered":"Exploring Feign &#8211; Retrying"},"content":{"rendered":"<p><a href=\"https:\/\/github.com\/OpenFeign\/feign\">Feign<\/a> is a library, which makes it easier to implement a http client. Recently more and more people start writing http clients, because they are creating microservices which communicate with http protocol. So there are all sorts of libraries supporting this task like Jersey, Resteasy and others &#8211; and there is Feign.<\/p>\n<p>Today I do not want to explain the basic functionality, this is all done on the <a href=\"https:\/\/github.com\/OpenFeign\/feign\/blob\/master\/README.md\">Readme <\/a>page itself. Today I want to get into the details of a feature, which becomes more and more important, because in modern distributed systems, you want to have resilient behaviour, which means that you want to design your service in the way, that it can handle unexpected situations without noticing on user&#8217;s site. For example an API you are calling is not reachable at the moment, the request times out or the requested resource is not yet available. To solve this issue, you need to apply a retry pattern, so that you increase the chance that the service request is successfull after the first, the second or the nth attempt.<\/p>\n<p>What most developers don&#8217;t know, Feign has a default retryer built-in.<\/p>\n<p>Now I show\u00a0a few code examples, what you can expect from this feature. What I am showing are junit tests with a client mock, so that we are able to stub certain errors and verify, how many retries have been made.<\/p>\n<h2>Case 1) Success<\/h2>\n<p>no retry needed.<\/p>\n<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/REC-html40\/loose.dtd\">\n<html><body><div id=\"gist46646474\" class=\"gist\">\n    <div class=\"gist-file\" translate=\"no\" data-color-mode=\"light\" data-light-theme=\"light\">\n      <div class=\"gist-data\">\n        \n<div class=\"js-gist-file-update-container js-task-list-container\">\n      <div id=\"file-feigntest-java\" class=\"file my-2\">\n    \n    <div itemprop=\"text\" class=\"Box-body p-0 blob-wrapper data type-java  \" style=\"overflow: auto\" tabindex=\"0\" role=\"region\" aria-label=\"FeignTest.java content, created by mwiede on 10:09PM on April 12, 2017.\">\n\n        \n<div class=\"js-check-hidden-unicode js-blob-code-container blob-code-content\">\n\n  <template class=\"js-file-alert-template\">\n  <div data-view-component=\"true\" class=\"flash flash-warn flash-full d-flex flex-items-center\">\n  <svg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg>\n    <span>\n      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.\n      <a class=\"Link--inTextBlock\" href=\"https:\/\/github.co\/hiddenchars\" target=\"_blank\">Learn more about bidirectional Unicode characters<\/a>\n    <\/span>\n\n\n  <div data-view-component=\"true\" class=\"flash-action\">        <a href=\"%7B%7B%20revealButtonHref%20%7D%7D\" data-view-component=\"true\" class=\"btn-sm btn\">    Show hidden characters\n<\/a>\n<\/div>\n<\/div><\/template>\n<template class=\"js-line-alert-template\">\n  <span aria-label=\"This line has hidden Unicode characters\" data-view-component=\"true\" class=\"line-alert tooltipped tooltipped-e\">\n    <svg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg>\n<\/span><\/template>\n\n  <table data-hpc class=\"highlight tab-size js-file-line-container\" data-tab-size=\"4\" data-paste-markdown-skip data-tagsearch-path=\"FeignTest.java\">\n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L36\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"36\"><\/td>\n          <td id=\"file-feigntest-java-LC36\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-c1\">@<\/span><span class=\"pl-c1\">Test<\/span><\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L37\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"37\"><\/td>\n          <td id=\"file-feigntest-java-LC37\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-k\">public<\/span> <span class=\"pl-smi\">void<\/span> <span class=\"pl-en\">testSuccess<\/span>() <span class=\"pl-k\">throws<\/span> <span class=\"pl-smi\">IOException<\/span> {<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L38\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"38\"><\/td>\n          <td id=\"file-feigntest-java-LC38\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L39\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"39\"><\/td>\n          <td id=\"file-feigntest-java-LC39\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-en\">when<\/span>(<span class=\"pl-s1\">clientMock<\/span>.<span class=\"pl-en\">execute<\/span>(<span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Request<\/span>.<span class=\"pl-k\">class<\/span>), <span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Options<\/span>.<span class=\"pl-k\">class<\/span>))).<span class=\"pl-en\">thenReturn<\/span>(<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L40\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"40\"><\/td>\n          <td id=\"file-feigntest-java-LC40\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-smi\">Response<\/span>.<span class=\"pl-en\">builder<\/span>().<span class=\"pl-en\">status<\/span>(<span class=\"pl-c1\">200<\/span>).<span class=\"pl-en\">headers<\/span>(<span class=\"pl-smi\">Collections<\/span>.&lt;<span class=\"pl-smi\">String<\/span>, <span class=\"pl-smi\">Collection<\/span>&lt;<span class=\"pl-smi\">String<\/span>&gt;&gt;<span class=\"pl-en\">emptyMap<\/span>())<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L41\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"41\"><\/td>\n          <td id=\"file-feigntest-java-LC41\" class=\"blob-code blob-code-inner js-file-line\">            .<span class=\"pl-en\">build<\/span>());<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L42\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"42\"><\/td>\n          <td id=\"file-feigntest-java-LC42\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L43\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"43\"><\/td>\n          <td id=\"file-feigntest-java-LC43\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">final<\/span> <span class=\"pl-smi\">GitHub<\/span> <span class=\"pl-s1\">github<\/span> =<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L44\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"44\"><\/td>\n          <td id=\"file-feigntest-java-LC44\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-smi\">Feign<\/span>.<span class=\"pl-en\">builder<\/span>().<span class=\"pl-en\">client<\/span>(<span class=\"pl-s1\">clientMock<\/span>).<span class=\"pl-en\">decoder<\/span>(<span class=\"pl-k\">new<\/span> <span class=\"pl-smi\">GsonDecoder<\/span>())<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L45\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"45\"><\/td>\n          <td id=\"file-feigntest-java-LC45\" class=\"blob-code blob-code-inner js-file-line\">            .<span class=\"pl-en\">target<\/span>(<span class=\"pl-smi\">GitHub<\/span>.<span class=\"pl-k\">class<\/span>, <span class=\"pl-s\">\"https:\/\/api.github.com\"<\/span>);<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L46\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"46\"><\/td>\n          <td id=\"file-feigntest-java-LC46\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L47\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"47\"><\/td>\n          <td id=\"file-feigntest-java-LC47\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s1\">github<\/span>.<span class=\"pl-en\">contributors<\/span>(<span class=\"pl-s\">\"OpenFeign\"<\/span>, <span class=\"pl-s\">\"feign\"<\/span>);<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L48\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"48\"><\/td>\n          <td id=\"file-feigntest-java-LC48\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L49\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"49\"><\/td>\n          <td id=\"file-feigntest-java-LC49\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-en\">verify<\/span>(<span class=\"pl-s1\">clientMock<\/span>, <span class=\"pl-en\">times<\/span>(<span class=\"pl-c1\">1<\/span>)).<span class=\"pl-en\">execute<\/span>(<span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Request<\/span>.<span class=\"pl-k\">class<\/span>), <span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Options<\/span>.<span class=\"pl-k\">class<\/span>));<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L50\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"50\"><\/td>\n          <td id=\"file-feigntest-java-LC50\" class=\"blob-code blob-code-inner js-file-line\">  }<\/td>\n        <\/tr>\n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n  <\/table>\n<\/div>\n\n\n    <\/div>\n\n  <\/div>\n\n<\/div>\n\n      <\/div>\n      <div class=\"gist-meta\">\n        <a href=\"https:\/\/gist.github.com\/mwiede\/3eeaa0566119f0a3aabf48b5e093d635\/raw\/bd1a8b555712d4e5dffbda0b794adb9dd280c2d1\/FeignTest.java\" style=\"float:right\" class=\"Link--inTextBlock\">view raw<\/a>\n        <a href=\"https:\/\/gist.github.com\/mwiede\/3eeaa0566119f0a3aabf48b5e093d635#file-feigntest-java\" class=\"Link--inTextBlock\">\n          FeignTest.java\n        <\/a>\n        hosted with &#10084; by <a class=\"Link--inTextBlock\" href=\"https:\/\/github.com\">GitHub<\/a>\n      <\/div>\n    <\/div>\n<\/div>\n<\/body><\/html>\n\n<h2>Case 2) Destination never reachable.<\/h2>\n<p>In this case, we can see the Default Retryer working, which ends up doing 5 attempts, but finally the client invocation throws an exception.<\/p>\n<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/REC-html40\/loose.dtd\">\n<html><body><div id=\"gist46646474\" class=\"gist\">\n    <div class=\"gist-file\" translate=\"no\" data-color-mode=\"light\" data-light-theme=\"light\">\n      <div class=\"gist-data\">\n        \n<div class=\"js-gist-file-update-container js-task-list-container\">\n      <div id=\"file-feigntest-java\" class=\"file my-2\">\n    \n    <div itemprop=\"text\" class=\"Box-body p-0 blob-wrapper data type-java  \" style=\"overflow: auto\" tabindex=\"0\" role=\"region\" aria-label=\"FeignTest.java content, created by mwiede on 10:09PM on April 12, 2017.\">\n\n        \n<div class=\"js-check-hidden-unicode js-blob-code-container blob-code-content\">\n\n  <template class=\"js-file-alert-template\">\n  <div data-view-component=\"true\" class=\"flash flash-warn flash-full d-flex flex-items-center\">\n  <svg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg>\n    <span>\n      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.\n      <a class=\"Link--inTextBlock\" href=\"https:\/\/github.co\/hiddenchars\" target=\"_blank\">Learn more about bidirectional Unicode characters<\/a>\n    <\/span>\n\n\n  <div data-view-component=\"true\" class=\"flash-action\">        <a href=\"%7B%7B%20revealButtonHref%20%7D%7D\" data-view-component=\"true\" class=\"btn-sm btn\">    Show hidden characters\n<\/a>\n<\/div>\n<\/div><\/template>\n<template class=\"js-line-alert-template\">\n  <span aria-label=\"This line has hidden Unicode characters\" data-view-component=\"true\" class=\"line-alert tooltipped tooltipped-e\">\n    <svg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg>\n<\/span><\/template>\n\n  <table data-hpc class=\"highlight tab-size js-file-line-container\" data-tab-size=\"4\" data-paste-markdown-skip data-tagsearch-path=\"FeignTest.java\">\n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L52\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"52\"><\/td>\n          <td id=\"file-feigntest-java-LC52\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-c1\">@<\/span><span class=\"pl-c1\">Test<\/span><\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L53\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"53\"><\/td>\n          <td id=\"file-feigntest-java-LC53\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-k\">public<\/span> <span class=\"pl-smi\">void<\/span> <span class=\"pl-en\">testDefaultRetryerGivingUp<\/span>() <span class=\"pl-k\">throws<\/span> <span class=\"pl-smi\">IOException<\/span> {<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L54\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"54\"><\/td>\n          <td id=\"file-feigntest-java-LC54\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L55\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"55\"><\/td>\n          <td id=\"file-feigntest-java-LC55\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-en\">when<\/span>(<span class=\"pl-s1\">clientMock<\/span>.<span class=\"pl-en\">execute<\/span>(<span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Request<\/span>.<span class=\"pl-k\">class<\/span>), <span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Options<\/span>.<span class=\"pl-k\">class<\/span>))).<span class=\"pl-en\">thenThrow<\/span>(<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L56\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"56\"><\/td>\n          <td id=\"file-feigntest-java-LC56\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">new<\/span> <span class=\"pl-smi\">UnknownHostException<\/span>());<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L57\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"57\"><\/td>\n          <td id=\"file-feigntest-java-LC57\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L58\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"58\"><\/td>\n          <td id=\"file-feigntest-java-LC58\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">final<\/span> <span class=\"pl-smi\">GitHub<\/span> <span class=\"pl-s1\">github<\/span> =<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L59\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"59\"><\/td>\n          <td id=\"file-feigntest-java-LC59\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-smi\">Feign<\/span>.<span class=\"pl-en\">builder<\/span>().<span class=\"pl-en\">client<\/span>(<span class=\"pl-s1\">clientMock<\/span>).<span class=\"pl-en\">decoder<\/span>(<span class=\"pl-k\">new<\/span> <span class=\"pl-smi\">GsonDecoder<\/span>())<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L60\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"60\"><\/td>\n          <td id=\"file-feigntest-java-LC60\" class=\"blob-code blob-code-inner js-file-line\">            .<span class=\"pl-en\">target<\/span>(<span class=\"pl-smi\">GitHub<\/span>.<span class=\"pl-k\">class<\/span>, <span class=\"pl-s\">\"https:\/\/api.github.com\"<\/span>);<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L61\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"61\"><\/td>\n          <td id=\"file-feigntest-java-LC61\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L62\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"62\"><\/td>\n          <td id=\"file-feigntest-java-LC62\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">try<\/span> {<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L63\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"63\"><\/td>\n          <td id=\"file-feigntest-java-LC63\" class=\"blob-code blob-code-inner js-file-line\">      <span class=\"pl-s1\">github<\/span>.<span class=\"pl-en\">contributors<\/span>(<span class=\"pl-s\">\"OpenFeign\"<\/span>, <span class=\"pl-s\">\"feign\"<\/span>);<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L64\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"64\"><\/td>\n          <td id=\"file-feigntest-java-LC64\" class=\"blob-code blob-code-inner js-file-line\">      <span class=\"pl-en\">fail<\/span>(<span class=\"pl-s\">\"not failing\"<\/span>);<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L65\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"65\"><\/td>\n          <td id=\"file-feigntest-java-LC65\" class=\"blob-code blob-code-inner js-file-line\">    } <span class=\"pl-k\">catch<\/span> (<span class=\"pl-k\">final<\/span> <span class=\"pl-smi\">Exception<\/span> <span class=\"pl-s1\">e<\/span>) {<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L66\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"66\"><\/td>\n          <td id=\"file-feigntest-java-LC66\" class=\"blob-code blob-code-inner js-file-line\">    } <span class=\"pl-k\">finally<\/span> {<\/td>\n        <\/tr>\n        <tr class=\"line line-highlight\">\n          <td id=\"file-feigntest-java-L67\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"67\" style=\"background-color: #ffc !important\"><\/td>\n          <td id=\"file-feigntest-java-LC67\" class=\"blob-code blob-code-inner js-file-line\" style=\"background-color: #ffc !important\">      <span class=\"pl-en\">verify<\/span>(<span class=\"pl-s1\">clientMock<\/span>, <span class=\"pl-en\">times<\/span>(<span class=\"pl-c1\">5<\/span>)).<span class=\"pl-en\">execute<\/span>(<span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Request<\/span>.<span class=\"pl-k\">class<\/span>), <span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Options<\/span>.<span class=\"pl-k\">class<\/span>));<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L68\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"68\"><\/td>\n          <td id=\"file-feigntest-java-LC68\" class=\"blob-code blob-code-inner js-file-line\">    }<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L69\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"69\"><\/td>\n          <td id=\"file-feigntest-java-LC69\" class=\"blob-code blob-code-inner js-file-line\">  }<\/td>\n        <\/tr>\n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n  <\/table>\n<\/div>\n\n\n    <\/div>\n\n  <\/div>\n\n<\/div>\n\n      <\/div>\n      <div class=\"gist-meta\">\n        <a href=\"https:\/\/gist.github.com\/mwiede\/3eeaa0566119f0a3aabf48b5e093d635\/raw\/bd1a8b555712d4e5dffbda0b794adb9dd280c2d1\/FeignTest.java\" style=\"float:right\" class=\"Link--inTextBlock\">view raw<\/a>\n        <a href=\"https:\/\/gist.github.com\/mwiede\/3eeaa0566119f0a3aabf48b5e093d635#file-feigntest-java\" class=\"Link--inTextBlock\">\n          FeignTest.java\n        <\/a>\n        hosted with &#10084; by <a class=\"Link--inTextBlock\" href=\"https:\/\/github.com\">GitHub<\/a>\n      <\/div>\n    <\/div>\n<\/div>\n<\/body><\/html>\n\n<h2>Case 3) Configure maximal number of attempts<\/h2>\n<p>Taking the same error scenario from case 2, this example shows how to configure the retryer to stop trying after the 3rd attempt.<\/p>\n<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/REC-html40\/loose.dtd\">\n<html><body><div id=\"gist46646474\" class=\"gist\">\n    <div class=\"gist-file\" translate=\"no\" data-color-mode=\"light\" data-light-theme=\"light\">\n      <div class=\"gist-data\">\n        \n<div class=\"js-gist-file-update-container js-task-list-container\">\n      <div id=\"file-feigntest-java\" class=\"file my-2\">\n    \n    <div itemprop=\"text\" class=\"Box-body p-0 blob-wrapper data type-java  \" style=\"overflow: auto\" tabindex=\"0\" role=\"region\" aria-label=\"FeignTest.java content, created by mwiede on 10:09PM on April 12, 2017.\">\n\n        \n<div class=\"js-check-hidden-unicode js-blob-code-container blob-code-content\">\n\n  <template class=\"js-file-alert-template\">\n  <div data-view-component=\"true\" class=\"flash flash-warn flash-full d-flex flex-items-center\">\n  <svg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg>\n    <span>\n      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.\n      <a class=\"Link--inTextBlock\" href=\"https:\/\/github.co\/hiddenchars\" target=\"_blank\">Learn more about bidirectional Unicode characters<\/a>\n    <\/span>\n\n\n  <div data-view-component=\"true\" class=\"flash-action\">        <a href=\"%7B%7B%20revealButtonHref%20%7D%7D\" data-view-component=\"true\" class=\"btn-sm btn\">    Show hidden characters\n<\/a>\n<\/div>\n<\/div><\/template>\n<template class=\"js-line-alert-template\">\n  <span aria-label=\"This line has hidden Unicode characters\" data-view-component=\"true\" class=\"line-alert tooltipped tooltipped-e\">\n    <svg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg>\n<\/span><\/template>\n\n  <table data-hpc class=\"highlight tab-size js-file-line-container\" data-tab-size=\"4\" data-paste-markdown-skip data-tagsearch-path=\"FeignTest.java\">\n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L71\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"71\"><\/td>\n          <td id=\"file-feigntest-java-LC71\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-c1\">@<\/span><span class=\"pl-c1\">Test<\/span><\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L72\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"72\"><\/td>\n          <td id=\"file-feigntest-java-LC72\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-k\">public<\/span> <span class=\"pl-smi\">void<\/span> <span class=\"pl-en\">testRetryerAttempts<\/span>() <span class=\"pl-k\">throws<\/span> <span class=\"pl-smi\">IOException<\/span> {<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L73\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"73\"><\/td>\n          <td id=\"file-feigntest-java-LC73\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L74\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"74\"><\/td>\n          <td id=\"file-feigntest-java-LC74\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-en\">when<\/span>(<span class=\"pl-s1\">clientMock<\/span>.<span class=\"pl-en\">execute<\/span>(<span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Request<\/span>.<span class=\"pl-k\">class<\/span>), <span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Options<\/span>.<span class=\"pl-k\">class<\/span>))).<span class=\"pl-en\">thenThrow<\/span>(<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L75\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"75\"><\/td>\n          <td id=\"file-feigntest-java-LC75\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">new<\/span> <span class=\"pl-smi\">UnknownHostException<\/span>());<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L76\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"76\"><\/td>\n          <td id=\"file-feigntest-java-LC76\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line line-highlight\">\n          <td id=\"file-feigntest-java-L77\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"77\" style=\"background-color: #ffc !important\"><\/td>\n          <td id=\"file-feigntest-java-LC77\" class=\"blob-code blob-code-inner js-file-line\" style=\"background-color: #ffc !important\">    <span class=\"pl-k\">final<\/span> <span class=\"pl-smi\">int<\/span> <span class=\"pl-s1\">maxAttempts<\/span> = <span class=\"pl-c1\">3<\/span>;<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L78\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"78\"><\/td>\n          <td id=\"file-feigntest-java-LC78\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L79\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"79\"><\/td>\n          <td id=\"file-feigntest-java-LC79\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">final<\/span> <span class=\"pl-smi\">GitHub<\/span> <span class=\"pl-s1\">github<\/span> =<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L80\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"80\"><\/td>\n          <td id=\"file-feigntest-java-LC80\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-smi\">Feign<\/span>.<span class=\"pl-en\">builder<\/span>().<span class=\"pl-en\">client<\/span>(<span class=\"pl-s1\">clientMock<\/span>).<span class=\"pl-en\">decoder<\/span>(<span class=\"pl-k\">new<\/span> <span class=\"pl-smi\">GsonDecoder<\/span>())<\/td>\n        <\/tr>\n        <tr class=\"line line-highlight\">\n          <td id=\"file-feigntest-java-L81\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"81\" style=\"background-color: #ffc !important\"><\/td>\n          <td id=\"file-feigntest-java-LC81\" class=\"blob-code blob-code-inner js-file-line\" style=\"background-color: #ffc !important\">            .<span class=\"pl-en\">retryer<\/span>(<span class=\"pl-k\">new<\/span> <span class=\"pl-smi\">Retryer<\/span>.<span class=\"pl-smi\">Default<\/span>(<span class=\"pl-c1\">1<\/span>, <span class=\"pl-c1\">100<\/span>, <span class=\"pl-s1\">maxAttempts<\/span>))<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L82\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"82\"><\/td>\n          <td id=\"file-feigntest-java-LC82\" class=\"blob-code blob-code-inner js-file-line\">            .<span class=\"pl-en\">target<\/span>(<span class=\"pl-smi\">GitHub<\/span>.<span class=\"pl-k\">class<\/span>, <span class=\"pl-s\">\"https:\/\/api.github.com\"<\/span>);<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L83\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"83\"><\/td>\n          <td id=\"file-feigntest-java-LC83\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L84\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"84\"><\/td>\n          <td id=\"file-feigntest-java-LC84\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">try<\/span> {<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L85\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"85\"><\/td>\n          <td id=\"file-feigntest-java-LC85\" class=\"blob-code blob-code-inner js-file-line\">      <span class=\"pl-s1\">github<\/span>.<span class=\"pl-en\">contributors<\/span>(<span class=\"pl-s\">\"OpenFeign\"<\/span>, <span class=\"pl-s\">\"feign\"<\/span>);<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L86\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"86\"><\/td>\n          <td id=\"file-feigntest-java-LC86\" class=\"blob-code blob-code-inner js-file-line\">      <span class=\"pl-en\">fail<\/span>(<span class=\"pl-s\">\"not failing\"<\/span>);<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L87\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"87\"><\/td>\n          <td id=\"file-feigntest-java-LC87\" class=\"blob-code blob-code-inner js-file-line\">    } <span class=\"pl-k\">catch<\/span> (<span class=\"pl-k\">final<\/span> <span class=\"pl-smi\">Exception<\/span> <span class=\"pl-s1\">e<\/span>) {<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L88\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"88\"><\/td>\n          <td id=\"file-feigntest-java-LC88\" class=\"blob-code blob-code-inner js-file-line\">    } <span class=\"pl-k\">finally<\/span> {<\/td>\n        <\/tr>\n        <tr class=\"line line-highlight\">\n          <td id=\"file-feigntest-java-L89\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"89\" style=\"background-color: #ffc !important\"><\/td>\n          <td id=\"file-feigntest-java-LC89\" class=\"blob-code blob-code-inner js-file-line\" style=\"background-color: #ffc !important\">      <span class=\"pl-en\">verify<\/span>(<span class=\"pl-s1\">clientMock<\/span>, <span class=\"pl-en\">times<\/span>(<span class=\"pl-s1\">maxAttempts<\/span>)).<span class=\"pl-en\">execute<\/span>(<span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Request<\/span>.<span class=\"pl-k\">class<\/span>), <span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Options<\/span>.<span class=\"pl-k\">class<\/span>));<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L90\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"90\"><\/td>\n          <td id=\"file-feigntest-java-LC90\" class=\"blob-code blob-code-inner js-file-line\">    }<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L91\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"91\"><\/td>\n          <td id=\"file-feigntest-java-LC91\" class=\"blob-code blob-code-inner js-file-line\">  }<\/td>\n        <\/tr>\n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n  <\/table>\n<\/div>\n\n\n    <\/div>\n\n  <\/div>\n\n<\/div>\n\n      <\/div>\n      <div class=\"gist-meta\">\n        <a href=\"https:\/\/gist.github.com\/mwiede\/3eeaa0566119f0a3aabf48b5e093d635\/raw\/bd1a8b555712d4e5dffbda0b794adb9dd280c2d1\/FeignTest.java\" style=\"float:right\" class=\"Link--inTextBlock\">view raw<\/a>\n        <a href=\"https:\/\/gist.github.com\/mwiede\/3eeaa0566119f0a3aabf48b5e093d635#file-feigntest-java\" class=\"Link--inTextBlock\">\n          FeignTest.java\n        <\/a>\n        hosted with &#10084; by <a class=\"Link--inTextBlock\" href=\"https:\/\/github.com\">GitHub<\/a>\n      <\/div>\n    <\/div>\n<\/div>\n<\/body><\/html>\n\n<h2>Case 4) trigger retrying\u00a0by error code decoding<\/h2>\n<p>For some (restful) services, http status code 409 (conflict) is used to express a wrong state of the target resource, that might change after resubmitting the request. We simulate, that the first retry will lead to a successfull response.<\/p>\n<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/REC-html40\/loose.dtd\">\n<html><body><div id=\"gist46646474\" class=\"gist\">\n    <div class=\"gist-file\" translate=\"no\" data-color-mode=\"light\" data-light-theme=\"light\">\n      <div class=\"gist-data\">\n        \n<div class=\"js-gist-file-update-container js-task-list-container\">\n      <div id=\"file-feigntest-java\" class=\"file my-2\">\n    \n    <div itemprop=\"text\" class=\"Box-body p-0 blob-wrapper data type-java  \" style=\"overflow: auto\" tabindex=\"0\" role=\"region\" aria-label=\"FeignTest.java content, created by mwiede on 10:09PM on April 12, 2017.\">\n\n        \n<div class=\"js-check-hidden-unicode js-blob-code-container blob-code-content\">\n\n  <template class=\"js-file-alert-template\">\n  <div data-view-component=\"true\" class=\"flash flash-warn flash-full d-flex flex-items-center\">\n  <svg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg>\n    <span>\n      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.\n      <a class=\"Link--inTextBlock\" href=\"https:\/\/github.co\/hiddenchars\" target=\"_blank\">Learn more about bidirectional Unicode characters<\/a>\n    <\/span>\n\n\n  <div data-view-component=\"true\" class=\"flash-action\">        <a href=\"%7B%7B%20revealButtonHref%20%7D%7D\" data-view-component=\"true\" class=\"btn-sm btn\">    Show hidden characters\n<\/a>\n<\/div>\n<\/div><\/template>\n<template class=\"js-line-alert-template\">\n  <span aria-label=\"This line has hidden Unicode characters\" data-view-component=\"true\" class=\"line-alert tooltipped tooltipped-e\">\n    <svg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg>\n<\/span><\/template>\n\n  <table data-hpc class=\"highlight tab-size js-file-line-container\" data-tab-size=\"4\" data-paste-markdown-skip data-tagsearch-path=\"FeignTest.java\">\n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L93\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"93\"><\/td>\n          <td id=\"file-feigntest-java-LC93\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-c1\">@<\/span><span class=\"pl-c1\">Test<\/span><\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L94\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"94\"><\/td>\n          <td id=\"file-feigntest-java-LC94\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-k\">public<\/span> <span class=\"pl-smi\">void<\/span> <span class=\"pl-en\">testCustomRetryConfigByErrorDecoder<\/span>() <span class=\"pl-k\">throws<\/span> <span class=\"pl-smi\">IOException<\/span> {<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L95\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"95\"><\/td>\n          <td id=\"file-feigntest-java-LC95\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L96\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"96\"><\/td>\n          <td id=\"file-feigntest-java-LC96\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-en\">when<\/span>(<span class=\"pl-s1\">clientMock<\/span>.<span class=\"pl-en\">execute<\/span>(<span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Request<\/span>.<span class=\"pl-k\">class<\/span>), <span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Options<\/span>.<span class=\"pl-k\">class<\/span>))).<span class=\"pl-en\">thenReturn<\/span>(<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L97\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"97\"><\/td>\n          <td id=\"file-feigntest-java-LC97\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-smi\">Response<\/span>.<span class=\"pl-en\">builder<\/span>().<span class=\"pl-en\">status<\/span>(<span class=\"pl-c1\">409<\/span>).<span class=\"pl-en\">headers<\/span>(<span class=\"pl-smi\">Collections<\/span>.&lt;<span class=\"pl-smi\">String<\/span>, <span class=\"pl-smi\">Collection<\/span>&lt;<span class=\"pl-smi\">String<\/span>&gt;&gt;<span class=\"pl-en\">emptyMap<\/span>())<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L98\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"98\"><\/td>\n          <td id=\"file-feigntest-java-LC98\" class=\"blob-code blob-code-inner js-file-line\">            .<span class=\"pl-en\">build<\/span>(),<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L99\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"99\"><\/td>\n          <td id=\"file-feigntest-java-LC99\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-smi\">Response<\/span>.<span class=\"pl-en\">builder<\/span>().<span class=\"pl-en\">status<\/span>(<span class=\"pl-c1\">200<\/span>).<span class=\"pl-en\">headers<\/span>(<span class=\"pl-smi\">Collections<\/span>.&lt;<span class=\"pl-smi\">String<\/span>, <span class=\"pl-smi\">Collection<\/span>&lt;<span class=\"pl-smi\">String<\/span>&gt;&gt;<span class=\"pl-en\">emptyMap<\/span>())<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L100\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"100\"><\/td>\n          <td id=\"file-feigntest-java-LC100\" class=\"blob-code blob-code-inner js-file-line\">            .<span class=\"pl-en\">build<\/span>());<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L101\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"101\"><\/td>\n          <td id=\"file-feigntest-java-LC101\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L102\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"102\"><\/td>\n          <td id=\"file-feigntest-java-LC102\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">class<\/span> <span class=\"pl-smi\">RetryOn409ConflictStatus<\/span> <span class=\"pl-k\">extends<\/span> <span class=\"pl-smi\">ErrorDecoder<\/span>.<span class=\"pl-smi\">Default<\/span> {<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L103\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"103\"><\/td>\n          <td id=\"file-feigntest-java-LC103\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L104\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"104\"><\/td>\n          <td id=\"file-feigntest-java-LC104\" class=\"blob-code blob-code-inner js-file-line\">      <span class=\"pl-c1\">@<\/span><span class=\"pl-c1\">Override<\/span><\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L105\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"105\"><\/td>\n          <td id=\"file-feigntest-java-LC105\" class=\"blob-code blob-code-inner js-file-line\">      <span class=\"pl-k\">public<\/span> <span class=\"pl-smi\">Exception<\/span> <span class=\"pl-en\">decode<\/span>(<span class=\"pl-k\">final<\/span> <span class=\"pl-smi\">String<\/span> <span class=\"pl-s1\">methodKey<\/span>, <span class=\"pl-k\">final<\/span> <span class=\"pl-smi\">Response<\/span> <span class=\"pl-s1\">response<\/span>) {<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L106\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"106\"><\/td>\n          <td id=\"file-feigntest-java-LC106\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">if<\/span> (<span class=\"pl-c1\">409<\/span> == <span class=\"pl-s1\">response<\/span>.<span class=\"pl-en\">status<\/span>()) {<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L107\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"107\"><\/td>\n          <td id=\"file-feigntest-java-LC107\" class=\"blob-code blob-code-inner js-file-line\">          <span class=\"pl-k\">return<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-smi\">RetryableException<\/span>(<span class=\"pl-s\">\"getting conflict and retry\"<\/span>, <span class=\"pl-c1\">null<\/span>);<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L108\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"108\"><\/td>\n          <td id=\"file-feigntest-java-LC108\" class=\"blob-code blob-code-inner js-file-line\">        } <span class=\"pl-k\">else<\/span><\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L109\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"109\"><\/td>\n          <td id=\"file-feigntest-java-LC109\" class=\"blob-code blob-code-inner js-file-line\">          <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">super<\/span>.<span class=\"pl-en\">decode<\/span>(<span class=\"pl-s1\">methodKey<\/span>, <span class=\"pl-s1\">response<\/span>);<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L110\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"110\"><\/td>\n          <td id=\"file-feigntest-java-LC110\" class=\"blob-code blob-code-inner js-file-line\">      }<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L111\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"111\"><\/td>\n          <td id=\"file-feigntest-java-LC111\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L112\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"112\"><\/td>\n          <td id=\"file-feigntest-java-LC112\" class=\"blob-code blob-code-inner js-file-line\">    }<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L113\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"113\"><\/td>\n          <td id=\"file-feigntest-java-LC113\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L114\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"114\"><\/td>\n          <td id=\"file-feigntest-java-LC114\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">final<\/span> <span class=\"pl-smi\">GitHub<\/span> <span class=\"pl-s1\">github<\/span> =<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L115\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"115\"><\/td>\n          <td id=\"file-feigntest-java-LC115\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-smi\">Feign<\/span>.<span class=\"pl-en\">builder<\/span>().<span class=\"pl-en\">client<\/span>(<span class=\"pl-s1\">clientMock<\/span>).<span class=\"pl-en\">decoder<\/span>(<span class=\"pl-k\">new<\/span> <span class=\"pl-smi\">GsonDecoder<\/span>())<\/td>\n        <\/tr>\n        <tr class=\"line line-highlight\">\n          <td id=\"file-feigntest-java-L116\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"116\" style=\"background-color: #ffc !important\"><\/td>\n          <td id=\"file-feigntest-java-LC116\" class=\"blob-code blob-code-inner js-file-line\" style=\"background-color: #ffc !important\">            .<span class=\"pl-en\">errorDecoder<\/span>(<span class=\"pl-k\">new<\/span> <span class=\"pl-smi\">RetryOn409ConflictStatus<\/span>())<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L117\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"117\"><\/td>\n          <td id=\"file-feigntest-java-LC117\" class=\"blob-code blob-code-inner js-file-line\">            .<span class=\"pl-en\">target<\/span>(<span class=\"pl-smi\">GitHub<\/span>.<span class=\"pl-k\">class<\/span>, <span class=\"pl-s\">\"https:\/\/api.github.com\"<\/span>);<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L118\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"118\"><\/td>\n          <td id=\"file-feigntest-java-LC118\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L119\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"119\"><\/td>\n          <td id=\"file-feigntest-java-LC119\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L120\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"120\"><\/td>\n          <td id=\"file-feigntest-java-LC120\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s1\">github<\/span>.<span class=\"pl-en\">contributors<\/span>(<span class=\"pl-s\">\"OpenFeign\"<\/span>, <span class=\"pl-s\">\"feign\"<\/span>);<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L121\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"121\"><\/td>\n          <td id=\"file-feigntest-java-LC121\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L122\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"122\"><\/td>\n          <td id=\"file-feigntest-java-LC122\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-en\">verify<\/span>(<span class=\"pl-s1\">clientMock<\/span>, <span class=\"pl-en\">times<\/span>(<span class=\"pl-c1\">2<\/span>)).<span class=\"pl-en\">execute<\/span>(<span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Request<\/span>.<span class=\"pl-k\">class<\/span>), <span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Options<\/span>.<span class=\"pl-k\">class<\/span>));<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L123\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"123\"><\/td>\n          <td id=\"file-feigntest-java-LC123\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L124\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"124\"><\/td>\n          <td id=\"file-feigntest-java-LC124\" class=\"blob-code blob-code-inner js-file-line\">  }<\/td>\n        <\/tr>\n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n  <\/table>\n<\/div>\n\n\n    <\/div>\n\n  <\/div>\n\n<\/div>\n\n      <\/div>\n      <div class=\"gist-meta\">\n        <a href=\"https:\/\/gist.github.com\/mwiede\/3eeaa0566119f0a3aabf48b5e093d635\/raw\/bd1a8b555712d4e5dffbda0b794adb9dd280c2d1\/FeignTest.java\" style=\"float:right\" class=\"Link--inTextBlock\">view raw<\/a>\n        <a href=\"https:\/\/gist.github.com\/mwiede\/3eeaa0566119f0a3aabf48b5e093d635#file-feigntest-java\" class=\"Link--inTextBlock\">\n          FeignTest.java\n        <\/a>\n        hosted with &#10084; by <a class=\"Link--inTextBlock\" href=\"https:\/\/github.com\">GitHub<\/a>\n      <\/div>\n    <\/div>\n<\/div>\n<\/body><\/html>\n\n<h2>Case 4a) Behavior without error decoder<\/h2>\n<p>If no error decoder is configured, no retry is executed by Feign.<\/p>\n<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/REC-html40\/loose.dtd\">\n<html><body><div id=\"gist46646474\" class=\"gist\">\n    <div class=\"gist-file\" translate=\"no\" data-color-mode=\"light\" data-light-theme=\"light\">\n      <div class=\"gist-data\">\n        \n<div class=\"js-gist-file-update-container js-task-list-container\">\n      <div id=\"file-feigntest-java\" class=\"file my-2\">\n    \n    <div itemprop=\"text\" class=\"Box-body p-0 blob-wrapper data type-java  \" style=\"overflow: auto\" tabindex=\"0\" role=\"region\" aria-label=\"FeignTest.java content, created by mwiede on 10:09PM on April 12, 2017.\">\n\n        \n<div class=\"js-check-hidden-unicode js-blob-code-container blob-code-content\">\n\n  <template class=\"js-file-alert-template\">\n  <div data-view-component=\"true\" class=\"flash flash-warn flash-full d-flex flex-items-center\">\n  <svg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg>\n    <span>\n      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.\n      <a class=\"Link--inTextBlock\" href=\"https:\/\/github.co\/hiddenchars\" target=\"_blank\">Learn more about bidirectional Unicode characters<\/a>\n    <\/span>\n\n\n  <div data-view-component=\"true\" class=\"flash-action\">        <a href=\"%7B%7B%20revealButtonHref%20%7D%7D\" data-view-component=\"true\" class=\"btn-sm btn\">    Show hidden characters\n<\/a>\n<\/div>\n<\/div><\/template>\n<template class=\"js-line-alert-template\">\n  <span aria-label=\"This line has hidden Unicode characters\" data-view-component=\"true\" class=\"line-alert tooltipped tooltipped-e\">\n    <svg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg>\n<\/span><\/template>\n\n  <table data-hpc class=\"highlight tab-size js-file-line-container\" data-tab-size=\"4\" data-paste-markdown-skip data-tagsearch-path=\"FeignTest.java\">\n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L126\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"126\"><\/td>\n          <td id=\"file-feigntest-java-LC126\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-c1\">@<\/span><span class=\"pl-c1\">Test<\/span><\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L127\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"127\"><\/td>\n          <td id=\"file-feigntest-java-LC127\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-k\">public<\/span> <span class=\"pl-smi\">void<\/span> <span class=\"pl-en\">test409Error<\/span>() <span class=\"pl-k\">throws<\/span> <span class=\"pl-smi\">IOException<\/span> {<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L128\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"128\"><\/td>\n          <td id=\"file-feigntest-java-LC128\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L129\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"129\"><\/td>\n          <td id=\"file-feigntest-java-LC129\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-en\">when<\/span>(<span class=\"pl-s1\">clientMock<\/span>.<span class=\"pl-en\">execute<\/span>(<span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Request<\/span>.<span class=\"pl-k\">class<\/span>), <span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Options<\/span>.<span class=\"pl-k\">class<\/span>))).<span class=\"pl-en\">thenReturn<\/span>(<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L130\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"130\"><\/td>\n          <td id=\"file-feigntest-java-LC130\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-smi\">Response<\/span>.<span class=\"pl-en\">builder<\/span>().<span class=\"pl-en\">status<\/span>(<span class=\"pl-c1\">409<\/span>).<span class=\"pl-en\">headers<\/span>(<span class=\"pl-smi\">Collections<\/span>.&lt;<span class=\"pl-smi\">String<\/span>, <span class=\"pl-smi\">Collection<\/span>&lt;<span class=\"pl-smi\">String<\/span>&gt;&gt;<span class=\"pl-en\">emptyMap<\/span>())<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L131\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"131\"><\/td>\n          <td id=\"file-feigntest-java-LC131\" class=\"blob-code blob-code-inner js-file-line\">            .<span class=\"pl-en\">build<\/span>(),<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L132\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"132\"><\/td>\n          <td id=\"file-feigntest-java-LC132\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-smi\">Response<\/span>.<span class=\"pl-en\">builder<\/span>().<span class=\"pl-en\">status<\/span>(<span class=\"pl-c1\">200<\/span>).<span class=\"pl-en\">headers<\/span>(<span class=\"pl-smi\">Collections<\/span>.&lt;<span class=\"pl-smi\">String<\/span>, <span class=\"pl-smi\">Collection<\/span>&lt;<span class=\"pl-smi\">String<\/span>&gt;&gt;<span class=\"pl-en\">emptyMap<\/span>())<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L133\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"133\"><\/td>\n          <td id=\"file-feigntest-java-LC133\" class=\"blob-code blob-code-inner js-file-line\">            .<span class=\"pl-en\">build<\/span>());<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L134\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"134\"><\/td>\n          <td id=\"file-feigntest-java-LC134\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L135\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"135\"><\/td>\n          <td id=\"file-feigntest-java-LC135\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">final<\/span> <span class=\"pl-smi\">GitHub<\/span> <span class=\"pl-s1\">github<\/span> =<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L136\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"136\"><\/td>\n          <td id=\"file-feigntest-java-LC136\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-smi\">Feign<\/span>.<span class=\"pl-en\">builder<\/span>().<span class=\"pl-en\">client<\/span>(<span class=\"pl-s1\">clientMock<\/span>).<span class=\"pl-en\">decoder<\/span>(<span class=\"pl-k\">new<\/span> <span class=\"pl-smi\">GsonDecoder<\/span>())<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L137\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"137\"><\/td>\n          <td id=\"file-feigntest-java-LC137\" class=\"blob-code blob-code-inner js-file-line\">            .<span class=\"pl-en\">target<\/span>(<span class=\"pl-smi\">GitHub<\/span>.<span class=\"pl-k\">class<\/span>, <span class=\"pl-s\">\"https:\/\/api.github.com\"<\/span>);<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L138\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"138\"><\/td>\n          <td id=\"file-feigntest-java-LC138\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L139\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"139\"><\/td>\n          <td id=\"file-feigntest-java-LC139\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">try<\/span> {<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L140\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"140\"><\/td>\n          <td id=\"file-feigntest-java-LC140\" class=\"blob-code blob-code-inner js-file-line\">      <span class=\"pl-s1\">github<\/span>.<span class=\"pl-en\">contributors<\/span>(<span class=\"pl-s\">\"OpenFeign\"<\/span>, <span class=\"pl-s\">\"feign\"<\/span>);<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L141\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"141\"><\/td>\n          <td id=\"file-feigntest-java-LC141\" class=\"blob-code blob-code-inner js-file-line\">      <span class=\"pl-en\">fail<\/span>(<span class=\"pl-s\">\"not failing\"<\/span>);<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L142\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"142\"><\/td>\n          <td id=\"file-feigntest-java-LC142\" class=\"blob-code blob-code-inner js-file-line\">    } <span class=\"pl-k\">catch<\/span> (<span class=\"pl-k\">final<\/span> <span class=\"pl-smi\">Exception<\/span> <span class=\"pl-s1\">e<\/span>) {<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L143\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"143\"><\/td>\n          <td id=\"file-feigntest-java-LC143\" class=\"blob-code blob-code-inner js-file-line\">    } <span class=\"pl-k\">finally<\/span> {<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L144\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"144\"><\/td>\n          <td id=\"file-feigntest-java-LC144\" class=\"blob-code blob-code-inner js-file-line\">      <span class=\"pl-en\">verify<\/span>(<span class=\"pl-s1\">clientMock<\/span>, <span class=\"pl-en\">times<\/span>(<span class=\"pl-c1\">1<\/span>)).<span class=\"pl-en\">execute<\/span>(<span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Request<\/span>.<span class=\"pl-k\">class<\/span>), <span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Options<\/span>.<span class=\"pl-k\">class<\/span>));<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L145\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"145\"><\/td>\n          <td id=\"file-feigntest-java-LC145\" class=\"blob-code blob-code-inner js-file-line\">    }<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L146\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"146\"><\/td>\n          <td id=\"file-feigntest-java-LC146\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L147\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"147\"><\/td>\n          <td id=\"file-feigntest-java-LC147\" class=\"blob-code blob-code-inner js-file-line\">  }<\/td>\n        <\/tr>\n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n  <\/table>\n<\/div>\n\n\n    <\/div>\n\n  <\/div>\n\n<\/div>\n\n      <\/div>\n      <div class=\"gist-meta\">\n        <a href=\"https:\/\/gist.github.com\/mwiede\/3eeaa0566119f0a3aabf48b5e093d635\/raw\/bd1a8b555712d4e5dffbda0b794adb9dd280c2d1\/FeignTest.java\" style=\"float:right\" class=\"Link--inTextBlock\">view raw<\/a>\n        <a href=\"https:\/\/gist.github.com\/mwiede\/3eeaa0566119f0a3aabf48b5e093d635#file-feigntest-java\" class=\"Link--inTextBlock\">\n          FeignTest.java\n        <\/a>\n        hosted with &#10084; by <a class=\"Link--inTextBlock\" href=\"https:\/\/github.com\">GitHub<\/a>\n      <\/div>\n    <\/div>\n<\/div>\n<\/body><\/html>\n\n<h2>Case 5) Evaluation of Retry-After header<\/h2>\n<p>In contrast to the cases 4 and 4a, any response having a\u00a0Retry-After header, which is a standard header defined in http protocol, the default Feign behavior is to honor this and trigger a retry at the date given.<\/p>\n<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/REC-html40\/loose.dtd\">\n<html><body><div id=\"gist46646474\" class=\"gist\">\n    <div class=\"gist-file\" translate=\"no\" data-color-mode=\"light\" data-light-theme=\"light\">\n      <div class=\"gist-data\">\n        \n<div class=\"js-gist-file-update-container js-task-list-container\">\n      <div id=\"file-feigntest-java\" class=\"file my-2\">\n    \n    <div itemprop=\"text\" class=\"Box-body p-0 blob-wrapper data type-java  \" style=\"overflow: auto\" tabindex=\"0\" role=\"region\" aria-label=\"FeignTest.java content, created by mwiede on 10:09PM on April 12, 2017.\">\n\n        \n<div class=\"js-check-hidden-unicode js-blob-code-container blob-code-content\">\n\n  <template class=\"js-file-alert-template\">\n  <div data-view-component=\"true\" class=\"flash flash-warn flash-full d-flex flex-items-center\">\n  <svg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg>\n    <span>\n      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.\n      <a class=\"Link--inTextBlock\" href=\"https:\/\/github.co\/hiddenchars\" target=\"_blank\">Learn more about bidirectional Unicode characters<\/a>\n    <\/span>\n\n\n  <div data-view-component=\"true\" class=\"flash-action\">        <a href=\"%7B%7B%20revealButtonHref%20%7D%7D\" data-view-component=\"true\" class=\"btn-sm btn\">    Show hidden characters\n<\/a>\n<\/div>\n<\/div><\/template>\n<template class=\"js-line-alert-template\">\n  <span aria-label=\"This line has hidden Unicode characters\" data-view-component=\"true\" class=\"line-alert tooltipped tooltipped-e\">\n    <svg aria-hidden=\"true\" data-component=\"Octicon\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg>\n<\/span><\/template>\n\n  <table data-hpc class=\"highlight tab-size js-file-line-container\" data-tab-size=\"4\" data-paste-markdown-skip data-tagsearch-path=\"FeignTest.java\">\n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        \n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L149\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"149\"><\/td>\n          <td id=\"file-feigntest-java-LC149\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-c1\">@<\/span><span class=\"pl-c1\">Test<\/span><\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L150\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"150\"><\/td>\n          <td id=\"file-feigntest-java-LC150\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-k\">public<\/span> <span class=\"pl-smi\">void<\/span> <span class=\"pl-en\">test400ErrorWithRetryAfterHeader<\/span>() <span class=\"pl-k\">throws<\/span> <span class=\"pl-smi\">IOException<\/span> {<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L151\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"151\"><\/td>\n          <td id=\"file-feigntest-java-LC151\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L152\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"152\"><\/td>\n          <td id=\"file-feigntest-java-LC152\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-en\">when<\/span>(<span class=\"pl-s1\">clientMock<\/span>.<span class=\"pl-en\">execute<\/span>(<span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Request<\/span>.<span class=\"pl-k\">class<\/span>), <span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Options<\/span>.<span class=\"pl-k\">class<\/span>))).<span class=\"pl-en\">thenReturn<\/span>(<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L153\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"153\"><\/td>\n          <td id=\"file-feigntest-java-LC153\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-smi\">Response<\/span><\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L154\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"154\"><\/td>\n          <td id=\"file-feigntest-java-LC154\" class=\"blob-code blob-code-inner js-file-line\">            .<span class=\"pl-en\">builder<\/span>()<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L155\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"155\"><\/td>\n          <td id=\"file-feigntest-java-LC155\" class=\"blob-code blob-code-inner js-file-line\">            .<span class=\"pl-en\">status<\/span>(<span class=\"pl-c1\">400<\/span>)<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L156\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"156\"><\/td>\n          <td id=\"file-feigntest-java-LC156\" class=\"blob-code blob-code-inner js-file-line\">            .<span class=\"pl-en\">headers<\/span>(<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L157\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"157\"><\/td>\n          <td id=\"file-feigntest-java-LC157\" class=\"blob-code blob-code-inner js-file-line\">                <span class=\"pl-smi\">Collections<\/span>.<span class=\"pl-en\">singletonMap<\/span>(<span class=\"pl-smi\">Util<\/span>.<span class=\"pl-c1\">RETRY_AFTER<\/span>,<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L158\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"158\"><\/td>\n          <td id=\"file-feigntest-java-LC158\" class=\"blob-code blob-code-inner js-file-line\">                    (<span class=\"pl-smi\">Collection<\/span>&lt;<span class=\"pl-smi\">String<\/span>&gt;) <span class=\"pl-smi\">Collections<\/span>.<span class=\"pl-en\">singletonList<\/span>(<span class=\"pl-s\">\"1\"<\/span>))).<span class=\"pl-en\">build<\/span>(),<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L159\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"159\"><\/td>\n          <td id=\"file-feigntest-java-LC159\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-smi\">Response<\/span>.<span class=\"pl-en\">builder<\/span>().<span class=\"pl-en\">status<\/span>(<span class=\"pl-c1\">200<\/span>).<span class=\"pl-en\">headers<\/span>(<span class=\"pl-smi\">Collections<\/span>.&lt;<span class=\"pl-smi\">String<\/span>, <span class=\"pl-smi\">Collection<\/span>&lt;<span class=\"pl-smi\">String<\/span>&gt;&gt;<span class=\"pl-en\">emptyMap<\/span>())<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L160\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"160\"><\/td>\n          <td id=\"file-feigntest-java-LC160\" class=\"blob-code blob-code-inner js-file-line\">            .<span class=\"pl-en\">build<\/span>());<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L161\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"161\"><\/td>\n          <td id=\"file-feigntest-java-LC161\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L162\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"162\"><\/td>\n          <td id=\"file-feigntest-java-LC162\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">final<\/span> <span class=\"pl-smi\">GitHub<\/span> <span class=\"pl-s1\">github<\/span> =<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L163\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"163\"><\/td>\n          <td id=\"file-feigntest-java-LC163\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-smi\">Feign<\/span>.<span class=\"pl-en\">builder<\/span>().<span class=\"pl-en\">client<\/span>(<span class=\"pl-s1\">clientMock<\/span>).<span class=\"pl-en\">decoder<\/span>(<span class=\"pl-k\">new<\/span> <span class=\"pl-smi\">GsonDecoder<\/span>())<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L164\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"164\"><\/td>\n          <td id=\"file-feigntest-java-LC164\" class=\"blob-code blob-code-inner js-file-line\">            .<span class=\"pl-en\">target<\/span>(<span class=\"pl-smi\">GitHub<\/span>.<span class=\"pl-k\">class<\/span>, <span class=\"pl-s\">\"https:\/\/api.github.com\"<\/span>);<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L165\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"165\"><\/td>\n          <td id=\"file-feigntest-java-LC165\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L166\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"166\"><\/td>\n          <td id=\"file-feigntest-java-LC166\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L167\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"167\"><\/td>\n          <td id=\"file-feigntest-java-LC167\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s1\">github<\/span>.<span class=\"pl-en\">contributors<\/span>(<span class=\"pl-s\">\"OpenFeign\"<\/span>, <span class=\"pl-s\">\"feign\"<\/span>);<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L168\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"168\"><\/td>\n          <td id=\"file-feigntest-java-LC168\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L169\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"169\"><\/td>\n          <td id=\"file-feigntest-java-LC169\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-en\">verify<\/span>(<span class=\"pl-s1\">clientMock<\/span>, <span class=\"pl-en\">times<\/span>(<span class=\"pl-c1\">2<\/span>)).<span class=\"pl-en\">execute<\/span>(<span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Request<\/span>.<span class=\"pl-k\">class<\/span>), <span class=\"pl-en\">any<\/span>(<span class=\"pl-smi\">Options<\/span>.<span class=\"pl-k\">class<\/span>));<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L170\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"170\"><\/td>\n          <td id=\"file-feigntest-java-LC170\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n        <\/tr>\n        <tr class=\"line\">\n          <td id=\"file-feigntest-java-L171\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"171\"><\/td>\n          <td id=\"file-feigntest-java-LC171\" class=\"blob-code blob-code-inner js-file-line\">  }<\/td>\n        <\/tr>\n        \n  <\/table>\n<\/div>\n\n\n    <\/div>\n\n  <\/div>\n\n<\/div>\n\n      <\/div>\n      <div class=\"gist-meta\">\n        <a href=\"https:\/\/gist.github.com\/mwiede\/3eeaa0566119f0a3aabf48b5e093d635\/raw\/bd1a8b555712d4e5dffbda0b794adb9dd280c2d1\/FeignTest.java\" style=\"float:right\" class=\"Link--inTextBlock\">view raw<\/a>\n        <a href=\"https:\/\/gist.github.com\/mwiede\/3eeaa0566119f0a3aabf48b5e093d635#file-feigntest-java\" class=\"Link--inTextBlock\">\n          FeignTest.java\n        <\/a>\n        hosted with &#10084; by <a class=\"Link--inTextBlock\" href=\"https:\/\/github.com\">GitHub<\/a>\n      <\/div>\n    <\/div>\n<\/div>\n<\/body><\/html>\n\n<p>You can download my example on <a href=\"https:\/\/github.com\/mwiede\/explore-feign\">Github<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Feign is a library, which makes it easier to implement a http client. Recently more and more people start writing http clients, because they are creating microservices which communicate with http protocol. So there are all sorts of libraries supporting this task like Jersey, Resteasy and others &#8211; and there is Feign. Today I do &hellip; <a href=\"https:\/\/www.matez.de\/index.php\/2017\/04\/12\/exploring-feign-retrying\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Exploring Feign &#8211; Retrying&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[3,4,5,2],"_links":{"self":[{"href":"https:\/\/www.matez.de\/index.php\/wp-json\/wp\/v2\/posts\/29"}],"collection":[{"href":"https:\/\/www.matez.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.matez.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.matez.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.matez.de\/index.php\/wp-json\/wp\/v2\/comments?post=29"}],"version-history":[{"count":8,"href":"https:\/\/www.matez.de\/index.php\/wp-json\/wp\/v2\/posts\/29\/revisions"}],"predecessor-version":[{"id":49,"href":"https:\/\/www.matez.de\/index.php\/wp-json\/wp\/v2\/posts\/29\/revisions\/49"}],"wp:attachment":[{"href":"https:\/\/www.matez.de\/index.php\/wp-json\/wp\/v2\/media?parent=29"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.matez.de\/index.php\/wp-json\/wp\/v2\/categories?post=29"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.matez.de\/index.php\/wp-json\/wp\/v2\/tags?post=29"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}