This is an automated email from the ASF dual-hosted git repository.

veithen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ws-axiom.git


The following commit(s) were added to refs/heads/master by this push:
     new 7c4d5efce Decouple dom-mixins from om-mixins
7c4d5efce is described below

commit 7c4d5efce6aeabe86158eba440a24857acbfca1f
Author: Copilot <[email protected]>
AuthorDate: Sat May 23 10:51:52 2026 +0100

    Decouple dom-mixins from om-mixins
    
    Co-authored-by: Andreas Veithen-Knowles <[email protected]>
---
 mixins/dom-mixins/pom.xml                          |  5 --
 .../org/apache/axiom/dom/DOMNSAwareElement.java    |  3 +-
 .../dom/impl/mixin/DOMNSAwareElementMixin.java     | 54 +++++++++++++++++-----
 3 files changed, 43 insertions(+), 19 deletions(-)

diff --git a/mixins/dom-mixins/pom.xml b/mixins/dom-mixins/pom.xml
index 758971aa7..048a77ff1 100644
--- a/mixins/dom-mixins/pom.xml
+++ b/mixins/dom-mixins/pom.xml
@@ -37,11 +37,6 @@
             <artifactId>core-mixins</artifactId>
             <version>${project.version}</version>
         </dependency>
-        <dependency><!-- TODO: decouple this from the Axiom API -->
-            <groupId>${project.groupId}</groupId>
-            <artifactId>om-mixins</artifactId>
-            <version>${project.version}</version>
-        </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>xml-utils</artifactId>
diff --git 
a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/DOMNSAwareElement.java 
b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/DOMNSAwareElement.java
index f0b7a3d8b..34467d449 100644
--- 
a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/DOMNSAwareElement.java
+++ 
b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/DOMNSAwareElement.java
@@ -19,6 +19,5 @@
 package org.apache.axiom.dom;
 
 import org.apache.axiom.core.CoreNSAwareElement;
-import org.apache.axiom.om.impl.intf.AxiomElement;
 
-public interface DOMNSAwareElement extends DOMElement, DOMNSAwareNamedNode, 
CoreNSAwareElement, AxiomElement {}
+public interface DOMNSAwareElement extends DOMElement, DOMNSAwareNamedNode, 
CoreNSAwareElement {}
diff --git 
a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNSAwareElementMixin.java
 
b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNSAwareElementMixin.java
index 4c8db9dd9..ae4d8f604 100644
--- 
a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNSAwareElementMixin.java
+++ 
b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNSAwareElementMixin.java
@@ -18,28 +18,58 @@
  */
 package org.apache.axiom.dom.impl.mixin;
 
+import org.apache.axiom.core.CoreAttribute;
+import org.apache.axiom.core.CoreElement;
+import org.apache.axiom.core.CoreModelException;
+import org.apache.axiom.core.CoreNamespaceDeclaration;
 import org.apache.axiom.dom.DOMConfigurationImpl;
+import org.apache.axiom.dom.DOMExceptionUtil;
 import org.apache.axiom.dom.DOMNSAwareElement;
-import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.dom.DOMSemantics;
 import org.apache.axiom.weaver.annotation.Mixin;
 
 @Mixin
 public abstract class DOMNSAwareElementMixin implements DOMNSAwareElement {
     @Override
     public final void normalize(DOMConfigurationImpl config) {
-        // TODO: this should not rely on the Axiom API
         if (config.isEnabled(DOMConfigurationImpl.NAMESPACES)) {
-            OMNamespace namespace = getNamespace();
-            if (namespace == null) {
-                if (getDefaultNamespace() != null) {
-                    declareDefaultNamespace("");
-                }
-            } else {
-                OMNamespace namespaceForPrefix = 
findNamespaceURI(namespace.getPrefix());
-                if (namespaceForPrefix == null
-                        || 
!namespaceForPrefix.getNamespaceURI().equals(namespace.getNamespaceURI())) {
-                    declareNamespace(namespace);
+            try {
+                String namespaceURI = coreGetNamespaceURI();
+                if (namespaceURI.isEmpty()) {
+                    // Walk up from this element looking for the first 
explicit default namespace
+                    // declaration. If it maps to a non-empty URI, add 
xmlns="" to override it.
+                    CoreElement current = this;
+                    outer:
+                    while (current != null) {
+                        for (CoreAttribute a = current.coreGetFirstAttribute();
+                                a != null;
+                                a = a.coreGetNextAttribute()) {
+                            if (a instanceof CoreNamespaceDeclaration decl
+                                    && decl.coreGetDeclaredPrefix().isEmpty()) 
{
+                                if 
(!decl.coreGetCharacterData().toString().isEmpty()) {
+                                    
coreSetAttribute(DOMSemantics.NAMESPACE_DECLARATION_MATCHER, null, "", null, 
"");
+                                }
+                                break outer;
+                            }
+                        }
+                        current = current.coreGetParentElement();
+                    }
+                } else {
+                    // Check only this element's own explicit namespace 
declarations.
+                    String prefix = coreGetPrefix();
+                    boolean declared = false;
+                    for (CoreAttribute a = coreGetFirstAttribute(); a != null; 
a = a.coreGetNextAttribute()) {
+                        if (a instanceof CoreNamespaceDeclaration decl && 
prefix.equals(decl.coreGetDeclaredPrefix())) {
+                            declared = 
decl.coreGetCharacterData().toString().equals(namespaceURI);
+                            break;
+                        }
+                    }
+                    if (!declared) {
+                        
coreSetAttribute(DOMSemantics.NAMESPACE_DECLARATION_MATCHER, null, prefix, 
null, namespaceURI);
+                    }
                 }
+            } catch (CoreModelException ex) {
+                throw DOMExceptionUtil.toUncheckedException(ex);
             }
         }
     }

Reply via email to