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);
}
}
}