This is an automated email from the ASF dual-hosted git repository.
gitgabrio pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/main by this push:
new 1143117f35 [incubator-kie-issues#2003] DMN Engine: Some DMNs work
differently with different values on the "xmlns" and "namespace" (#6379)
1143117f35 is described below
commit 1143117f357b1953e3ccb1d8f9c1d8dda549d380
Author: Gabriele Cardosi <[email protected]>
AuthorDate: Mon Jun 23 09:48:29 2025 +0200
[incubator-kie-issues#2003] DMN Engine: Some DMNs work differently with
different values on the "xmlns" and "namespace" (#6379)
* [incubator-kie-issues#2003] WIP - refactoring - tests working.
* [incubator-kie-issues#2003] Cleanup. Verified TCK - no regression
* [incubator-kie-issues#2003] Cleanup leftover comments
---------
Co-authored-by: Gabriele-Cardosi <[email protected]>
---
.../compiler/ItemDefinitionDependenciesSorter.java | 3 +--
.../java/org/kie/dmn/model/api/Definitions.java | 21 +++++++++++++++--
.../java/org/kie/dmn/model/v1_1/TDefinitions.java | 26 +---------------------
.../java/org/kie/dmn/model/v1_2/TDefinitions.java | 22 +-----------------
.../java/org/kie/dmn/model/v1_3/TDefinitions.java | 22 +-----------------
.../java/org/kie/dmn/model/v1_4/TDefinitions.java | 21 +----------------
.../java/org/kie/dmn/model/v1_5/TDefinitions.java | 21 +----------------
7 files changed, 25 insertions(+), 111 deletions(-)
diff --git
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/ItemDefinitionDependenciesSorter.java
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/ItemDefinitionDependenciesSorter.java
index 3d13c5777f..e98e45f6ac 100644
---
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/ItemDefinitionDependenciesSorter.java
+++
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/ItemDefinitionDependenciesSorter.java
@@ -1,4 +1,4 @@
-/**
+/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -59,7 +59,6 @@ public class ItemDefinitionDependenciesSorter {
*/
private void dfVisit(ItemDefinition node, List<ItemDefinition> allNodes,
Collection<ItemDefinition> visited, List<ItemDefinition> dfv) {
visited.add(node);
-
List<ItemDefinition> neighbours = allNodes.stream()
.filter(n ->
!n.getName().equals(node.getName())) // filter out `node`
.filter(n ->
recurseFind(node, new QName(modelNamespace, n.getName()))) // I pick from
allNodes, those referenced by this `node`. Only neighbours of `node`, because N
is referenced by NODE.
diff --git
a/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/api/Definitions.java
b/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/api/Definitions.java
index 6da01eb9e6..4005f8f9eb 100644
--- a/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/api/Definitions.java
+++ b/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/api/Definitions.java
@@ -1,4 +1,4 @@
-/**
+/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -21,6 +21,7 @@ package org.kie.dmn.model.api;
import java.util.List;
import javax.xml.XMLConstants;
+import javax.xml.namespace.QName;
import org.kie.dmn.model.api.dmndi.DMNDI;
@@ -49,7 +50,11 @@ public interface Definitions extends NamedElement {
* Utility method to ensure any QName references contained inside the
ItemDefinitions have the namespace correctly valorized, also accordingly to the
prefix.
* (Even in the case of {@link XMLConstants.DEFAULT_NS_PREFIX} it will
take the DMN model namespace for the no-prefix accordingly.)
*/
- void normalize();
+ default void normalize() {
+ for (ItemDefinition itemDefinition : this.getItemDefinition()) {
+ processQNameURIs(itemDefinition, this.getNamespace());
+ }
+ }
String getExpressionLanguage();
@@ -81,4 +86,16 @@ public interface Definitions extends NamedElement {
*/
void setDMNDI(DMNDI value);
+ private static void processQNameURIs(ItemDefinition iDef, String
defaultNamespace) {
+ final QName typeRef = iDef.getTypeRef();
+ if (typeRef != null &&
XMLConstants.NULL_NS_URI.equals(typeRef.getNamespaceURI())) {
+ String prefix = typeRef.getPrefix();
+ final String namespace = prefix != null && !prefix.isEmpty() ?
iDef.getNamespaceURI(prefix) : defaultNamespace;
+ iDef.setTypeRef(new QName(namespace, typeRef.getLocalPart(),
typeRef.getPrefix()));
+ }
+ for (ItemDefinition comp : iDef.getItemComponent()) {
+ processQNameURIs(comp, defaultNamespace);
+ }
+ }
+
}
diff --git
a/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_1/TDefinitions.java
b/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_1/TDefinitions.java
index 9822828835..44bc880189 100644
---
a/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_1/TDefinitions.java
+++
b/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_1/TDefinitions.java
@@ -1,4 +1,4 @@
-/**
+/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -22,9 +22,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
-import javax.xml.XMLConstants;
-import javax.xml.namespace.QName;
-
import org.kie.dmn.model.api.Artifact;
import org.kie.dmn.model.api.BusinessContextElement;
import org.kie.dmn.model.api.DRGElement;
@@ -197,27 +194,6 @@ public class TDefinitions extends TNamedElement implements
Definitions {
'}';
}
- /**
- * Utility method to ensure any QName references contained inside the
ItemDefinitions have the namespace correctly valorized, also accordingly to the
prefix.
- * (Even in the case of {@link XMLConstants.DEFAULT_NS_PREFIX} it will
take the DMN model namespace for the no-prefix accordingly.)
- */
- public void normalize() {
- for (ItemDefinition itemDefinition : this.getItemDefinition()) {
- processQNameURIs(itemDefinition);
- }
- }
-
- private static void processQNameURIs(ItemDefinition iDef) {
- final QName typeRef = iDef.getTypeRef();
- if (typeRef != null &&
XMLConstants.NULL_NS_URI.equals(typeRef.getNamespaceURI())) {
- final String namespace = iDef.getNamespaceURI(typeRef.getPrefix());
- iDef.setTypeRef(new QName(namespace, typeRef.getLocalPart(),
typeRef.getPrefix()));
- }
- for (ItemDefinition comp : iDef.getItemComponent()) {
- processQNameURIs(comp);
- }
- }
-
@Override
public DMNDI getDMNDI() {
throw new UnsupportedOperationException("not on 1.1");
diff --git
a/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_2/TDefinitions.java
b/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_2/TDefinitions.java
index b37704bbc4..0a790d1100 100644
---
a/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_2/TDefinitions.java
+++
b/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_2/TDefinitions.java
@@ -1,4 +1,4 @@
-/**
+/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -22,9 +22,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
-import javax.xml.XMLConstants;
-import javax.xml.namespace.QName;
-
import org.kie.dmn.model.api.Artifact;
import org.kie.dmn.model.api.BusinessContextElement;
import org.kie.dmn.model.api.DRGElement;
@@ -178,21 +175,4 @@ public class TDefinitions extends TNamedElement implements
Definitions {
public List<DecisionService> getDecisionService() {
return
drgElement.stream().filter(DecisionService.class::isInstance).map(DecisionService.class::cast).collect(Collectors.toList());
}
-
- public void normalize() {
- for (ItemDefinition itemDefinition : this.getItemDefinition()) {
- processQNameURIs(itemDefinition);
- }
- }
-
- private static void processQNameURIs(ItemDefinition iDef) {
- final QName typeRef = iDef.getTypeRef();
- if (typeRef != null &&
XMLConstants.NULL_NS_URI.equals(typeRef.getNamespaceURI())) {
- final String namespace = iDef.getNamespaceURI(typeRef.getPrefix());
- iDef.setTypeRef(new QName(namespace, typeRef.getLocalPart(),
typeRef.getPrefix()));
- }
- for (ItemDefinition comp : iDef.getItemComponent()) {
- processQNameURIs(comp);
- }
- }
}
diff --git
a/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_3/TDefinitions.java
b/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_3/TDefinitions.java
index a618e8cf61..1bbfb40d1d 100644
---
a/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_3/TDefinitions.java
+++
b/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_3/TDefinitions.java
@@ -1,4 +1,4 @@
-/**
+/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -22,9 +22,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
-import javax.xml.XMLConstants;
-import javax.xml.namespace.QName;
-
import org.kie.dmn.model.api.Artifact;
import org.kie.dmn.model.api.BusinessContextElement;
import org.kie.dmn.model.api.DRGElement;
@@ -178,21 +175,4 @@ public class TDefinitions extends TNamedElement implements
Definitions {
public List<DecisionService> getDecisionService() {
return
drgElement.stream().filter(DecisionService.class::isInstance).map(DecisionService.class::cast).collect(Collectors.toList());
}
-
- public void normalize() {
- for (ItemDefinition itemDefinition : this.getItemDefinition()) {
- processQNameURIs(itemDefinition);
- }
- }
-
- private static void processQNameURIs(ItemDefinition iDef) {
- final QName typeRef = iDef.getTypeRef();
- if (typeRef != null &&
XMLConstants.NULL_NS_URI.equals(typeRef.getNamespaceURI())) {
- final String namespace = iDef.getNamespaceURI(typeRef.getPrefix());
- iDef.setTypeRef(new QName(namespace, typeRef.getLocalPart(),
typeRef.getPrefix()));
- }
- for (ItemDefinition comp : iDef.getItemComponent()) {
- processQNameURIs(comp);
- }
- }
}
diff --git
a/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_4/TDefinitions.java
b/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_4/TDefinitions.java
index 1b35c1c00e..4173379c8e 100644
---
a/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_4/TDefinitions.java
+++
b/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_4/TDefinitions.java
@@ -1,4 +1,4 @@
-/**
+/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -22,9 +22,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
-import javax.xml.XMLConstants;
-import javax.xml.namespace.QName;
-
import org.kie.dmn.model.api.Artifact;
import org.kie.dmn.model.api.BusinessContextElement;
import org.kie.dmn.model.api.DRGElement;
@@ -179,20 +176,4 @@ public class TDefinitions extends TNamedElement implements
Definitions {
return
drgElement.stream().filter(DecisionService.class::isInstance).map(DecisionService.class::cast).collect(Collectors.toList());
}
- public void normalize() {
- for (ItemDefinition itemDefinition : this.getItemDefinition()) {
- processQNameURIs(itemDefinition);
- }
- }
-
- private static void processQNameURIs(ItemDefinition iDef) {
- final QName typeRef = iDef.getTypeRef();
- if (typeRef != null &&
XMLConstants.NULL_NS_URI.equals(typeRef.getNamespaceURI())) {
- final String namespace = iDef.getNamespaceURI(typeRef.getPrefix());
- iDef.setTypeRef(new QName(namespace, typeRef.getLocalPart(),
typeRef.getPrefix()));
- }
- for (ItemDefinition comp : iDef.getItemComponent()) {
- processQNameURIs(comp);
- }
- }
}
diff --git
a/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_5/TDefinitions.java
b/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_5/TDefinitions.java
index ea108d1b44..4f1920f139 100644
---
a/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_5/TDefinitions.java
+++
b/kie-dmn/kie-dmn-model/src/main/java/org/kie/dmn/model/v1_5/TDefinitions.java
@@ -1,4 +1,4 @@
-/**
+/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -28,8 +28,6 @@ import org.kie.dmn.model.api.Import;
import org.kie.dmn.model.api.ItemDefinition;
import org.kie.dmn.model.api.dmndi.DMNDI;
-import javax.xml.XMLConstants;
-import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -176,21 +174,4 @@ public class TDefinitions extends TNamedElement implements
Definitions {
public List<DecisionService> getDecisionService() {
return
drgElement.stream().filter(DecisionService.class::isInstance).map(DecisionService.class::cast).collect(Collectors.toList());
}
-
- public void normalize() {
- for (ItemDefinition itemDefinition : this.getItemDefinition()) {
- processQNameURIs(itemDefinition);
- }
- }
-
- private static void processQNameURIs(ItemDefinition iDef) {
- final QName typeRef = iDef.getTypeRef();
- if (typeRef != null &&
XMLConstants.NULL_NS_URI.equals(typeRef.getNamespaceURI())) {
- final String namespace = iDef.getNamespaceURI(typeRef.getPrefix());
- iDef.setTypeRef(new QName(namespace, typeRef.getLocalPart(),
typeRef.getPrefix()));
- }
- for (ItemDefinition comp : iDef.getItemComponent()) {
- processQNameURIs(comp);
- }
- }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]