diff --git a/feign/README.md b/feign/README.md
index 2dea14ca52..8079c46e9e 100644
--- a/feign/README.md
+++ b/feign/README.md
@@ -7,3 +7,8 @@ This module contains articles about Feign
- [Intro to Feign](https://www.baeldung.com/intro-to-feign)
- [Retrying Feign Calls](https://www.baeldung.com/feign-retry)
- [Setting Request Headers Using Feign](https://www.baeldung.com/java-feign-request-headers)
+- [File Upload With Open Feign](https://www.baeldung.com/java-feign-file-upload)
+- [Feign Logging Configuration](https://www.baeldung.com/java-feign-logging)
+- [Retrieve Original Message From Feign ErrorDecoder](https://www.baeldung.com/feign-retrieve-original-message)
+- [RequestLine with Feign Client](https://www.baeldung.com/feign-requestline)
+- [Propagating Exceptions With OpenFeign and Spring](https://www.baeldung.com/spring-openfeign-propagate-exception)
\ No newline at end of file
diff --git a/feign/pom.xml b/feign/pom.xml
index 3ac816fc1d..7338cf7508 100644
--- a/feign/pom.xml
+++ b/feign/pom.xml
@@ -64,6 +64,22 @@
spring-boot-starter-test
test
+
+ io.github.openfeign.form
+ feign-form-spring
+ ${feign.form.spring.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+ ${spring.cloud.openfeign.version}
+
+
+ com.github.tomakehurst
+ wiremock-jre8
+ ${wire.mock.version}
+ test
+
@@ -118,6 +134,9 @@
11.8
1.6.3
+ 3.8.0
+ 3.1.2
+ 2.33.2
\ No newline at end of file
diff --git a/feign/src/main/java/com/baeldung/core/ExampleApplication.java b/feign/src/main/java/com/baeldung/core/ExampleApplication.java
new file mode 100644
index 0000000000..391e808ede
--- /dev/null
+++ b/feign/src/main/java/com/baeldung/core/ExampleApplication.java
@@ -0,0 +1,16 @@
+package com.baeldung.core;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+@SpringBootApplication
+@EnableFeignClients
+public class ExampleApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ExampleApplication.class, args);
+ }
+
+}
+
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/EmployeeClient.java b/feign/src/main/java/com/baeldung/core/client/EmployeeClient.java
similarity index 74%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/EmployeeClient.java
rename to feign/src/main/java/com/baeldung/core/client/EmployeeClient.java
index 569401bdcf..0ff8637a94 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/EmployeeClient.java
+++ b/feign/src/main/java/com/baeldung/core/client/EmployeeClient.java
@@ -1,6 +1,7 @@
-package com.baeldung.cloud.openfeign.client;
+package com.baeldung.core.client;
+
+import com.baeldung.core.model.Employee;
-import com.baeldung.cloud.openfeign.model.Employee;
import feign.Headers;
import feign.Param;
import feign.RequestLine;
diff --git a/feign/src/main/java/com/baeldung/core/client/UserClient.java b/feign/src/main/java/com/baeldung/core/client/UserClient.java
new file mode 100644
index 0000000000..a16f924ad5
--- /dev/null
+++ b/feign/src/main/java/com/baeldung/core/client/UserClient.java
@@ -0,0 +1,13 @@
+package com.baeldung.core.client;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+import com.baeldung.core.config.FeignConfig;
+
+@FeignClient(name = "user-client", url="https://jsonplaceholder.typicode.com", configuration = FeignConfig.class)
+public interface UserClient {
+
+ @GetMapping(value = "/users")
+ String getUsers();
+}
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/config/FeignConfig.java b/feign/src/main/java/com/baeldung/core/config/FeignConfig.java
similarity index 79%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/config/FeignConfig.java
rename to feign/src/main/java/com/baeldung/core/config/FeignConfig.java
index d51e97b9e4..43da2fce0e 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/config/FeignConfig.java
+++ b/feign/src/main/java/com/baeldung/core/config/FeignConfig.java
@@ -1,7 +1,8 @@
-package com.baeldung.cloud.openfeign.config;
+package com.baeldung.core.config;
+
+import org.springframework.context.annotation.Bean;
import feign.Logger;
-import org.springframework.context.annotation.Bean;
public class FeignConfig {
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/controller/EmployeeController.java b/feign/src/main/java/com/baeldung/core/controller/EmployeeController.java
similarity index 81%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/controller/EmployeeController.java
rename to feign/src/main/java/com/baeldung/core/controller/EmployeeController.java
index 65897ad48e..7f7d39240e 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/controller/EmployeeController.java
+++ b/feign/src/main/java/com/baeldung/core/controller/EmployeeController.java
@@ -1,13 +1,15 @@
-package com.baeldung.cloud.openfeign.controller;
+package com.baeldung.core.controller;
-import com.baeldung.cloud.openfeign.client.EmployeeClient;
-import com.baeldung.cloud.openfeign.model.Employee;
-import feign.Feign;
-import feign.form.spring.SpringFormEncoder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
+import com.baeldung.core.client.EmployeeClient;
+import com.baeldung.core.model.Employee;
+
+import feign.Feign;
+import feign.form.spring.SpringFormEncoder;
+
@RestController
public class EmployeeController {
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/client/ProductClient.java b/feign/src/main/java/com/baeldung/core/customizederrorhandling/client/ProductClient.java
similarity index 70%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/client/ProductClient.java
rename to feign/src/main/java/com/baeldung/core/customizederrorhandling/client/ProductClient.java
index 8a6c5d5846..113051722b 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/client/ProductClient.java
+++ b/feign/src/main/java/com/baeldung/core/customizederrorhandling/client/ProductClient.java
@@ -1,13 +1,13 @@
-package com.baeldung.cloud.openfeign.customizederrorhandling.client;
-
-import com.baeldung.cloud.openfeign.customizederrorhandling.config.FeignConfig;
-import com.baeldung.cloud.openfeign.defaulterrorhandling.model.Product;
+package com.baeldung.core.customizederrorhandling.client;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
+import com.baeldung.core.customizederrorhandling.config.FeignConfig;
+import com.baeldung.core.defaulterrorhandling.model.Product;
+
@FeignClient(name = "product-client-2", url = "http://localhost:8081/product/", configuration = FeignConfig.class)
public interface ProductClient {
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/config/CustomErrorDecoder.java b/feign/src/main/java/com/baeldung/core/customizederrorhandling/config/CustomErrorDecoder.java
similarity index 65%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/config/CustomErrorDecoder.java
rename to feign/src/main/java/com/baeldung/core/customizederrorhandling/config/CustomErrorDecoder.java
index 3750e6288d..5466b61b3a 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/config/CustomErrorDecoder.java
+++ b/feign/src/main/java/com/baeldung/core/customizederrorhandling/config/CustomErrorDecoder.java
@@ -1,8 +1,9 @@
-package com.baeldung.cloud.openfeign.customizederrorhandling.config;
+package com.baeldung.core.customizederrorhandling.config;
+
+import com.baeldung.core.customizederrorhandling.exception.ProductNotFoundException;
+import com.baeldung.core.customizederrorhandling.exception.ProductServiceNotAvailableException;
+import com.baeldung.core.exception.BadRequestException;
-import com.baeldung.cloud.openfeign.exception.BadRequestException;
-import com.baeldung.cloud.openfeign.customizederrorhandling.exception.ProductNotFoundException;
-import com.baeldung.cloud.openfeign.customizederrorhandling.exception.ProductServiceNotAvailableException;
import feign.Response;
import feign.codec.ErrorDecoder;
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/config/FeignConfig.java b/feign/src/main/java/com/baeldung/core/customizederrorhandling/config/FeignConfig.java
similarity index 82%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/config/FeignConfig.java
rename to feign/src/main/java/com/baeldung/core/customizederrorhandling/config/FeignConfig.java
index 5cddd521f1..980b8b5b38 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/config/FeignConfig.java
+++ b/feign/src/main/java/com/baeldung/core/customizederrorhandling/config/FeignConfig.java
@@ -1,8 +1,9 @@
-package com.baeldung.cloud.openfeign.customizederrorhandling.config;
+package com.baeldung.core.customizederrorhandling.config;
+
+import org.springframework.context.annotation.Bean;
import feign.Logger;
import feign.codec.ErrorDecoder;
-import org.springframework.context.annotation.Bean;
public class FeignConfig {
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/controller/ProductController.java b/feign/src/main/java/com/baeldung/core/customizederrorhandling/controller/ProductController.java
similarity index 52%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/controller/ProductController.java
rename to feign/src/main/java/com/baeldung/core/customizederrorhandling/controller/ProductController.java
index 9b7a5aea1d..6d6f784e66 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/controller/ProductController.java
+++ b/feign/src/main/java/com/baeldung/core/customizederrorhandling/controller/ProductController.java
@@ -1,12 +1,13 @@
-package com.baeldung.cloud.openfeign.customizederrorhandling.controller;
+package com.baeldung.core.customizederrorhandling.controller;
-import com.baeldung.cloud.openfeign.customizederrorhandling.client.ProductClient;
-
-
-import com.baeldung.cloud.openfeign.defaulterrorhandling.model.Product;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.baeldung.core.customizederrorhandling.client.ProductClient;
+import com.baeldung.core.defaulterrorhandling.model.Product;
@RestController("product_controller2")
@RequestMapping(value = "myapp2")
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/exception/ErrorResponse.java b/feign/src/main/java/com/baeldung/core/customizederrorhandling/exception/ErrorResponse.java
similarity index 94%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/exception/ErrorResponse.java
rename to feign/src/main/java/com/baeldung/core/customizederrorhandling/exception/ErrorResponse.java
index c72e3db68b..6e739e5e40 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/exception/ErrorResponse.java
+++ b/feign/src/main/java/com/baeldung/core/customizederrorhandling/exception/ErrorResponse.java
@@ -1,10 +1,11 @@
-package com.baeldung.cloud.openfeign.customizederrorhandling.exception;
+package com.baeldung.core.customizederrorhandling.exception;
+
+import java.util.Date;
+
+import org.springframework.http.HttpStatus;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
-import org.springframework.http.HttpStatus;
-
-import java.util.Date;
public class ErrorResponse {
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/exception/ProductExceptionHandler.java b/feign/src/main/java/com/baeldung/core/customizederrorhandling/exception/ProductExceptionHandler.java
similarity index 92%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/exception/ProductExceptionHandler.java
rename to feign/src/main/java/com/baeldung/core/customizederrorhandling/exception/ProductExceptionHandler.java
index 2ed709bc34..c83d917570 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/exception/ProductExceptionHandler.java
+++ b/feign/src/main/java/com/baeldung/core/customizederrorhandling/exception/ProductExceptionHandler.java
@@ -1,6 +1,5 @@
-package com.baeldung.cloud.openfeign.customizederrorhandling.exception;
+package com.baeldung.core.customizederrorhandling.exception;
-import com.baeldung.cloud.openfeign.exception.BadRequestException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/exception/ProductNotFoundException.java b/feign/src/main/java/com/baeldung/core/customizederrorhandling/exception/ProductNotFoundException.java
similarity index 68%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/exception/ProductNotFoundException.java
rename to feign/src/main/java/com/baeldung/core/customizederrorhandling/exception/ProductNotFoundException.java
index 337cb89f7b..fa993ce700 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/exception/ProductNotFoundException.java
+++ b/feign/src/main/java/com/baeldung/core/customizederrorhandling/exception/ProductNotFoundException.java
@@ -1,4 +1,4 @@
-package com.baeldung.cloud.openfeign.customizederrorhandling.exception;
+package com.baeldung.core.customizederrorhandling.exception;
public class ProductNotFoundException extends RuntimeException {
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/exception/ProductServiceNotAvailableException.java b/feign/src/main/java/com/baeldung/core/customizederrorhandling/exception/ProductServiceNotAvailableException.java
similarity index 70%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/exception/ProductServiceNotAvailableException.java
rename to feign/src/main/java/com/baeldung/core/customizederrorhandling/exception/ProductServiceNotAvailableException.java
index ce30f8c310..887d2cd91d 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/customizederrorhandling/exception/ProductServiceNotAvailableException.java
+++ b/feign/src/main/java/com/baeldung/core/customizederrorhandling/exception/ProductServiceNotAvailableException.java
@@ -1,4 +1,4 @@
-package com.baeldung.cloud.openfeign.customizederrorhandling.exception;
+package com.baeldung.core.customizederrorhandling.exception;
public class ProductServiceNotAvailableException extends RuntimeException {
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/defaulterrorhandling/client/ProductClient.java b/feign/src/main/java/com/baeldung/core/defaulterrorhandling/client/ProductClient.java
similarity index 71%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/defaulterrorhandling/client/ProductClient.java
rename to feign/src/main/java/com/baeldung/core/defaulterrorhandling/client/ProductClient.java
index 2cef3d4238..4eb435331d 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/defaulterrorhandling/client/ProductClient.java
+++ b/feign/src/main/java/com/baeldung/core/defaulterrorhandling/client/ProductClient.java
@@ -1,13 +1,13 @@
-package com.baeldung.cloud.openfeign.defaulterrorhandling.client;
-
-import com.baeldung.cloud.openfeign.defaulterrorhandling.config.FeignConfig;
-import com.baeldung.cloud.openfeign.defaulterrorhandling.model.Product;
+package com.baeldung.core.defaulterrorhandling.client;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
+import com.baeldung.core.defaulterrorhandling.config.FeignConfig;
+import com.baeldung.core.defaulterrorhandling.model.Product;
+
@FeignClient(name = "product-client", url = "http://localhost:8084/product/", configuration = FeignConfig.class)
public interface ProductClient {
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/defaulterrorhandling/config/FeignConfig.java b/feign/src/main/java/com/baeldung/core/defaulterrorhandling/config/FeignConfig.java
similarity index 74%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/defaulterrorhandling/config/FeignConfig.java
rename to feign/src/main/java/com/baeldung/core/defaulterrorhandling/config/FeignConfig.java
index f2329ebe0b..cef8cbb6d9 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/defaulterrorhandling/config/FeignConfig.java
+++ b/feign/src/main/java/com/baeldung/core/defaulterrorhandling/config/FeignConfig.java
@@ -1,7 +1,8 @@
-package com.baeldung.cloud.openfeign.defaulterrorhandling.config;
+package com.baeldung.core.defaulterrorhandling.config;
+
+import org.springframework.context.annotation.Bean;
import feign.Logger;
-import org.springframework.context.annotation.Bean;
public class FeignConfig {
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/defaulterrorhandling/controller/ProductController.java b/feign/src/main/java/com/baeldung/core/defaulterrorhandling/controller/ProductController.java
similarity index 52%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/defaulterrorhandling/controller/ProductController.java
rename to feign/src/main/java/com/baeldung/core/defaulterrorhandling/controller/ProductController.java
index df352f8d52..80f571f29a 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/defaulterrorhandling/controller/ProductController.java
+++ b/feign/src/main/java/com/baeldung/core/defaulterrorhandling/controller/ProductController.java
@@ -1,10 +1,13 @@
-package com.baeldung.cloud.openfeign.defaulterrorhandling.controller;
+package com.baeldung.core.defaulterrorhandling.controller;
-import com.baeldung.cloud.openfeign.defaulterrorhandling.client.ProductClient;
-
-import com.baeldung.cloud.openfeign.defaulterrorhandling.model.Product;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.baeldung.core.defaulterrorhandling.client.ProductClient;
+import com.baeldung.core.defaulterrorhandling.model.Product;
@RestController("product_controller1")
@RequestMapping(value ="myapp1")
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/defaulterrorhandling/model/Product.java b/feign/src/main/java/com/baeldung/core/defaulterrorhandling/model/Product.java
similarity index 82%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/defaulterrorhandling/model/Product.java
rename to feign/src/main/java/com/baeldung/core/defaulterrorhandling/model/Product.java
index 25a1662c99..35d860332e 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/defaulterrorhandling/model/Product.java
+++ b/feign/src/main/java/com/baeldung/core/defaulterrorhandling/model/Product.java
@@ -1,4 +1,4 @@
-package com.baeldung.cloud.openfeign.defaulterrorhandling.model;
+package com.baeldung.core.defaulterrorhandling.model;
public class Product {
diff --git a/feign/src/main/java/com/baeldung/core/exception/BadRequestException.java b/feign/src/main/java/com/baeldung/core/exception/BadRequestException.java
new file mode 100644
index 0000000000..4553bb5576
--- /dev/null
+++ b/feign/src/main/java/com/baeldung/core/exception/BadRequestException.java
@@ -0,0 +1,21 @@
+package com.baeldung.core.exception;
+
+public class BadRequestException extends Exception {
+
+ public BadRequestException() {
+ }
+
+ public BadRequestException(String message) {
+ super(message);
+ }
+
+ public BadRequestException(Throwable cause) {
+ super(cause);
+ }
+
+ @Override
+ public String toString() {
+ return "BadRequestException: "+getMessage();
+ }
+
+}
diff --git a/feign/src/main/java/com/baeldung/core/exception/NotFoundException.java b/feign/src/main/java/com/baeldung/core/exception/NotFoundException.java
new file mode 100644
index 0000000000..07f4e0862f
--- /dev/null
+++ b/feign/src/main/java/com/baeldung/core/exception/NotFoundException.java
@@ -0,0 +1,18 @@
+package com.baeldung.core.exception;
+
+public class NotFoundException extends Exception {
+
+ public NotFoundException(String message) {
+ super(message);
+ }
+
+ public NotFoundException(Throwable cause) {
+ super(cause);
+ }
+
+ @Override
+ public String toString() {
+ return "NotFoundException: " + getMessage();
+ }
+
+}
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/ExceptionMessage.java b/feign/src/main/java/com/baeldung/core/fileupload/config/ExceptionMessage.java
similarity index 95%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/ExceptionMessage.java
rename to feign/src/main/java/com/baeldung/core/fileupload/config/ExceptionMessage.java
index 45a555b2ea..8301705ca6 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/ExceptionMessage.java
+++ b/feign/src/main/java/com/baeldung/core/fileupload/config/ExceptionMessage.java
@@ -1,4 +1,4 @@
-package com.baeldung.cloud.openfeign.fileupload.config;
+package com.baeldung.core.fileupload.config;
public class ExceptionMessage {
private String timestamp;
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/FeignSupportConfig.java b/feign/src/main/java/com/baeldung/core/fileupload/config/FeignSupportConfig.java
similarity index 57%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/FeignSupportConfig.java
rename to feign/src/main/java/com/baeldung/core/fileupload/config/FeignSupportConfig.java
index 802077a3d7..c8c9eb1acc 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/FeignSupportConfig.java
+++ b/feign/src/main/java/com/baeldung/core/fileupload/config/FeignSupportConfig.java
@@ -1,6 +1,5 @@
-package com.baeldung.cloud.openfeign.fileupload.config;
+package com.baeldung.core.fileupload.config;
-import org.springframework.beans.factory.ObjectFactory;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
@@ -13,12 +12,7 @@ import feign.form.spring.SpringFormEncoder;
public class FeignSupportConfig {
@Bean
public Encoder multipartFormEncoder() {
- return new SpringFormEncoder(new SpringEncoder(new ObjectFactory() {
- @Override
- public HttpMessageConverters getObject() {
- return new HttpMessageConverters(new RestTemplate().getMessageConverters());
- }
- }));
+ return new SpringFormEncoder(new SpringEncoder(() -> new HttpMessageConverters(new RestTemplate().getMessageConverters())));
}
@Bean
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/RetreiveMessageErrorDecoder.java b/feign/src/main/java/com/baeldung/core/fileupload/config/RetreiveMessageErrorDecoder.java
similarity index 82%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/RetreiveMessageErrorDecoder.java
rename to feign/src/main/java/com/baeldung/core/fileupload/config/RetreiveMessageErrorDecoder.java
index 09bf8bf54b..fc2c8da0ed 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/config/RetreiveMessageErrorDecoder.java
+++ b/feign/src/main/java/com/baeldung/core/fileupload/config/RetreiveMessageErrorDecoder.java
@@ -1,10 +1,10 @@
-package com.baeldung.cloud.openfeign.fileupload.config;
+package com.baeldung.core.fileupload.config;
import java.io.IOException;
import java.io.InputStream;
-import com.baeldung.cloud.openfeign.exception.BadRequestException;
-import com.baeldung.cloud.openfeign.exception.NotFoundException;
+import com.baeldung.core.exception.BadRequestException;
+import com.baeldung.core.exception.NotFoundException;
import com.fasterxml.jackson.databind.ObjectMapper;
import feign.Response;
@@ -15,7 +15,7 @@ public class RetreiveMessageErrorDecoder implements ErrorDecoder {
@Override
public Exception decode(String methodKey, Response response) {
- ExceptionMessage message = null;
+ ExceptionMessage message;
try (InputStream bodyIs = response.body()
.asInputStream()) {
ObjectMapper mapper = new ObjectMapper();
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/controller/FileController.java b/feign/src/main/java/com/baeldung/core/fileupload/controller/FileController.java
similarity index 88%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/controller/FileController.java
rename to feign/src/main/java/com/baeldung/core/fileupload/controller/FileController.java
index 1ddbfcea81..7ba4746979 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/controller/FileController.java
+++ b/feign/src/main/java/com/baeldung/core/fileupload/controller/FileController.java
@@ -1,4 +1,4 @@
-package com.baeldung.cloud.openfeign.fileupload.controller;
+package com.baeldung.core.fileupload.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@@ -6,7 +6,7 @@ import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
-import com.baeldung.cloud.openfeign.fileupload.service.UploadService;
+import com.baeldung.core.fileupload.service.UploadService;
@RestController
public class FileController {
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadClient.java b/feign/src/main/java/com/baeldung/core/fileupload/service/UploadClient.java
similarity index 85%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadClient.java
rename to feign/src/main/java/com/baeldung/core/fileupload/service/UploadClient.java
index 8f3ef7e421..37b059d642 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadClient.java
+++ b/feign/src/main/java/com/baeldung/core/fileupload/service/UploadClient.java
@@ -1,4 +1,4 @@
-package com.baeldung.cloud.openfeign.fileupload.service;
+package com.baeldung.core.fileupload.service;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
@@ -6,7 +6,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;
-import com.baeldung.cloud.openfeign.fileupload.config.FeignSupportConfig;
+import com.baeldung.core.fileupload.config.FeignSupportConfig;
@FeignClient(name = "file", url = "http://localhost:8081", configuration = FeignSupportConfig.class)
public interface UploadClient {
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadResource.java b/feign/src/main/java/com/baeldung/core/fileupload/service/UploadResource.java
similarity index 85%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadResource.java
rename to feign/src/main/java/com/baeldung/core/fileupload/service/UploadResource.java
index 26e658a7f0..9d3d173cd4 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadResource.java
+++ b/feign/src/main/java/com/baeldung/core/fileupload/service/UploadResource.java
@@ -1,4 +1,4 @@
-package com.baeldung.cloud.openfeign.fileupload.service;
+package com.baeldung.core.fileupload.service;
import org.springframework.web.multipart.MultipartFile;
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadService.java b/feign/src/main/java/com/baeldung/core/fileupload/service/UploadService.java
similarity index 94%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadService.java
rename to feign/src/main/java/com/baeldung/core/fileupload/service/UploadService.java
index c0d1962a71..5176ddf0fa 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/fileupload/service/UploadService.java
+++ b/feign/src/main/java/com/baeldung/core/fileupload/service/UploadService.java
@@ -1,4 +1,4 @@
-package com.baeldung.cloud.openfeign.fileupload.service;
+package com.baeldung.core.fileupload.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/model/Employee.java b/feign/src/main/java/com/baeldung/core/model/Employee.java
similarity index 81%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/model/Employee.java
rename to feign/src/main/java/com/baeldung/core/model/Employee.java
index 7b8ed1232b..7b0c9e1933 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/model/Employee.java
+++ b/feign/src/main/java/com/baeldung/core/model/Employee.java
@@ -1,4 +1,4 @@
-package com.baeldung.cloud.openfeign.model;
+package com.baeldung.core.model;
public class Employee {
diff --git a/feign/src/main/resources/application.properties b/feign/src/main/resources/application.properties
index a57c6e36a3..e48d5fd65a 100644
--- a/feign/src/main/resources/application.properties
+++ b/feign/src/main/resources/application.properties
@@ -5,3 +5,5 @@ ws.port.type.name=UsersPort
ws.target.namespace=http://www.baeldung.com/springbootsoap/feignclient
ws.location.uri=http://localhost:${server.port}/ws/users/
debug=false
+
+logging.level.com.baeldung.core=DEBUG
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/resources/fileupload.txt b/feign/src/main/resources/fileupload.txt
similarity index 100%
rename from spring-cloud-modules/spring-cloud-openfeign/src/main/resources/fileupload.txt
rename to feign/src/main/resources/fileupload.txt
diff --git a/feign/src/main/resources/logback.xml b/feign/src/main/resources/logback.xml
deleted file mode 100644
index e5e962c8e0..0000000000
--- a/feign/src/main/resources/logback.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
- %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/feign/src/main/resources/logback_spring.xml b/feign/src/main/resources/logback_spring.xml
new file mode 100644
index 0000000000..2a307a5b27
--- /dev/null
+++ b/feign/src/main/resources/logback_spring.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+ ${LOGS}/spring-boot-logger.log
+
+ %d %p %C{1.} [%t] %m%n
+
+
+
+
+ ${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log
+
+
+ 10MB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/OpenFeignFileUploadLiveTest.java b/feign/src/test/java/com/baeldung/core/OpenFeignFileUploadLiveTest.java
similarity index 93%
rename from spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/OpenFeignFileUploadLiveTest.java
rename to feign/src/test/java/com/baeldung/core/OpenFeignFileUploadLiveTest.java
index f558e07491..f9dc8b13ed 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/OpenFeignFileUploadLiveTest.java
+++ b/feign/src/test/java/com/baeldung/core/OpenFeignFileUploadLiveTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.cloud.openfeign;
+package com.baeldung.core;
import java.io.File;
import java.io.FileInputStream;
@@ -14,10 +14,10 @@ import org.springframework.mock.web.MockMultipartFile;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.multipart.MultipartFile;
-import com.baeldung.cloud.openfeign.fileupload.service.UploadService;
+import com.baeldung.core.fileupload.service.UploadService;
@RunWith(SpringRunner.class)
-@SpringBootTest
+@SpringBootTest(classes = ExampleApplication.class)
public class OpenFeignFileUploadLiveTest {
@Autowired
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/customizederrorhandling/client/ProductClientUnitTest.java b/feign/src/test/java/com/baeldung/core/customizederrorhandling/client/ProductClientUnitTest.java
similarity index 69%
rename from spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/customizederrorhandling/client/ProductClientUnitTest.java
rename to feign/src/test/java/com/baeldung/core/customizederrorhandling/client/ProductClientUnitTest.java
index 7cf2a12692..ed5f18eb3f 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/customizederrorhandling/client/ProductClientUnitTest.java
+++ b/feign/src/test/java/com/baeldung/core/customizederrorhandling/client/ProductClientUnitTest.java
@@ -1,8 +1,12 @@
-package com.baeldung.cloud.openfeign.customizederrorhandling.client;
+package com.baeldung.core.customizederrorhandling.client;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.configureFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+import static org.junit.Assert.assertThrows;
-import com.baeldung.cloud.openfeign.customizederrorhandling.exception.ProductNotFoundException;
-import com.baeldung.cloud.openfeign.customizederrorhandling.exception.ProductServiceNotAvailableException;
-import com.github.tomakehurst.wiremock.WireMockServer;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -11,11 +15,13 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
-import static com.github.tomakehurst.wiremock.client.WireMock.*;
-import static org.junit.Assert.assertThrows;
+import com.baeldung.core.ExampleApplication;
+import com.baeldung.core.customizederrorhandling.exception.ProductNotFoundException;
+import com.baeldung.core.customizederrorhandling.exception.ProductServiceNotAvailableException;
+import com.github.tomakehurst.wiremock.WireMockServer;
@RunWith(SpringRunner.class)
-@SpringBootTest
+@SpringBootTest(classes = ExampleApplication.class)
public class ProductClientUnitTest {
@Autowired
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/customizederrorhandling/controller/ProductControllerUnitTest.java b/feign/src/test/java/com/baeldung/core/customizederrorhandling/controller/ProductControllerUnitTest.java
similarity index 88%
rename from spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/customizederrorhandling/controller/ProductControllerUnitTest.java
rename to feign/src/test/java/com/baeldung/core/customizederrorhandling/controller/ProductControllerUnitTest.java
index cc9d029e07..04fd68d3e4 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/customizederrorhandling/controller/ProductControllerUnitTest.java
+++ b/feign/src/test/java/com/baeldung/core/customizederrorhandling/controller/ProductControllerUnitTest.java
@@ -1,10 +1,13 @@
-package com.baeldung.cloud.openfeign.customizederrorhandling.controller;
+package com.baeldung.core.customizederrorhandling.controller;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.configureFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+import static org.junit.Assert.assertEquals;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-import com.baeldung.cloud.openfeign.customizederrorhandling.client.ProductClient;
-import com.baeldung.cloud.openfeign.customizederrorhandling.exception.ErrorResponse;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.github.tomakehurst.wiremock.WireMockServer;
-import com.github.tomakehurst.wiremock.client.WireMock;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -18,10 +21,11 @@ import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
-import static com.github.tomakehurst.wiremock.client.WireMock.*;
-import static org.junit.Assert.assertEquals;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+import com.baeldung.core.customizederrorhandling.client.ProductClient;
+import com.baeldung.core.customizederrorhandling.exception.ErrorResponse;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.tomakehurst.wiremock.WireMockServer;
+import com.github.tomakehurst.wiremock.client.WireMock;
@RunWith(SpringRunner.class)
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/defaulterrorhandling/client/ProductClientUnitTest.java b/feign/src/test/java/com/baeldung/core/defaulterrorhandling/client/ProductClientUnitTest.java
similarity index 81%
rename from spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/defaulterrorhandling/client/ProductClientUnitTest.java
rename to feign/src/test/java/com/baeldung/core/defaulterrorhandling/client/ProductClientUnitTest.java
index 4dda2bbe15..8a9fa94074 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/defaulterrorhandling/client/ProductClientUnitTest.java
+++ b/feign/src/test/java/com/baeldung/core/defaulterrorhandling/client/ProductClientUnitTest.java
@@ -1,8 +1,13 @@
-package com.baeldung.cloud.openfeign.defaulterrorhandling.client;
+package com.baeldung.core.defaulterrorhandling.client;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.configureFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThrows;
-import com.baeldung.cloud.openfeign.defaulterrorhandling.model.Product;
-import com.github.tomakehurst.wiremock.WireMockServer;
-import feign.FeignException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -12,12 +17,14 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpStatus;
import org.springframework.test.context.junit4.SpringRunner;
-import static com.github.tomakehurst.wiremock.client.WireMock.*;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThrows;
+import com.baeldung.core.ExampleApplication;
+import com.baeldung.core.defaulterrorhandling.model.Product;
+import com.github.tomakehurst.wiremock.WireMockServer;
+
+import feign.FeignException;
@RunWith(SpringRunner.class)
-@SpringBootTest
+@SpringBootTest(classes = ExampleApplication.class)
public class ProductClientUnitTest {
@Autowired
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/defaulterrorhandling/controller/ProductControllerUnitTest.java b/feign/src/test/java/com/baeldung/core/defaulterrorhandling/controller/ProductControllerUnitTest.java
similarity index 85%
rename from spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/defaulterrorhandling/controller/ProductControllerUnitTest.java
rename to feign/src/test/java/com/baeldung/core/defaulterrorhandling/controller/ProductControllerUnitTest.java
index f6ec7c3310..798ee9035c 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/defaulterrorhandling/controller/ProductControllerUnitTest.java
+++ b/feign/src/test/java/com/baeldung/core/defaulterrorhandling/controller/ProductControllerUnitTest.java
@@ -1,8 +1,13 @@
-package com.baeldung.cloud.openfeign.defaulterrorhandling.controller;
+package com.baeldung.core.defaulterrorhandling.controller;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.configureFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-import com.baeldung.cloud.openfeign.defaulterrorhandling.client.ProductClient;
-import com.github.tomakehurst.wiremock.WireMockServer;
-import com.github.tomakehurst.wiremock.client.WireMock;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -16,10 +21,9 @@ import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
-import static com.github.tomakehurst.wiremock.client.WireMock.*;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
+import com.baeldung.core.defaulterrorhandling.client.ProductClient;
+import com.github.tomakehurst.wiremock.WireMockServer;
+import com.github.tomakehurst.wiremock.client.WireMock;
@RunWith(SpringRunner.class)
@WebMvcTest(ProductController.class)
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/defaulterrorhandling/controller/TestControllerAdvice.java b/feign/src/test/java/com/baeldung/core/defaulterrorhandling/controller/TestControllerAdvice.java
similarity index 88%
rename from spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/defaulterrorhandling/controller/TestControllerAdvice.java
rename to feign/src/test/java/com/baeldung/core/defaulterrorhandling/controller/TestControllerAdvice.java
index 0c7ed86b7c..dfd82ed07d 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/src/test/java/com/baeldung/cloud/openfeign/defaulterrorhandling/controller/TestControllerAdvice.java
+++ b/feign/src/test/java/com/baeldung/core/defaulterrorhandling/controller/TestControllerAdvice.java
@@ -1,11 +1,12 @@
-package com.baeldung.cloud.openfeign.defaulterrorhandling.controller;
+package com.baeldung.core.defaulterrorhandling.controller;
-import feign.FeignException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
+import feign.FeignException;
+
@RestControllerAdvice
public class TestControllerAdvice {
diff --git a/spring-cloud-modules/spring-cloud-openfeign/README.md b/spring-cloud-modules/spring-cloud-openfeign/README.md
index 421fa0284f..c291e60aa6 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/README.md
+++ b/spring-cloud-modules/spring-cloud-openfeign/README.md
@@ -2,9 +2,5 @@
- [Introduction to Spring Cloud OpenFeign](https://www.baeldung.com/spring-cloud-openfeign)
- [Differences Between Netflix Feign and OpenFeign](https://www.baeldung.com/netflix-feign-vs-openfeign)
-- [File Upload With Open Feign](https://www.baeldung.com/java-feign-file-upload)
-- [Feign Logging Configuration](https://www.baeldung.com/java-feign-logging)
- [Provide an OAuth2 Token to a Feign Client](https://www.baeldung.com/spring-cloud-feign-oauth-token)
-- [Retrieve Original Message From Feign ErrorDecoder](https://www.baeldung.com/feign-retrieve-original-message)
-- [RequestLine with Feign Client](https://www.baeldung.com/feign-requestline)
- [Propagating Exceptions With OpenFeign and Spring](https://www.baeldung.com/spring-openfeign-propagate-exception)
diff --git a/spring-cloud-modules/spring-cloud-openfeign/pom.xml b/spring-cloud-modules/spring-cloud-openfeign/pom.xml
index 570cb6a082..88ad38517b 100644
--- a/spring-cloud-modules/spring-cloud-openfeign/pom.xml
+++ b/spring-cloud-modules/spring-cloud-openfeign/pom.xml
@@ -61,12 +61,6 @@
spring-boot-starter-test
test
-
- com.github.tomakehurst
- wiremock-jre8
- 2.33.2
- test
-
diff --git a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/UserClient.java b/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/UserClient.java
deleted file mode 100644
index 9416bd30f0..0000000000
--- a/spring-cloud-modules/spring-cloud-openfeign/src/main/java/com/baeldung/cloud/openfeign/client/UserClient.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.baeldung.cloud.openfeign.client;
-
-import com.baeldung.cloud.openfeign.config.FeignConfig;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-
-@FeignClient(name = "user-client", url="https://jsonplaceholder.typicode.com", configuration = FeignConfig.class)
-public interface UserClient {
-
- @RequestMapping(value = "/users", method = RequestMethod.GET)
- String getUsers();
-}
\ No newline at end of file