From 098d29a2c944b20a2da5930a9f2c39097b6fa8a2 Mon Sep 17 00:00:00 2001 From: Preston Cabe Date: Thu, 3 Sep 2026 19:35:27 -0400 Subject: [PATCH 1/4] Suppress known Kogito split package warning --- library-api/src/main/resources/application.properties | 3 +++ 1 file changed, 3 insertions(+) diff --git a/library-api/src/main/resources/application.properties b/library-api/src/main/resources/application.properties index e0dc2555..4669774a 100644 --- a/library-api/src/main/resources/application.properties +++ b/library-api/src/main/resources/application.properties @@ -12,6 +12,9 @@ quarkus.devservices.enabled=false quarkus.test.continuous-testing=enabled +# Kogito 10.2 intentionally defines decision API types across kogito-api and kogito-dmn. +quarkus.arc.ignored-split-packages=org.kie.kogito.decision + # Read by Kogito code generation (not by Quarkus runtime configuration). kogito.generate.rest.decisions=false From ea4f56c6f0e6905a2e2580f987a206348e69399c Mon Sep 17 00:00:00 2001 From: Preston Cabe Date: Thu, 3 Sep 2026 19:59:53 -0400 Subject: [PATCH 2/4] Replace deprecated Jackson field iteration --- .../org/codeforphilly/bdt/api/DMNSchemaResolver.java | 4 ++-- .../bdt/api/DynamicDMNOpenAPIFilter.java | 12 ++++++------ .../bdt/api/SituationTypeValidationTest.java | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/library-api/src/main/java/org/codeforphilly/bdt/api/DMNSchemaResolver.java b/library-api/src/main/java/org/codeforphilly/bdt/api/DMNSchemaResolver.java index 7286afb1..b12acde4 100644 --- a/library-api/src/main/java/org/codeforphilly/bdt/api/DMNSchemaResolver.java +++ b/library-api/src/main/java/org/codeforphilly/bdt/api/DMNSchemaResolver.java @@ -35,7 +35,7 @@ public DMNSchemaResolver(ModelRegistry modelRegistry) { this.rootNode = loadedRoot != null ? loadedRoot : generateDmnDefinitions(modelRegistry); if (rootNode != null && rootNode.has("definitions")) { JsonNode definitions = rootNode.get("definitions"); - definitions.fields().forEachRemaining(entry -> { + definitions.properties().forEach(entry -> { schemas.put(entry.getKey(), entry.getValue()); }); LOG.info("Loaded " + schemas.size() + " DMN type schemas"); @@ -174,7 +174,7 @@ Map generateExampleFromSchema(JsonNode schema) { } JsonNode properties = schema.get("properties"); - properties.fields().forEachRemaining(entry -> { + properties.properties().forEach(entry -> { String fieldName = entry.getKey(); JsonNode fieldSchema = entry.getValue(); example.put(fieldName, generateFieldExample(fieldName, fieldSchema)); diff --git a/library-api/src/main/java/org/codeforphilly/bdt/api/DynamicDMNOpenAPIFilter.java b/library-api/src/main/java/org/codeforphilly/bdt/api/DynamicDMNOpenAPIFilter.java index 2797d66e..05ca9ce3 100644 --- a/library-api/src/main/java/org/codeforphilly/bdt/api/DynamicDMNOpenAPIFilter.java +++ b/library-api/src/main/java/org/codeforphilly/bdt/api/DynamicDMNOpenAPIFilter.java @@ -169,7 +169,7 @@ private void collectReferencesFromNode(com.fasterxml.jackson.databind.JsonNode n } // Recurse into all fields - node.fields().forEachRemaining(entry -> { + node.properties().forEach(entry -> { collectReferencesFromNode(entry.getValue(), collectedSchemas); }); } else if (node.isArray()) { @@ -215,7 +215,7 @@ private Schema convertJsonNodeToSchema(com.fasterxml.jackson.databind.JsonNode n // Handle properties if (node.has("properties")) { com.fasterxml.jackson.databind.JsonNode properties = node.get("properties"); - properties.fields().forEachRemaining(entry -> { + properties.properties().forEach(entry -> { Schema propSchema = convertJsonNodeToSchema(entry.getValue()); schema.addProperty(entry.getKey(), propSchema); }); @@ -418,7 +418,7 @@ private Schema createDMNContextSchema(ModelInfo model, String inputRef, String o com.fasterxml.jackson.databind.JsonNode inputSchemaNode = getSchemaByRef(inputRef); if (inputSchemaNode != null && inputSchemaNode.has("properties")) { com.fasterxml.jackson.databind.JsonNode inputProps = inputSchemaNode.get("properties"); - inputProps.fields().forEachRemaining(entry -> { + inputProps.properties().forEach(entry -> { Schema propSchema = convertJsonNodeToSchema(entry.getValue()); contextSchema.addProperty(entry.getKey(), propSchema); }); @@ -434,7 +434,7 @@ private Schema createDMNContextSchema(ModelInfo model, String inputRef, String o // Multiple outputs: add each property directly to context // This handles Decision Services with multiple output decisions (e.g., PhlHomesteadExemption) com.fasterxml.jackson.databind.JsonNode outputProps = outputSchemaNode.get("properties"); - outputProps.fields().forEachRemaining(entry -> { + outputProps.properties().forEach(entry -> { Schema propSchema = convertJsonNodeToSchema(entry.getValue()); contextSchema.addProperty(entry.getKey(), propSchema); }); @@ -578,7 +578,7 @@ private Map generateContextExample(String inputRef, String outpu if (outputSchemaNode.has("properties")) { // Multiple outputs: generate examples for each property directly com.fasterxml.jackson.databind.JsonNode outputProps = outputSchemaNode.get("properties"); - outputProps.fields().forEachRemaining(entry -> { + outputProps.properties().forEach(entry -> { String propName = entry.getKey(); com.fasterxml.jackson.databind.JsonNode propNode = entry.getValue(); @@ -653,7 +653,7 @@ private Object generateExampleForProperty(com.fasterxml.jackson.databind.JsonNod Map objectExample = new java.util.LinkedHashMap<>(); if (propNode.has("properties")) { com.fasterxml.jackson.databind.JsonNode properties = propNode.get("properties"); - properties.fields().forEachRemaining(entry -> { + properties.properties().forEach(entry -> { Object value = generateExampleForProperty(entry.getValue()); if (value != null) { objectExample.put(entry.getKey(), value); diff --git a/library-api/src/test/java/org/codeforphilly/bdt/api/SituationTypeValidationTest.java b/library-api/src/test/java/org/codeforphilly/bdt/api/SituationTypeValidationTest.java index 4a84b133..40b02e18 100644 --- a/library-api/src/test/java/org/codeforphilly/bdt/api/SituationTypeValidationTest.java +++ b/library-api/src/test/java/org/codeforphilly/bdt/api/SituationTypeValidationTest.java @@ -179,7 +179,7 @@ private void validateLocalTSituationType(ModelInfo model, Document doc) { assertNotNull(localSchema, "Local schema should exist for " + model.getPath()); // Check that local schema has properties (not empty/Any-only) - if (!localSchema.has("properties") || !localSchema.get("properties").fields().hasNext()) { + if (!localSchema.has("properties") || localSchema.get("properties").properties().isEmpty()) { fail(model.getPath() + ": local tSituation must define at least one field from BDT.tSituation. " + "It currently has no fields (may just be typeRef='Any')."); } @@ -277,7 +277,7 @@ private void validateSchemaSubset(JsonNode bdtSchema, JsonNode localSchema, Stri JsonNode bdtProps = resolvedBdt.get("properties"); // Check each local property - localProps.fields().forEachRemaining(entry -> { + localProps.properties().forEach(entry -> { String fieldName = entry.getKey(); String newPath = currentPath.isEmpty() ? fieldName : currentPath + "." + fieldName; From abb6d7b2b9920a9755f5583de6cffbcfd843704c Mon Sep 17 00:00:00 2001 From: Preston Cabe Date: Thu, 3 Sep 2026 20:00:00 -0400 Subject: [PATCH 3/4] Silence upstream Drools eval warning --- library-api/src/main/resources/application.properties | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/library-api/src/main/resources/application.properties b/library-api/src/main/resources/application.properties index 4669774a..026fdf6d 100644 --- a/library-api/src/main/resources/application.properties +++ b/library-api/src/main/resources/application.properties @@ -15,6 +15,10 @@ quarkus.test.continuous-testing=enabled # Kogito 10.2 intentionally defines decision API types across kogito-api and kogito-dmn. quarkus.arc.ignored-split-packages=org.kie.kogito.decision +# Kogito's DMN validator compiles an upstream eval rule during augmentation. Drools logs a +# performance hint for that library-owned rule even though application DMN models cannot change it. +quarkus.log.category."org.drools.base.rule.EvalCondition".level=ERROR + # Read by Kogito code generation (not by Quarkus runtime configuration). kogito.generate.rest.decisions=false From f176a077e08dc920a66cd49f3181f9af9854d5d3 Mon Sep 17 00:00:00 2001 From: Preston Cabe Date: Thu, 3 Sep 2026 20:24:16 -0400 Subject: [PATCH 4/4] Silence Drools eval warning in the Maven build path too The existing quarkus.log.category setting only applies where Quarkus configures the log manager: dev mode and `mvn test`. The Maven-side build (`mvn package`, and `quarkus build --no-tests` as used in CI) runs code generation through Maven's slf4j-simple logger, which that property never reaches, so the upstream eval hint still printed there. Add library-api/.mvn/maven.config to set the equivalent slf4j-simple level for `mvn` invocations from library-api, and note in application.properties which path each setting covers. Verified warning-free with `mvn test` (14/14 pass), `mvn package`, and `devbox run build-library-api-ci`. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01X5Z8znjHRyQhTJGb3y2WfU --- library-api/.mvn/maven.config | 1 + library-api/src/main/resources/application.properties | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 library-api/.mvn/maven.config diff --git a/library-api/.mvn/maven.config b/library-api/.mvn/maven.config new file mode 100644 index 00000000..4d0c921a --- /dev/null +++ b/library-api/.mvn/maven.config @@ -0,0 +1 @@ +-Dorg.slf4j.simpleLogger.log.org.drools.base.rule.EvalCondition=error diff --git a/library-api/src/main/resources/application.properties b/library-api/src/main/resources/application.properties index 026fdf6d..e3fc32e5 100644 --- a/library-api/src/main/resources/application.properties +++ b/library-api/src/main/resources/application.properties @@ -15,8 +15,10 @@ quarkus.test.continuous-testing=enabled # Kogito 10.2 intentionally defines decision API types across kogito-api and kogito-dmn. quarkus.arc.ignored-split-packages=org.kie.kogito.decision -# Kogito's DMN validator compiles an upstream eval rule during augmentation. Drools logs a +# Kogito's DMN validator compiles an upstream eval rule during code generation. Drools logs a # performance hint for that library-owned rule even though application DMN models cannot change it. +# Covers dev mode and `mvn test`, where Quarkus configures the log manager; the Maven-side build +# (`mvn package`, `quarkus build`) logs through slf4j-simple instead and is handled by .mvn/maven.config. quarkus.log.category."org.drools.base.rule.EvalCondition".level=ERROR # Read by Kogito code generation (not by Quarkus runtime configuration).