diff --git a/.github/workflows/work-jar.yml b/.github/workflows/work-jar.yml
index 207f555..f6222b4 100644
--- a/.github/workflows/work-jar.yml
+++ b/.github/workflows/work-jar.yml
@@ -3,7 +3,6 @@ on:
push:
branches:
- main
- - Feature/AtomicFactory
permissions:
contents: write
pages: write
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..6fea68f
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index c85e4b7..a4a5dcc 100644
--- a/README.md
+++ b/README.md
@@ -65,7 +65,7 @@ Changelog:
---
-## 🌟 Why ConnectLib?
+## Why ConnectLib?
Imagine an API that doesn't just connect services, but becomes the conductor of your integrations. ConnectLib is designed to:
@@ -76,17 +76,17 @@ Imagine an API that doesn't just connect services, but becomes the conductor of
---
-## 🛠️ Main Features
+## Main Features
-- 🔌 **Centralized connector management**
-- ⚡ **Automated job execution**
-- 🧩 **Extensible and modular**
-- 📊 **Detailed logs and monitoring**
-- 🔒 **Built-in security**
+- **Centralized connector management**
+- **Automated job execution**
+- **Extensible and modular**
+- **Detailed logs and monitoring**
+- **Built-in security**
---
-## 🚦 Quick Start
+## Quick Start
1. **Clone the project**
```bash
@@ -104,13 +104,13 @@ Imagine an API that doesn't just connect services, but becomes the conductor of
---
-## 🧑💻 Usage Example
+## Usage Example
More examples HERE: [ExampleUsages.java](src/main/java/fr/sandro642/github/example/ExampleUsages.java)
---
-[build.gradle](build.gradle)
-## 📚 Project Structure
+
+## Project Structure
- `src/main/java/fr/sandro642/github/` : main source code
- `src/test/java/fr/sandro642/github/test/` : unit tests
@@ -118,7 +118,7 @@ More examples HERE: [ExampleUsages.java](src/main/java/fr/sandro642/github/examp
---
-## 🤝 Contributing
+## Contributing
1. Fork the repo
2. Create a branch (`feature/my-feature`)
@@ -126,7 +126,7 @@ More examples HERE: [ExampleUsages.java](src/main/java/fr/sandro642/github/examp
---
-## 📞 Contact
+## Contact
For any questions or suggestions: [sandro33810@gmail.com](mailto:sandro33810@gmail.com)
diff --git a/build.gradle b/build.gradle
index c8ed704..42e5508 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,7 +5,7 @@ plugins {
}
group = 'fr.sandro642.github'
-version = '0.4.3.1-STABLE'
+version = '0.4.6-STABLE'
// Générer une classe de version automatiquement
task generateVersionClass {
diff --git a/src/main/java/fr/sandro642/github/example/ExampleUsages.java b/src/main/java/fr/sandro642/github/example/ExampleUsages.java
deleted file mode 100644
index 2caacea..0000000
--- a/src/main/java/fr/sandro642/github/example/ExampleUsages.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package fr.sandro642.github.example;
-
-import fr.sandro642.github.ConnectLib;
-import fr.sandro642.github.api.ApiFactory;
-import fr.sandro642.github.enums.LangType;
-import fr.sandro642.github.enums.MethodType;
-import fr.sandro642.github.enums.ResourceType;
-import fr.sandro642.github.enums.VersionType;
-import fr.sandro642.github.provider.RouteImport;
-
-import java.util.Map;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.TimeUnit;
-
-/**
- * ExampleUsages is a placeholder class that can be used to demonstrate how to use the ConnectLib library.
- * It can contain example methods or code snippets that show how to interact with the API, handle responses,
- * and utilize the features provided by the ConnectLib library.
- *
- * @author Sandro642
- * @version 1.0
- */
-
-public class ExampleUsages {
-
- private ConnectLib connectLib = new ConnectLib();
-
- public enum ExampleRoutes implements RouteImport {
- EXAMPLE_ROUTE("/api/example/route");
-
- final String route;
-
- ExampleRoutes(String route) {
- this.route = route;
- }
-
- @Override
- public String getRoute() {
- return route;
- }
- }
-
- public void initializeLib() {
-
- // Optionally, you can specify routes if needed
- connectLib.init(ResourceType.MAIN_RESOURCES, LangType.FRENCH, ExampleRoutes.class);
- // You can also initialize without specifying routes
- connectLib.init(ResourceType.MAIN_RESOURCES, LangType.FRENCH);
- }
-
- // Example method to demonstrate usage
- public void exampleMethodSync() {
- try {
- // This method can be used to demonstrate how to interact with the API
- // For example, making a GET request to the EXAMPLE_ROUTE
- CompletableFuture apiFactoryCompletableFuture = connectLib.JobGetInfos()
- .getRoutes(VersionType.V1_BRANCH, MethodType.GET, ExampleRoutes.EXAMPLE_ROUTE)
- .getResponse();
-
- ApiFactory response = apiFactoryCompletableFuture.get(5, TimeUnit.SECONDS);
-
- System.out.println(response.display());
- System.out.println("Response Code: " + response.getData("code"));
- System.out.println("Response Message: " + response.getData("message"));
- System.out.println("Response Data: " + response.getSpecData("data", "exampleKey"));
- System.out.println("Status Code: " + response.getStatusCode());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- // Example method to demonstrate asynchronous usage
- public void exampleMethodAsync() {
- try {
- // This method can be used to demonstrate how to interact with the API asynchronously
-
- CompletableFuture apiFactoryCompletableFuture = connectLib.JobGetInfos()
- .getRoutes(VersionType.V1_BRANCH, MethodType.GET, ExampleRoutes.EXAMPLE_ROUTE)
- .getResponse();
-
- ApiFactory response = apiFactoryCompletableFuture.get(5, TimeUnit.SECONDS);
-
- System.out.println(response.display());
- System.out.println("Response Code: " + response.getData("code"));
- System.out.println("Response Message: " + response.getData("message"));
- System.out.println("Response Data: " + response.getSpecData("data", "exampleKey"));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- // Example to use all methods in JobGetInfos
- public void exampleJobGetInfos() {
- Map body = Map.of();
- Map params = Map.of();
- Map query = Map.of();
-
- connectLib.JobGetInfos().getRoutes(VersionType.V1_BRANCH, MethodType.GET, ExampleRoutes.EXAMPLE_ROUTE, body, params, query);
- connectLib.JobGetInfos().getRoutes(VersionType.V1_BRANCH, MethodType.POST, ExampleRoutes.EXAMPLE_ROUTE, body);
- connectLib.JobGetInfos().getRoutes(VersionType.V1_BRANCH, MethodType.PUT, ExampleRoutes.EXAMPLE_ROUTE, null, params, query);
- connectLib.JobGetInfos().getRoutes(VersionType.V1_BRANCH, MethodType.PATCH, ExampleRoutes.EXAMPLE_ROUTE);
- connectLib.JobGetInfos().getRoutes(MethodType.GET, ExampleRoutes.EXAMPLE_ROUTE, body, params);
- connectLib.JobGetInfos().getRoutes(MethodType.POST, ExampleRoutes.EXAMPLE_ROUTE, body);
- connectLib.JobGetInfos().getRoutes(MethodType.DELETE, ExampleRoutes.EXAMPLE_ROUTE);
- }
-
-}
diff --git a/src/main/java/fr/sandro642/github/jobs/JobGetInfos.java b/src/main/java/fr/sandro642/github/jobs/JobGetInfos.java
index 0f04bf3..857f59e 100644
--- a/src/main/java/fr/sandro642/github/jobs/JobGetInfos.java
+++ b/src/main/java/fr/sandro642/github/jobs/JobGetInfos.java
@@ -41,6 +41,8 @@ public class JobGetInfos {
*/
private URLProvider urlBranch;
+ private String fullRoute = "";
+
/**
* Constructor of JobGetInfos.
* Initializes the ApiClient and loads the YAML configuration.
@@ -59,29 +61,6 @@ private String getRouteName(Enum> routeName) {
return routeName.name().toLowerCase();
}
- /**
- * Get routes from the YAML file and builds the full URL.
- * @param versionType Version of the API (V1_BRANCH, V2_BRANCH)
- * @param methodType Type of HTTP method (GET, POST)
- * @param routeName Name of the route in the YAML file
- * @param body Body of the request for POST (can be null for GET)
- * @return JobGetInfos for chaining
- */
- public JobGetInfos getRoutes(VersionProvider versionType, MethodType methodType, Enum> routeName, Map body) {
- return getRoutes(versionType, methodType, getRouteName(routeName), body, null, null);
- }
-
- /**
- * Get routes from the YAML file and builds the full URL with parameters.
- * @param versionType Version of the API (V1_BRANCH, V2_BRANCH)
- * @param methodType Type of HTTP method (GET, POST)
- * @param routeName Name of the route in the YAML file
- * @return JobGetInfos for chaining
- */
- public JobGetInfos getRoutes(VersionProvider versionType, MethodType methodType, Enum> routeName) {
- return getRoutes(versionType, methodType, getRouteName(routeName), null, null, null);
- }
-
/**
* Get routes from the YAML file and builds the full URL with a request body.
* @param methodType Type of HTTP method (GET, POST)
@@ -89,166 +68,84 @@ public JobGetInfos getRoutes(VersionProvider versionType, MethodType methodType,
* @return JobGetInfos for chaining
*/
public JobGetInfos getRoutes(MethodType methodType, Enum> routeName) {
- return getRoutes(null, methodType, getRouteName(routeName), null, null, null);
- }
-
- /**
- * Get routes from the YAML file and builds the full URL with a request body and parameters.
- * @param methodType Type of HTTP method (GET, POST)
- * @param routeName Name of the route in the YAML file
- * @param body Body of the request for POST (can be null for GET)
- * @return JobGetInfos for chaining
- */
- public JobGetInfos getRoutes(MethodType methodType, Enum> routeName, Map body) {
- return getRoutes(null, methodType, getRouteName(routeName), body, null, null);
- }
-
- /**
- * Get routes from the YAML file and builds the full URL with additional parameters.
- * @param methodType Type of HTTP method (GET, POST)
- * @param routeName Name of the route in the YAML file
- * @param params Additional parameters for the request
- * @return JobGetInfos for chaining
- */
- public JobGetInfos getRoutes(MethodType methodType, Enum> routeName, Map body, Map params) {
- return getRoutes(null, methodType, getRouteName(routeName), body, params, null);
- }
-
- /**
- * Get routes from the YAML file and builds the full URL.
- * @param methodType Type of HTTP method (GET, POST)
- * @param routeName Name of the route in the YAML file
- * @return JobGetInfos for chaining
- */
- public JobGetInfos getRoutes(MethodType methodType, String routeName) {
- return getRoutes(null, methodType, routeName, null, null, null);
- }
-
- /**
- * Récupère les routes depuis le fichier YAML et construit l'URL complète
- * @param versionType Version de l'API (V1_BRANCH, V2_BRANCH)
- * @param methodType Type de méthode HTTP (GET, POST)
- * @param routeName Nom de la route dans le fichier YAML
- * @return JobGetInfos pour chaînage
- */
- public JobGetInfos getRoutes(VersionProvider versionType, MethodType methodType, String routeName) {
- return getRoutes(versionType, methodType, routeName, null, null, null);
+ return getRoutes(null, methodType, getRouteName(routeName));
}
/**
* Get routes from the YAML file and builds the full URL with a request body.
- * @param versionType Version of the API (V1_BRANCH, V2_BRANCH)
+ * @param versionType VersionProvider to specify API versioning
* @param methodType Type of HTTP method (GET, POST)
* @param routeName Name of the route in the YAML file
- * @param body Body of the request for POST (can be null for GET)
* @return JobGetInfos for chaining
*/
- public JobGetInfos getRoutes(VersionProvider versionType, MethodType methodType, String routeName, Map body) {
- return getRoutes(versionType, methodType, routeName, body, null, null);
- }
-
- /**
- * Get routes from the YAML file and builds the full URL with a request body and parameters.
- * @param methodType Type of HTTP method (GET, POST)
- * @param routeName Name of the route in the YAML file
- * @param body Body of the request for POST (can be null for GET)
- * @param params Additional parameters for the request
- * @param query Additional query parameters for the request
- * @return JobGetInfos for chaining
- */
- public JobGetInfos getRoutes(MethodType methodType, String routeName, Map body, Map params, Map query) {
- return getRoutes(null, methodType, routeName, body, params, query);
- }
-
- /**
- * Get routes from the YAML file and builds the full URL with additional parameters.
- * @param methodType Type of HTTP method (GET, POST)
- * @param routeName Name of the route in the YAML file
- * @param body Body of the request for POST (can be null for GET)
- * @param params Additional parameters for the request
- * @param query Additional query parameters for the request
- * @return JobGetInfos for chaining
- */
- public JobGetInfos getRoutes(MethodType methodType, Enum> routeName, Map body, Map params, Map query) {
- return getRoutes(null, methodType, getRouteName(routeName), body, params, query);
- }
-
- /**
- * Get routes from the YAML file and builds the full URL with additional parameters.
- * @param versionType Version of the API (V1_BRANCH, V2_BRANCH)
- * @param methodType Type of HTTP method (GET, POST)
- * @param routeName Name of the route in the YAML file
- * @param params Additional parameters for the request
- * @param query Additional query parameters for the request
- * @return JobGetInfos for chaining
- */
- public JobGetInfos getRoutes(VersionProvider versionType, MethodType methodType, R routeName, Map body, Map params, Map query) {
+ public JobGetInfos getRoutes(VersionProvider versionType, MethodType methodType, R routeName) {
try {
String route = connectLib.getRoute(routeName.toString().toLowerCase());
- String fullRoute;
-
if (versionType != null && versionType.getVersion() != null) {
String cleanRoute = route.startsWith("/") ? route.substring(1) : route;
fullRoute = "/" + versionType.getVersion() + "/" + cleanRoute;
} else {
- fullRoute = route;
+ this.fullRoute = route;
}
- if (params != null && !params.isEmpty()) {
- for (Map.Entry entry : params.entrySet()) {
- String paramKey = "{" + entry.getKey() + "}";
- String paramValue = entry.getValue().toString();
- fullRoute = fullRoute.replace(paramKey, paramValue);
- }
- }
+ connectLib.StoreAndRetrieve().store.put("currentRoute", this.fullRoute);
+ connectLib.StoreAndRetrieve().store.put("currentMethod", methodType);
- // New query string handling logic
- if (query != null && !query.isEmpty()) {
- // Pattern for capturing parameters between $
- Pattern pattern = Pattern.compile("\\$([^$]+)\\$");
- Matcher matcher = pattern.matcher(fullRoute);
-
- StringBuilder queryString = new StringBuilder("?");
- boolean firstParam = true;
-
- // Iterate through all matches (parameters between $)
- while (matcher.find()) {
- String paramName = matcher.group(1); // Get parameter name without $
-
- // Check if this parameter exists in the query map
- if (query.containsKey(paramName)) {
- if (!firstParam) {
- queryString.append("&");
- }
- queryString.append(paramName).append("=").append(query.get(paramName));
- firstParam = false;
- }
- }
+ connectLib.Logger().INFO(connectLib.LangManager().getMessage(CategoriesType.JOBS_PACKAGE, "getroutes.maderoute", "route", fullRoute));
+ } catch (Exception e) {
+ connectLib.Logger().ERROR(connectLib.LangManager().getMessage(CategoriesType.JOBS_PACKAGE, "getroutes.error", "exception", e.getMessage()));
+ }
+ return this;
+ }
- // Append query string to the route only if parameters were added
- if (queryString.length() > 1) {
- // Clean the route by removing $parameter$ placeholders and extra &
- String cleanRoute = fullRoute.replaceAll("\\$[^$]+\\$", "").replaceAll("&+", "");
- fullRoute = cleanRoute + queryString.toString();
- }
- }
+ public JobGetInfos body(Map, ?> body) {
+ connectLib.StoreAndRetrieve().store.put("currentBody", body);
+ return this;
+ }
- connectLib.StoreAndRetrieve().store.put("currentRoute", fullRoute);
- connectLib.StoreAndRetrieve().store.put("currentMethod", methodType);
+ public JobGetInfos params(Map, ?> params) {
+ if (params == null || params.isEmpty()) return this;
- if (body != null) {
- connectLib.StoreAndRetrieve().store.put("currentBody", body);
- }
+ for (Map.Entry, ?> entry : params.entrySet()) {
+ String paramKey = "{" + entry.getKey() + "}";
+ String paramValue = entry.getValue() == null ? "" : entry.getValue().toString();
+ this.fullRoute = this.fullRoute.replace(paramKey, paramValue);
+ }
+
+ connectLib.StoreAndRetrieve().store.put("currentParams", params);
+ connectLib.StoreAndRetrieve().store.put("currentRoute", this.fullRoute);
+ return this;
+ }
+
+ public JobGetInfos query(Map, ?> query) {
+ if (query == null || query.isEmpty()) return this;
- if (params != null) {
- connectLib.StoreAndRetrieve().store.put("currentParams", params);
+ Pattern pattern = Pattern.compile("\\$([^$]+)\\$");
+ Matcher matcher = pattern.matcher(this.fullRoute);
+
+ StringBuilder queryString = new StringBuilder("?");
+ boolean firstParam = true;
+
+ while (matcher.find()) {
+ String paramName = matcher.group(1);
+ if (query.containsKey(paramName)) {
+ if (!firstParam) {
+ queryString.append("&");
+ }
+ Object value = query.get(paramName);
+ queryString.append(paramName).append("=").append(value == null ? "" : value.toString());
+ firstParam = false;
}
+ }
- connectLib.Logger().INFO(connectLib.LangManager().getMessage(CategoriesType.JOBS_PACKAGE, "getroutes.maderoute", "route", fullRoute));
- } catch (Exception e) {
- connectLib.Logger().ERROR(connectLib.LangManager().getMessage(CategoriesType.JOBS_PACKAGE, "getroutes.error", "exception", e.getMessage()));
+ if (queryString.length() > 1) {
+ String cleanRoute = this.fullRoute.replaceAll("\\$[^$]+\\$", "").replaceAll("&+", "");
+ this.fullRoute = cleanRoute + queryString.toString();
}
+
+ connectLib.StoreAndRetrieve().store.put("currentRoute", this.fullRoute);
+ connectLib.StoreAndRetrieve().store.put("currentQuery", query);
return this;
}
@@ -270,7 +167,7 @@ public JobGetInfos urlBranch(URLProvider urlBranch) {
* makes the API call, and returns the response as an ApiFactory object.
* @return ApiFactory containing the response from the API, or null if an error occurs.
*/
- public CompletableFuture getResponse() {
+ public CompletableFuture execute() {
try {
String route = (String) connectLib.StoreAndRetrieve().store.get("currentRoute");
MethodType method = (MethodType) connectLib.StoreAndRetrieve().store.get("currentMethod");
diff --git a/src/main/java/fr/sandro642/github/provider/AtomicFactory.java b/src/main/java/fr/sandro642/github/provider/AtomicFactory.java
new file mode 100644
index 0000000..fb272da
--- /dev/null
+++ b/src/main/java/fr/sandro642/github/provider/AtomicFactory.java
@@ -0,0 +1,18 @@
+package fr.sandro642.github.provider;
+
+import fr.sandro642.github.api.ApiFactory;
+
+import java.util.Map;
+
+public abstract class AtomicFactory {
+
+ private ApiFactory apiFactory;
+
+ protected void getPhysx(ApiFactory apiFactory) {
+ this.apiFactory = apiFactory;
+ }
+
+ protected Map,?> rawPhysx() {
+ return apiFactory.getRawData();
+ }
+}
diff --git a/src/test/java/fr/sandro642/github/test/MainTest.java b/src/test/java/fr/sandro642/github/test/MainTest.java
index 78e3d51..ec9c30d 100644
--- a/src/test/java/fr/sandro642/github/test/MainTest.java
+++ b/src/test/java/fr/sandro642/github/test/MainTest.java
@@ -6,6 +6,7 @@
import fr.sandro642.github.enums.LangType;
import fr.sandro642.github.enums.MethodType;
import fr.sandro642.github.enums.ResourceType;
+import fr.sandro642.github.provider.AtomicFactory;
import fr.sandro642.github.provider.RouteImport;
import fr.sandro642.github.provider.URLProvider;
import fr.sandro642.github.provider.VersionProvider;
@@ -28,7 +29,8 @@ public class MainTest {
public enum TestRoutes implements RouteImport {
HELLO("/hello"),
GREET("greet$name$"),
- REQUEST_TOKEN("/auth/request/token")
+ REQUEST_TOKEN("/auth/request/token"),
+ SESSION_PUSH("/auth/link/app/{sessionId}")
;
final String route;
@@ -43,6 +45,19 @@ public String getRoute() {
}
}
+ public class ClassheritFromFactory extends AtomicFactory {
+
+
+
+ public ClassheritFromFactory(ApiFactory apiFactory) {
+ getPhysx(apiFactory);
+ }
+
+ public Object getContent() {
+ return rawPhysx().get("content");
+ }
+ }
+
/**
* Example of URL branches, you can add multiple branches if you have multiple environments (dev, prod, etc.)
*/
@@ -94,7 +109,7 @@ public static void main(String[] args) {
CompletableFuture apiFactoryCompletableFuture = connectLib.JobGetInfos()
.getRoutes(MethodType.GET, TestRoutes.HELLO)
- .getResponse();
+ .execute();
ApiFactory response = apiFactoryCompletableFuture.get(5, TimeUnit.SECONDS);
@@ -117,8 +132,8 @@ public void testUseFullRoute() {
);
CompletableFuture factoryCompletableFuture = connectLib.JobGetInfos()
- .getRoutes(MethodType.GET, TestRoutes.GREET, null, null, query)
- .getResponse();
+ .getRoutes(MethodType.GET, TestRoutes.GREET)
+ .execute();
ApiFactory response = factoryCompletableFuture.get(5, TimeUnit.SECONDS);
@@ -145,7 +160,7 @@ public void testLangType() {
*/
//.urlBranch(ExampleUrlBranch.LOCALHOST)
- .getResponse();
+ .execute();
ApiFactory response = factoryCompletableFuture.get(5, TimeUnit.SECONDS);
@@ -157,18 +172,25 @@ public void testLangType() {
}
}
+ private String code_session;
+
+ @Test
+ public void testProd() {
+ connectLib.init(ResourceType.TEST_RESOURCES, LangType.ENGLISH, TestRoutes.class);
+
+ testSpecData();
+
+ pushsession();
+ }
@Test
public void testSpecData() {
try {
- connectLib.init(ResourceType.MAIN_RESOURCES, LangType.ENGLISH, TestRoutes.class)
- .wanImplement("http://localhost:8080");
-
CompletableFuture apiFactoryCompletableFuture = connectLib.JobGetInfos()
.getRoutes(TestCustomVersion.V1_API, MethodType.GET, TestRoutes.REQUEST_TOKEN)
.urlBranch(ExampleUrlBranch.PROD)
- .getResponse();
+ .execute();
ApiFactory apiFactory = apiFactoryCompletableFuture.get(5, TimeUnit.SECONDS);
@@ -178,7 +200,7 @@ public void testSpecData() {
System.out.println(apiFactory.getSpecData("data", "accessToken"));
- Thread.sleep(20000);
+ this.code_session = (String) apiFactory.getSpecData("data", "sessionCode");
} catch (Exception e) {
e.printStackTrace();
@@ -186,11 +208,11 @@ public void testSpecData() {
}
@Test
- public void startAppServices() {
+ public void pushsession() {
try {
connectLib.Logger().showLogs();
connectLib.init(ResourceType.TEST_RESOURCES, LangType.ENGLISH, TestRoutes.class)
- .wanImplement("http://localhost:8080");
+ .wanImplement("http://localhost:8080", "");
Thread.sleep(20000);
@@ -199,6 +221,27 @@ public void startAppServices() {
}
}
+ @Test
+ public void startAppServices() {
+ try {
+ connectLib.Logger().showLogs();
+ connectLib.init(ResourceType.TEST_RESOURCES, LangType.ENGLISH, TestRoutes.class);
+ //.webServices(8080, "TestDashboard");
+
+ CompletableFuture apiFactoryCompletableFuture = connectLib.JobGetInfos()
+ .getRoutes(MethodType.GET, TestRoutes.HELLO)
+ .urlBranch(ExampleUrlBranch.POST_PROD)
+ .execute()
+ .thenApply(ClassheritFromFactory::new);
+
+ ClassheritFromFactory classheritFromFactory = apiFactoryCompletableFuture.get(5, TimeUnit.SECONDS);
+
+ System.out.println("Response: " + classheritFromFactory.getContent());
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }