diff --git a/pom.xml b/pom.xml index da0100e..676c9d1 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ io.github.umutayb Utilities - 1.7.2 + 1.7.3 jar Java-Utilities diff --git a/src/main/java/api_assured/ApiUtilities.java b/src/main/java/api_assured/ApiUtilities.java index 39002f4..59fe6d2 100644 --- a/src/main/java/api_assured/ApiUtilities.java +++ b/src/main/java/api_assured/ApiUtilities.java @@ -8,6 +8,7 @@ import retrofit2.Call; import retrofit2.Response; import utils.*; +import utils.mapping.MappingUtilities; import utils.reflection.ReflectionUtilities; import java.io.File; import java.io.IOException; diff --git a/src/main/java/api_assured/Caller.java b/src/main/java/api_assured/Caller.java index 65376ad..5ec96d2 100644 --- a/src/main/java/api_assured/Caller.java +++ b/src/main/java/api_assured/Caller.java @@ -7,11 +7,13 @@ import retrofit2.Call; import retrofit2.Response; import utils.*; +import utils.mapping.MappingUtilities; + import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Objects; -import static utils.MappingUtilities.Json.*; +import static utils.mapping.MappingUtilities.Json.*; import static utils.reflection.ReflectionUtilities.getPreviousMethodName; import static utils.StringUtilities.Color.*; diff --git a/src/main/java/api_assured/ServiceGenerator.java b/src/main/java/api_assured/ServiceGenerator.java index b039ea8..57561ba 100644 --- a/src/main/java/api_assured/ServiceGenerator.java +++ b/src/main/java/api_assured/ServiceGenerator.java @@ -1,17 +1,11 @@ package api_assured; -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.json.JsonWriteFeature; -import com.fasterxml.jackson.databind.SerializationFeature; import context.ContextStore; import okhttp3.Headers; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.logging.HttpLoggingInterceptor; import okio.Buffer; -import properties.PropertyUtilities; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; @@ -31,8 +25,8 @@ import java.util.concurrent.TimeUnit; import static java.nio.charset.StandardCharsets.UTF_8; -import static utils.MappingUtilities.Json.getJsonString; -import static utils.MappingUtilities.Json.mapper; +import static utils.mapping.MappingUtilities.Json.getJsonString; +import static utils.mapping.MappingUtilities.Json.mapper; /** * The ServiceGenerator class is responsible for generating Retrofit Service based on the provided service class diff --git a/src/main/java/utils/FileUtilities.java b/src/main/java/utils/FileUtilities.java index 044204a..3430447 100644 --- a/src/main/java/utils/FileUtilities.java +++ b/src/main/java/utils/FileUtilities.java @@ -19,6 +19,8 @@ import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import org.junit.Assert; +import utils.mapping.MappingUtilities; + import java.io.*; import java.net.URL; import java.nio.file.Files; diff --git a/src/main/java/utils/MappingUtilities.java b/src/main/java/utils/mapping/MappingUtilities.java similarity index 95% rename from src/main/java/utils/MappingUtilities.java rename to src/main/java/utils/mapping/MappingUtilities.java index a74dfe4..7d90e83 100644 --- a/src/main/java/utils/MappingUtilities.java +++ b/src/main/java/utils/mapping/MappingUtilities.java @@ -1,13 +1,12 @@ -package utils; +package utils.mapping; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.module.jsonSchema.JsonSchema; import com.fasterxml.jackson.module.jsonSchema.JsonSchemaGenerator; @@ -133,12 +132,11 @@ public static JsonNode getJsonNodeFor(Class clazz) { */ public static JsonSchema generateSchema(Class clazz) { try { - JsonSchemaGenerator schemaGen = new JsonSchemaGenerator(new ObjectMapper()); + ReferenceFreeSchemaFactoryWrapper schemaFactoryWrapper = new ReferenceFreeSchemaFactoryWrapper(); + JsonSchemaGenerator schemaGen = new JsonSchemaGenerator(mapper, schemaFactoryWrapper); return setIdNull(schemaGen.generateSchema(clazz)); - } catch (Exception e) { - e.printStackTrace(); - return null; } + catch (JsonMappingException mappingException) {throw new RuntimeException(mappingException);} } } } diff --git a/src/main/java/utils/mapping/ReferenceFreeSchemaFactoryWrapper.java b/src/main/java/utils/mapping/ReferenceFreeSchemaFactoryWrapper.java new file mode 100644 index 0000000..bd40ab8 --- /dev/null +++ b/src/main/java/utils/mapping/ReferenceFreeSchemaFactoryWrapper.java @@ -0,0 +1,19 @@ +package utils.mapping; + +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.module.jsonSchema.factories.SchemaFactoryWrapper; +import com.fasterxml.jackson.module.jsonSchema.factories.VisitorContext; + +public class ReferenceFreeSchemaFactoryWrapper extends SchemaFactoryWrapper { + public ReferenceFreeSchemaFactoryWrapper() { + super(); + this.setVisitorContext(new CustomVisitorContext()); + } + + private static class CustomVisitorContext extends VisitorContext { + @Override + public String addSeenSchemaUri(JavaType seenSchema) { + return null; // Return null prevents adding $ref URIs + } + } +} \ No newline at end of file diff --git a/src/main/java/utils/reflection/ReflectionUtilities.java b/src/main/java/utils/reflection/ReflectionUtilities.java index 1c5c48b..1d85f84 100644 --- a/src/main/java/utils/reflection/ReflectionUtilities.java +++ b/src/main/java/utils/reflection/ReflectionUtilities.java @@ -7,7 +7,7 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import org.junit.Assert; -import utils.MappingUtilities; +import utils.mapping.MappingUtilities; import utils.Printer; import utils.StringUtilities; @@ -626,4 +626,19 @@ public static String getPreviousMethodName() { StackTraceElement[] stackTrace = new Throwable().getStackTrace(); return stackTrace.length > 2 ? stackTrace[2].getMethodName() : null; } + + /** + * Retrieves the names of all declared fields in the given class, excluding synthetic fields such as "this$0". + * + * @param clazz the class whose field names are to be retrieved + * @return an array of field names declared in the specified class + * @throws NullPointerException if {@code clazz} is null + */ + public static String[] getAllFieldNames(Class clazz) { + return Arrays.stream(clazz.getDeclaredFields()) + .map(Field::getName) + .filter(name -> !name.equals("this$0")) // Excludes synthetic fields like inner class references + .toArray(String[]::new); + } + } diff --git a/src/test/java/AppTest.java b/src/test/java/AppTest.java index 90750fd..8592adc 100644 --- a/src/test/java/AppTest.java +++ b/src/test/java/AppTest.java @@ -13,6 +13,7 @@ import utils.*; import utils.arrays.ArrayUtilities; import utils.email.EmailUtilities; +import utils.mapping.MappingUtilities; import utils.reflection.ReflectionUtilities; import java.io.IOException; import java.net.URL; @@ -23,7 +24,7 @@ import static utils.arrays.ArrayUtilities.*; import static utils.email.EmailUtilities.Inbox.EmailField.CONTENT; import static utils.email.EmailUtilities.Inbox.EmailField.SUBJECT; -import static utils.MappingUtilities.Json.*; +import static utils.mapping.MappingUtilities.Json.*; import static utils.StringUtilities.contextCheck; public class AppTest {