deps: Refactor dependencies (#3224)

* remove spring dep
move junit, logging, mockito under dep mgmt

* upgrade anti-corruption-layer deps

* async method invocation

* balking, bloc

* bridge to bytecode

* caching

* callback - cqrs

* component - health check

* hexagonal - metadata mapping

* rest of the patterns

* remove checkstyle, take spotless into use
This commit is contained in:
Ilkka Seppälä
2025-03-29 19:34:27 +02:00
committed by GitHub
parent 371439aeaa
commit 0ca162a55c
1863 changed files with 14408 additions and 17637 deletions
@@ -32,22 +32,19 @@ import java.util.ArrayList;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
/**
* Utility class to handle Json operations.
*/
/** Utility class to handle Json operations. */
@Slf4j
public class JsonUtil {
private static ObjectMapper objectMapper = new ObjectMapper();
private JsonUtil() {
}
private JsonUtil() {}
/**
* Convert an object to a Json string representation.
*
* @param object Object to convert.
* @param <T> Object's class.
* @param <T> Object's class.
* @return Json string.
*/
public static <T> String objectToJson(T object) {
@@ -62,9 +59,9 @@ public class JsonUtil {
/**
* Convert a Json string to an object of a class.
*
* @param json Json string to convert.
* @param json Json string to convert.
* @param clazz Object's class.
* @param <T> Object's generic class.
* @param <T> Object's generic class.
* @return Object.
*/
public static <T> T jsonToObject(String json, Class<T> clazz) {
@@ -79,20 +76,19 @@ public class JsonUtil {
/**
* Convert a Json string to a List of objects of a class.
*
* @param json Json string to convert.
* @param json Json string to convert.
* @param clazz Object's class.
* @param <T> Object's generic class.
* @param <T> Object's generic class.
* @return List of objects.
*/
public static <T> List<T> jsonToList(String json, Class<T> clazz) {
try {
CollectionType listType = objectMapper.getTypeFactory()
.constructCollectionType(ArrayList.class, clazz);
CollectionType listType =
objectMapper.getTypeFactory().constructCollectionType(ArrayList.class, clazz);
return objectMapper.reader().forType(listType).readValue(json);
} catch (JsonProcessingException e) {
LOGGER.error("Cannot convert the Json " + json + " to List of " + clazz.getName() + ".", e);
return List.of();
}
}
}
@@ -45,8 +45,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.web.util.UriUtils;
/**
* Class to handle all the http communication with a Rest API.
* It is supported by the HttpClient Java library.
* Class to handle all the http communication with a Rest API. It is supported by the HttpClient
* Java library.
*/
@Slf4j
public class TinyRestClient {
@@ -59,7 +59,7 @@ public class TinyRestClient {
/**
* Class constructor.
*
* @param baseUrl Root url for endpoints.
* @param baseUrl Root url for endpoints.
* @param httpClient Handle the http communication.
*/
public TinyRestClient(String baseUrl, HttpClient httpClient) {
@@ -71,9 +71,9 @@ public class TinyRestClient {
* Creates a http communication to request and receive data from an endpoint.
*
* @param method Interface's method which is annotated with a http method.
* @param args Method's arguments passed in the call.
* @param args Method's arguments passed in the call.
* @return Response from the endpoint.
* @throws IOException Exception thrown when any fail happens in the call.
* @throws IOException Exception thrown when any fail happens in the call.
* @throws InterruptedException Exception thrown when call is interrupted.
*/
public Object send(Method method, Object[] args) throws IOException, InterruptedException {
@@ -84,11 +84,12 @@ public class TinyRestClient {
var httpAnnotationName = httpAnnotation.annotationType().getSimpleName().toUpperCase();
var url = baseUrl + buildUrl(method, args, httpAnnotation);
var bodyPublisher = buildBodyPublisher(method, args);
var httpRequest = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Content-Type", "application/json")
.method(httpAnnotationName, bodyPublisher)
.build();
var httpRequest =
HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Content-Type", "application/json")
.method(httpAnnotationName, bodyPublisher)
.build();
var httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
var statusCode = httpResponse.statusCode();
if (statusCode >= HttpURLConnection.HTTP_BAD_REQUEST) {
@@ -140,8 +141,8 @@ public class TinyRestClient {
return null;
}
if (returnType instanceof ParameterizedType) {
Class<?> responseClass = (Class<?>) (((ParameterizedType) returnType)
.getActualTypeArguments()[0]);
Class<?> responseClass =
(Class<?>) (((ParameterizedType) returnType).getActualTypeArguments()[0]);
return JsonUtil.jsonToList(rawData, responseClass);
} else {
Class<?> responseClass = method.getReturnType();
@@ -150,22 +151,28 @@ public class TinyRestClient {
}
private Annotation getHttpAnnotation(Method method) {
return httpAnnotationByMethod.computeIfAbsent(method, m ->
Arrays.stream(m.getDeclaredAnnotations())
.filter(annot -> annot.annotationType().isAnnotationPresent(Http.class))
.findFirst().orElse(null));
return httpAnnotationByMethod.computeIfAbsent(
method,
m ->
Arrays.stream(m.getDeclaredAnnotations())
.filter(annot -> annot.annotationType().isAnnotationPresent(Http.class))
.findFirst()
.orElse(null));
}
private Annotation getAnnotationOf(Annotation[] annotations, Class<?> clazz) {
return Arrays.stream(annotations)
.filter(annot -> annot.annotationType().equals(clazz))
.findFirst().orElse(null);
.findFirst()
.orElse(null);
}
private String annotationValue(Annotation annotation) {
var valueMethod = Arrays.stream(annotation.annotationType().getDeclaredMethods())
.filter(methodAnnot -> methodAnnot.getName().equals("value"))
.findFirst().orElse(null);
var valueMethod =
Arrays.stream(annotation.annotationType().getDeclaredMethods())
.filter(methodAnnot -> methodAnnot.getName().equals("value"))
.findFirst()
.orElse(null);
if (valueMethod == null) {
return null;
}
@@ -173,8 +180,13 @@ public class TinyRestClient {
try {
result = valueMethod.invoke(annotation, (Object[]) null);
} catch (Exception e) {
LOGGER.error("Cannot read the value " + annotation.annotationType().getSimpleName()
+ "." + valueMethod.getName() + "()", e);
LOGGER.error(
"Cannot read the value "
+ annotation.annotationType().getSimpleName()
+ "."
+ valueMethod.getName()
+ "()",
e);
result = null;
}
return (result instanceof String strResult ? strResult : null);
@@ -30,10 +30,9 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Annotation to mark a method's parameter as a Body parameter.
* It is typically used on Post and Put http methods.
* Annotation to mark a method's parameter as a Body parameter. It is typically used on Post and Put
* http methods.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface Body {
}
public @interface Body {}
@@ -29,9 +29,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Annotation to mark an interface's method as a DELETE http method.
*/
/** Annotation to mark an interface's method as a DELETE http method. */
@Http
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@@ -29,9 +29,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Annotation to mark an interface's method as a GET http method.
*/
/** Annotation to mark an interface's method as a GET http method. */
@Http
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@@ -29,10 +29,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Annotation to mark other annotations to be recognized as http methods.
*/
/** Annotation to mark other annotations to be recognized as http methods. */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Http {
}
public @interface Http {}
@@ -29,9 +29,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Annotation to mark a method's parameter as a Path parameter.
*/
/** Annotation to mark a method's parameter as a Path parameter. */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface Path {
@@ -29,9 +29,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Annotation to mark an interface's method as a POST http method.
*/
/** Annotation to mark an interface's method as a POST http method. */
@Http
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@@ -29,9 +29,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Annotation to mark an interface's method as a PUT http method.
*/
/** Annotation to mark an interface's method as a PUT http method. */
@Http
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)