diff --git a/openbas-framework/pom.xml b/openbas-framework/pom.xml
index c2c8191ec9..852ba9dc3d 100644
--- a/openbas-framework/pom.xml
+++ b/openbas-framework/pom.xml
@@ -38,11 +38,6 @@
commons-io
${commons-io.version}
-
- org.reflections
- reflections
- 0.10.2
-
org.springframework.boot
diff --git a/openbas-framework/src/main/java/io/openbas/utils/SubclassScanner.java b/openbas-framework/src/main/java/io/openbas/utils/SubclassScanner.java
new file mode 100644
index 0000000000..8ce1ad500a
--- /dev/null
+++ b/openbas-framework/src/main/java/io/openbas/utils/SubclassScanner.java
@@ -0,0 +1,23 @@
+package io.openbas.utils;
+
+import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
+import org.springframework.core.type.filter.AssignableTypeFilter;
+
+import java.util.Set;
+import java.util.stream.Collectors;
+
+public class SubclassScanner {
+ public static Set> getSubclasses(String basePackage, Class> clazz) {
+ ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
+ provider.addIncludeFilter(new AssignableTypeFilter(clazz));
+ return provider.findCandidateComponents(basePackage).stream()
+ .map(beanDefinition -> {
+ try {
+ return Class.forName(beanDefinition.getBeanClassName());
+ } catch (ClassNotFoundException e) {
+ return null;
+ }
+ })
+ .collect(Collectors.toSet());
+ }
+}
diff --git a/openbas-framework/src/main/java/io/openbas/utils/schema/SchemaUtils.java b/openbas-framework/src/main/java/io/openbas/utils/schema/SchemaUtils.java
index 82243feb6f..fe8e2c8e0b 100644
--- a/openbas-framework/src/main/java/io/openbas/utils/schema/SchemaUtils.java
+++ b/openbas-framework/src/main/java/io/openbas/utils/schema/SchemaUtils.java
@@ -2,12 +2,12 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import io.openbas.annotation.Queryable;
+import io.openbas.utils.SubclassScanner;
import jakarta.persistence.Column;
import jakarta.persistence.JoinTable;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
-import org.reflections.Reflections;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
@@ -18,7 +18,6 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
-import static org.reflections.scanners.Scanners.SubTypes;
import static org.springframework.util.StringUtils.hasText;
public class SchemaUtils {
@@ -33,18 +32,19 @@ private SchemaUtils() {
Email.class
);
+ private static final String BASE_CLASS_PACKAGE = "io.openbas.database.model";
+
private static final ConcurrentHashMap, List> cacheMap = new ConcurrentHashMap<>();
// -- SCHEMA --
public static List schemaWithSubtypes(@NotNull Class> clazz) throws ClassNotFoundException {
- Reflections reflections = new Reflections("io.openbas.database.model");
- Set> subTypes = reflections.get(SubTypes.of(clazz).asClass());
-
List> propertySchemasAll = new ArrayList<>();
propertySchemasAll.add(schema(clazz));
- for (Class> subType : subTypes) {
- propertySchemasAll.add(schema(subType));
- }
+ propertySchemasAll
+ .addAll(SubclassScanner.getSubclasses(BASE_CLASS_PACKAGE, clazz)
+ .stream()
+ .map(SchemaUtils::schema)
+ .toList());
return propertySchemasAll.stream().flatMap(List::stream)
.collect(Collectors.toMap(