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/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/main/resources/application.properties b/library-api/src/main/resources/application.properties index e0dc2555..e3fc32e5 100644 --- a/library-api/src/main/resources/application.properties +++ b/library-api/src/main/resources/application.properties @@ -12,6 +12,15 @@ 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 + +# 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). kogito.generate.rest.decisions=false 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;