You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2021/11/29 11:50:29 UTC

[ws-axiom] branch master updated: Implement OMMetaFactory interface directly on the AxiomNodeFactory instead of using a separate singleton.

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 1b7d8e8  Implement OMMetaFactory interface directly on the AxiomNodeFactory instead of using a separate singleton.
1b7d8e8 is described below

commit 1b7d8e88ea5d348d1704a1b8c264f265a6025598
Author: Andreas Veithen <an...@gmail.com>
AuthorDate: Mon Nov 29 11:50:19 2021 +0000

    Implement OMMetaFactory interface directly on the AxiomNodeFactory
    instead of using a separate singleton.
---
 implementations/axiom-dom/pom.xml                  | 17 ++++---
 .../dom/factory/DOOMDocumentBuilderFactory.java    |  4 +-
 .../axiom/om/impl/dom/factory/Factories.java       |  2 +-
 .../om/impl/dom/factory/OMDOMMetaFactory.java      | 58 ----------------------
 .../impl/dom/factory/OMDOMMetaFactoryLoader.java   | 11 ++--
 .../om/impl/dom/intf/factory/DOOMNodeFactory.java  | 16 +++---
 ...OOMNodeMixin.java => DOOMNodeFactoryMixin.java} | 20 +++-----
 .../axiom/om/impl/dom/mixin/DOOMNodeMixin.java     |  6 ---
 .../axiom/om/impl/dom/mixin/package-info.java      |  1 +
 .../org/apache/axiom/om/impl/dom/DOMTests.java     |  4 +-
 .../axiom/om/impl/dom/OMDOMImplementationTest.java |  4 +-
 .../axiom/om/impl/dom/OMImplementationTest.java    |  4 +-
 .../axiom/om/impl/dom/factory/DOMFeatureTest.java  |  3 +-
 .../soap/impl/dom/SOAPDOMImplementationTest.java   |  8 +--
 .../soap/impl/dom/SOAPImplementationTest.java      |  8 +--
 implementations/axiom-impl/pom.xml                 |  3 +-
 .../impl/llom/factory/OMLinkedListMetaFactory.java | 44 ----------------
 .../factory/OMLinkedListMetaFactoryLoader.java     |  7 ++-
 .../impl/llom/mixin/AxiomInformationItemMixin.java |  7 ---
 .../axiom/om/impl/llom/OMImplementationTest.java   |  4 +-
 .../soap/impl/llom/SOAPImplementationTest.java     |  4 +-
 .../om/impl/common/factory/OMFactoryImpl.java      |  6 +--
 .../impl/common/factory/meta/BuilderFactory.java   | 12 ++---
 .../om/impl/common/factory/meta/BuilderSpec.java   | 16 +++---
 .../axiom/om/impl/intf/AxiomInformationItem.java   |  1 +
 .../om/impl/intf/factory/AxiomNodeFactory.java     |  3 +-
 .../AxiomNodeFactoryMixin.java}                    | 47 ++++++++----------
 .../apache/axiom/om/impl/mixin/package-info.java   |  1 +
 .../axiom/soap/impl/factory/SOAP11Factory.java     |  5 +-
 .../axiom/soap/impl/factory/SOAP12Factory.java     |  5 +-
 .../axiom/soap/impl/factory/SOAPFactoryImpl.java   |  5 +-
 31 files changed, 112 insertions(+), 224 deletions(-)

diff --git a/implementations/axiom-dom/pom.xml b/implementations/axiom-dom/pom.xml
index 529836c..8502aea 100644
--- a/implementations/axiom-dom/pom.xml
+++ b/implementations/axiom-dom/pom.xml
@@ -131,7 +131,7 @@
                                 <interface>org.apache.axiom.om.impl.dom.intf.DOOMProcessingInstruction</interface>
                                 <interface>org.apache.axiom.om.impl.dom.intf.DOOMSourcedElement</interface>
                                 <interface>org.apache.axiom.om.impl.dom.intf.DOOMText</interface>
-                                <interface>org.apache.axiom.om.impl.intf.factory.AxiomNodeFactory</interface>
+                                <interface>org.apache.axiom.om.impl.dom.intf.factory.DOOMNodeFactory</interface>
                                 <interface>org.apache.axiom.soap.impl.dom.intf.DOOMSOAPMessage</interface>
                                 <interface>org.apache.axiom.soap.impl.dom.intf.soap11.DOOMSOAP11Body</interface>
                                 <interface>org.apache.axiom.soap.impl.dom.intf.soap11.DOOMSOAP11Envelope</interface>
@@ -190,6 +190,10 @@
                                     <outputPackage>org.apache.axiom.om.impl.dom</outputPackage>
                                 </packageMapping>
                                 <packageMapping>
+                                    <interfacePackage>org.apache.axiom.om.impl.dom.intf.factory</interfacePackage>
+                                    <outputPackage>org.apache.axiom.om.impl.dom.factory</outputPackage>
+                                </packageMapping>
+                                <packageMapping>
                                     <interfacePackage>org.apache.axiom.soap.impl.dom.intf</interfacePackage>
                                     <outputPackage>org.apache.axiom.soap.impl.dom</outputPackage>
                                 </packageMapping>
@@ -248,12 +252,11 @@
                             <ignore>
                                 <!-- TODO: inject the reference to the singleton into mixins directly -->
                                 org.apache.axiom.om.impl.dom.CoreNodeImpl -&gt; org.apache.axiom.om.impl.dom.factory.DOOMNodeFactory,
-                                org.apache.axiom.om.impl.dom.CoreNodeImpl -&gt; org.apache.axiom.om.impl.dom.factory.OMDOMMetaFactory,
-                                org.apache.axiom.om.impl.dom.DOOMNSAwareElementImpl -&gt; org.apache.axiom.om.impl.dom.factory.AxiomNodeFactoryImpl,
-                                org.apache.axiom.om.impl.dom.CoreChildNodeImpl -&gt; org.apache.axiom.om.impl.dom.factory.AxiomNodeFactoryImpl,
-                                org.apache.axiom.om.impl.dom.AxiomCoreParentNodeImpl -&gt; org.apache.axiom.om.impl.dom.factory.AxiomNodeFactoryImpl,
-                                org.apache.axiom.om.impl.dom.DOOMNSAwareAttributeImpl -&gt; org.apache.axiom.om.impl.dom.factory.AxiomNodeFactoryImpl,
-                                org.apache.axiom.om.impl.dom.DOOMNamespaceDeclarationImpl -&gt; org.apache.axiom.om.impl.dom.factory.AxiomNodeFactoryImpl
+                                org.apache.axiom.om.impl.dom.DOOMNSAwareElementImpl -&gt; org.apache.axiom.om.impl.dom.factory.DOOMNodeFactoryImpl,
+                                org.apache.axiom.om.impl.dom.CoreChildNodeImpl -&gt; org.apache.axiom.om.impl.dom.factory.DOOMNodeFactoryImpl,
+                                org.apache.axiom.om.impl.dom.AxiomCoreParentNodeImpl -&gt; org.apache.axiom.om.impl.dom.factory.DOOMNodeFactoryImpl,
+                                org.apache.axiom.om.impl.dom.DOOMNSAwareAttributeImpl -&gt; org.apache.axiom.om.impl.dom.factory.DOOMNodeFactoryImpl,
+                                org.apache.axiom.om.impl.dom.DOOMNamespaceDeclarationImpl -&gt; org.apache.axiom.om.impl.dom.factory.DOOMNodeFactoryImpl
                             </ignore>
                         </configuration>
                     </execution>
diff --git a/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/DOOMDocumentBuilderFactory.java b/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/DOOMDocumentBuilderFactory.java
index 0fb0c63..e373846 100644
--- a/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/DOOMDocumentBuilderFactory.java
+++ b/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/DOOMDocumentBuilderFactory.java
@@ -29,11 +29,11 @@ import org.apache.axiom.om.OMFactory;
 /**
  * Document builder factory that conforms to JAXP.
  */
-final class DOOMDocumentBuilderFactory extends DocumentBuilderFactory {
+public final class DOOMDocumentBuilderFactory extends DocumentBuilderFactory {
     private final OMFactory factory;
     private Schema schema;
     
-    DOOMDocumentBuilderFactory(OMFactory factory) {
+    public DOOMDocumentBuilderFactory(OMFactory factory) {
         this.factory = factory;
     }
     
diff --git a/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/Factories.java b/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/Factories.java
index 55523b1..f3f97ec 100644
--- a/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/Factories.java
+++ b/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/Factories.java
@@ -20,7 +20,7 @@ package org.apache.axiom.om.impl.dom.factory;
 
 import org.apache.axiom.dom.DOMNodeFactory;
 
-final class Factories {
+public final class Factories {
     static final DOMNodeFactory DOM_NODE_FACTORY;
 
     static {
diff --git a/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/OMDOMMetaFactory.java b/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/OMDOMMetaFactory.java
deleted file mode 100644
index 4d9b1a2..0000000
--- a/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/OMDOMMetaFactory.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.axiom.om.impl.dom.factory;
-
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.apache.axiom.om.dom.DOMMetaFactory;
-import org.apache.axiom.om.impl.common.factory.meta.AbstractOMMetaFactory;
-import org.apache.axiom.om.impl.intf.factory.AxiomNodeFactory;
-import org.w3c.dom.DOMImplementation;
-
-/**
- * Meta factory for the DOOM implementation.
- */
-public class OMDOMMetaFactory extends AbstractOMMetaFactory implements DOMMetaFactory {
-    private static final AxiomNodeFactory NODE_FACTORY;
-
-    static {
-        try {
-            NODE_FACTORY = (AxiomNodeFactory)OMDOMMetaFactory.class.getClassLoader().loadClass("org.apache.axiom.om.impl.dom.factory.AxiomNodeFactoryImpl").getField("INSTANCE").get(null);
-        } catch (ReflectiveOperationException ex) {
-            throw new Error(ex);
-        }
-    }
-
-    public static final OMDOMMetaFactory INSTANCE = new OMDOMMetaFactory();
-    
-    private OMDOMMetaFactory() {
-        super(NODE_FACTORY);
-    }
-
-    @Override
-    public DocumentBuilderFactory newDocumentBuilderFactory() {
-        return new DOOMDocumentBuilderFactory(getOMFactory());
-    }
-
-    @Override
-    public DOMImplementation getDOMImplementation() {
-        return Factories.DOM_NODE_FACTORY;
-    }
-}
diff --git a/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/OMDOMMetaFactoryLoader.java b/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/OMDOMMetaFactoryLoader.java
index 9e05d76..2957df3 100644
--- a/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/OMDOMMetaFactoryLoader.java
+++ b/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/OMDOMMetaFactoryLoader.java
@@ -21,11 +21,16 @@ package org.apache.axiom.om.impl.dom.factory;
 import java.util.Map;
 
 import org.apache.axiom.locator.loader.OMMetaFactoryLoader;
-import org.apache.axiom.om.OMMetaFactory;
+import org.apache.axiom.om.dom.DOMMetaFactory;
+import org.apache.axiom.om.impl.dom.intf.factory.DOOMNodeFactory;
 
 public class OMDOMMetaFactoryLoader implements OMMetaFactoryLoader {
     @Override
-    public OMMetaFactory load(Map<String,Object> properties) {
-        return OMDOMMetaFactory.INSTANCE;
+    public DOMMetaFactory load(Map<String,Object> properties) {
+        try {
+            return (DOOMNodeFactory)OMDOMMetaFactoryLoader.class.getClassLoader().loadClass("org.apache.axiom.om.impl.dom.factory.DOOMNodeFactoryImpl").getField("INSTANCE").get(null);
+        } catch (ReflectiveOperationException ex) {
+            throw new Error(ex);
+        }
     }
 }
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/intf/AxiomInformationItem.java b/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/intf/factory/DOOMNodeFactory.java
similarity index 73%
copy from mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/intf/AxiomInformationItem.java
copy to implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/intf/factory/DOOMNodeFactory.java
index e992eb4..a66648a 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/intf/AxiomInformationItem.java
+++ b/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/intf/factory/DOOMNodeFactory.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.axiom.om.impl.intf;
+package org.apache.axiom.om.impl.dom.intf.factory;
 
-import org.apache.axiom.core.CoreNode;
-import org.apache.axiom.om.OMInformationItem;
-import org.apache.axiom.om.OMMetaFactory;
+import org.apache.axiom.om.dom.DOMMetaFactory;
 import org.apache.axiom.om.impl.intf.factory.AxiomNodeFactory;
 import org.apache.axiom.weaver.annotation.Inject;
+import org.apache.axiom.weaver.annotation.Singleton;
+import org.w3c.dom.DOMImplementation;
 
-public interface AxiomInformationItem extends OMInformationItem, CoreNode {
+@Singleton
+public interface DOOMNodeFactory extends AxiomNodeFactory, DOMMetaFactory {
+    @Override
     @Inject
-    AxiomNodeFactory getNodeFactory();
-
-    OMMetaFactory getMetaFactory();
+    DOMImplementation getDOMImplementation();
 }
diff --git a/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/mixin/DOOMNodeMixin.java b/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/mixin/DOOMNodeFactoryMixin.java
similarity index 64%
copy from implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/mixin/DOOMNodeMixin.java
copy to implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/mixin/DOOMNodeFactoryMixin.java
index d35d171..1902a70 100644
--- a/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/mixin/DOOMNodeMixin.java
+++ b/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/mixin/DOOMNodeFactoryMixin.java
@@ -16,23 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+
 package org.apache.axiom.om.impl.dom.mixin;
 
-import org.apache.axiom.core.NodeFactory;
-import org.apache.axiom.om.OMMetaFactory;
-import org.apache.axiom.om.impl.dom.factory.DOOMNodeFactory;
-import org.apache.axiom.om.impl.dom.factory.OMDOMMetaFactory;
-import org.apache.axiom.om.impl.dom.intf.DOOMNode;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.axiom.om.impl.dom.factory.DOOMDocumentBuilderFactory;
+import org.apache.axiom.om.impl.dom.intf.factory.DOOMNodeFactory;
 import org.apache.axiom.weaver.annotation.Mixin;
 
 @Mixin
-public abstract class DOOMNodeMixin implements DOOMNode {
+public abstract class DOOMNodeFactoryMixin implements DOOMNodeFactory {
     @Override
-    public final NodeFactory coreGetNodeFactory() {
-        return DOOMNodeFactory.INSTANCE;
-    }
-    
-    public final OMMetaFactory getMetaFactory() {
-        return OMDOMMetaFactory.INSTANCE;
+    public DocumentBuilderFactory newDocumentBuilderFactory() {
+        return new DOOMDocumentBuilderFactory(getOMFactory());
     }
 }
diff --git a/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/mixin/DOOMNodeMixin.java b/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/mixin/DOOMNodeMixin.java
index d35d171..d47e680 100644
--- a/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/mixin/DOOMNodeMixin.java
+++ b/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/mixin/DOOMNodeMixin.java
@@ -19,9 +19,7 @@
 package org.apache.axiom.om.impl.dom.mixin;
 
 import org.apache.axiom.core.NodeFactory;
-import org.apache.axiom.om.OMMetaFactory;
 import org.apache.axiom.om.impl.dom.factory.DOOMNodeFactory;
-import org.apache.axiom.om.impl.dom.factory.OMDOMMetaFactory;
 import org.apache.axiom.om.impl.dom.intf.DOOMNode;
 import org.apache.axiom.weaver.annotation.Mixin;
 
@@ -31,8 +29,4 @@ public abstract class DOOMNodeMixin implements DOOMNode {
     public final NodeFactory coreGetNodeFactory() {
         return DOOMNodeFactory.INSTANCE;
     }
-    
-    public final OMMetaFactory getMetaFactory() {
-        return OMDOMMetaFactory.INSTANCE;
-    }
 }
diff --git a/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/mixin/package-info.java b/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/mixin/package-info.java
index 86319a5..a4dd937 100644
--- a/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/mixin/package-info.java
+++ b/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/mixin/package-info.java
@@ -17,6 +17,7 @@
  * under the License.
  */
 @org.apache.axiom.weaver.annotation.WeavablePackage(mixins={
+        DOOMNodeFactoryMixin.class,
         DOOMNodeMixin.class,
 })
 package org.apache.axiom.om.impl.dom.mixin;
diff --git a/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/DOMTests.java b/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/DOMTests.java
index 5c5b6e4..a2c89a5 100644
--- a/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/DOMTests.java
+++ b/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/DOMTests.java
@@ -20,7 +20,7 @@ package org.apache.axiom.om.impl.dom;
 
 import javax.xml.parsers.DocumentBuilderFactory;
 
-import org.apache.axiom.om.impl.dom.factory.OMDOMMetaFactory;
+import org.apache.axiom.om.impl.dom.factory.OMDOMMetaFactoryLoader;
 import org.apache.axiom.ts.dom.DocumentBuilderFactoryFactory;
 import org.apache.axiom.ts.dom.w3c.DOMFeature;
 
@@ -30,7 +30,7 @@ public final class DOMTests {
     public static final DocumentBuilderFactoryFactory FACTORY = new DocumentBuilderFactoryFactory() {
         @Override
         public DocumentBuilderFactory newInstance() {
-            return OMDOMMetaFactory.INSTANCE.newDocumentBuilderFactory();
+            return new OMDOMMetaFactoryLoader().load(null).newDocumentBuilderFactory();
         }
     };
     
diff --git a/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMDOMImplementationTest.java b/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMDOMImplementationTest.java
index 1898235..d13677e 100644
--- a/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMDOMImplementationTest.java
+++ b/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMDOMImplementationTest.java
@@ -21,12 +21,12 @@ package org.apache.axiom.om.impl.dom;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
-import org.apache.axiom.om.impl.dom.factory.OMDOMMetaFactory;
+import org.apache.axiom.om.impl.dom.factory.OMDOMMetaFactoryLoader;
 import org.apache.axiom.ts.omdom.OMDOMTestSuiteBuilder;
 
 public class OMDOMImplementationTest extends TestCase {
     public static TestSuite suite() {
-        OMDOMTestSuiteBuilder builder = new OMDOMTestSuiteBuilder(OMDOMMetaFactory.INSTANCE);
+        OMDOMTestSuiteBuilder builder = new OMDOMTestSuiteBuilder(new OMDOMMetaFactoryLoader().load(null));
         return builder.build();
     }
 }
diff --git a/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java b/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java
index 555a1a0..0c94afc 100644
--- a/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java
+++ b/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java
@@ -21,7 +21,7 @@ package org.apache.axiom.om.impl.dom;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
-import org.apache.axiom.om.impl.dom.factory.OMDOMMetaFactory;
+import org.apache.axiom.om.impl.dom.factory.OMDOMMetaFactoryLoader;
 import org.apache.axiom.ts.om.OMTestSuiteBuilder;
 import org.apache.axiom.ts.om.document.TestDigest;
 import org.apache.axiom.ts.om.element.TestGetChildrenWithName4;
@@ -29,7 +29,7 @@ import org.apache.axiom.ts.om.sourcedelement.TestGetSAXSourceWithPushOMDataSourc
 
 public class OMImplementationTest extends TestCase {
     public static TestSuite suite() {
-        OMTestSuiteBuilder builder = new OMTestSuiteBuilder(OMDOMMetaFactory.INSTANCE);
+        OMTestSuiteBuilder builder = new OMTestSuiteBuilder(new OMDOMMetaFactoryLoader().load(null));
         
         // TODO: investigate why this is not working with DOOM
         builder.exclude(TestGetChildrenWithName4.class);
diff --git a/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/factory/DOMFeatureTest.java b/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/factory/DOMFeatureTest.java
index c524e4c..1133146 100644
--- a/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/factory/DOMFeatureTest.java
+++ b/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/factory/DOMFeatureTest.java
@@ -20,12 +20,13 @@ package org.apache.axiom.om.impl.dom.factory;
 
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMMetaFactory;
+import org.apache.axiom.om.dom.DOMMetaFactory;
 
 import junit.framework.TestCase;
 
 public class DOMFeatureTest extends TestCase {
     public void test() {
         OMMetaFactory metaFactory = OMAbstractFactory.getMetaFactory(OMAbstractFactory.FEATURE_DOM);
-        assertTrue(metaFactory instanceof OMDOMMetaFactory);
+        assertTrue(metaFactory instanceof DOMMetaFactory);
     }
 }
diff --git a/implementations/axiom-dom/src/test/java/org/apache/axiom/soap/impl/dom/SOAPDOMImplementationTest.java b/implementations/axiom-dom/src/test/java/org/apache/axiom/soap/impl/dom/SOAPDOMImplementationTest.java
index d862df0..341f51c 100644
--- a/implementations/axiom-dom/src/test/java/org/apache/axiom/soap/impl/dom/SOAPDOMImplementationTest.java
+++ b/implementations/axiom-dom/src/test/java/org/apache/axiom/soap/impl/dom/SOAPDOMImplementationTest.java
@@ -18,15 +18,15 @@
  */
 package org.apache.axiom.soap.impl.dom;
 
+import org.apache.axiom.om.impl.dom.factory.OMDOMMetaFactoryLoader;
+import org.apache.axiom.ts.soapdom.SOAPDOMTestSuiteBuilder;
+
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
-import org.apache.axiom.om.impl.dom.factory.OMDOMMetaFactory;
-import org.apache.axiom.ts.soapdom.SOAPDOMTestSuiteBuilder;
-
 public class SOAPDOMImplementationTest extends TestCase {
     public static TestSuite suite() {
-        SOAPDOMTestSuiteBuilder builder = new SOAPDOMTestSuiteBuilder(OMDOMMetaFactory.INSTANCE);
+        SOAPDOMTestSuiteBuilder builder = new SOAPDOMTestSuiteBuilder(new OMDOMMetaFactoryLoader().load(null));
         return builder.build();
     }
 }
diff --git a/implementations/axiom-dom/src/test/java/org/apache/axiom/soap/impl/dom/SOAPImplementationTest.java b/implementations/axiom-dom/src/test/java/org/apache/axiom/soap/impl/dom/SOAPImplementationTest.java
index 14ec1d9..fb6e04b 100644
--- a/implementations/axiom-dom/src/test/java/org/apache/axiom/soap/impl/dom/SOAPImplementationTest.java
+++ b/implementations/axiom-dom/src/test/java/org/apache/axiom/soap/impl/dom/SOAPImplementationTest.java
@@ -18,15 +18,15 @@
  */
 package org.apache.axiom.soap.impl.dom;
 
+import org.apache.axiom.om.impl.dom.factory.OMDOMMetaFactoryLoader;
+import org.apache.axiom.ts.soap.SOAPTestSuiteBuilder;
+
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
-import org.apache.axiom.om.impl.dom.factory.OMDOMMetaFactory;
-import org.apache.axiom.ts.soap.SOAPTestSuiteBuilder;
-
 public class SOAPImplementationTest extends TestCase {
     public static TestSuite suite() {
-        SOAPTestSuiteBuilder builder = new SOAPTestSuiteBuilder(OMDOMMetaFactory.INSTANCE);
+        SOAPTestSuiteBuilder builder = new SOAPTestSuiteBuilder(new OMDOMMetaFactoryLoader().load(null));
         
         return builder.build();
     }
diff --git a/implementations/axiom-impl/pom.xml b/implementations/axiom-impl/pom.xml
index a7252c1..044a492 100644
--- a/implementations/axiom-impl/pom.xml
+++ b/implementations/axiom-impl/pom.xml
@@ -210,8 +210,7 @@
                             <ignore>
                                 <!-- TODO: inject the reference to the singleton into mixins directly -->
                                 org.apache.axiom.om.impl.llom.CoreNodeImpl -&gt; org.apache.axiom.om.impl.llom.factory.AxiomNodeFactoryImpl,
-                                org.apache.axiom.om.impl.llom.CoreNodeImpl -&gt; org.apache.axiom.om.impl.llom.factory.LLOMNodeFactory,
-                                org.apache.axiom.om.impl.llom.CoreNodeImpl -&gt; org.apache.axiom.om.impl.llom.factory.OMLinkedListMetaFactory
+                                org.apache.axiom.om.impl.llom.CoreNodeImpl -&gt; org.apache.axiom.om.impl.llom.factory.LLOMNodeFactory
                             </ignore>
                         </configuration>
                     </execution>
diff --git a/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/factory/OMLinkedListMetaFactory.java b/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/factory/OMLinkedListMetaFactory.java
deleted file mode 100644
index a81e88a..0000000
--- a/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/factory/OMLinkedListMetaFactory.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.axiom.om.impl.llom.factory;
-
-import org.apache.axiom.om.impl.common.factory.meta.AbstractOMMetaFactory;
-import org.apache.axiom.om.impl.intf.factory.AxiomNodeFactory;
-
-/**
- * Meta factory for the linked list OM implementation.
- */
-public class OMLinkedListMetaFactory extends AbstractOMMetaFactory {
-    private static final AxiomNodeFactory NODE_FACTORY;
-
-    static {
-        try {
-            NODE_FACTORY = (AxiomNodeFactory)OMLinkedListMetaFactory.class.getClassLoader().loadClass("org.apache.axiom.om.impl.llom.factory.AxiomNodeFactoryImpl").getField("INSTANCE").get(null);
-        } catch (ReflectiveOperationException ex) {
-            throw new Error(ex);
-        }
-    }
-
-    public static final OMLinkedListMetaFactory INSTANCE = new OMLinkedListMetaFactory();
-    
-    private OMLinkedListMetaFactory() {
-        super(NODE_FACTORY);
-    }
-}
diff --git a/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/factory/OMLinkedListMetaFactoryLoader.java b/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/factory/OMLinkedListMetaFactoryLoader.java
index d1ebd46..e470c7a 100644
--- a/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/factory/OMLinkedListMetaFactoryLoader.java
+++ b/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/factory/OMLinkedListMetaFactoryLoader.java
@@ -22,10 +22,15 @@ import java.util.Map;
 
 import org.apache.axiom.locator.loader.OMMetaFactoryLoader;
 import org.apache.axiom.om.OMMetaFactory;
+import org.apache.axiom.om.impl.intf.factory.AxiomNodeFactory;
 
 public class OMLinkedListMetaFactoryLoader implements OMMetaFactoryLoader {
     @Override
     public OMMetaFactory load(Map<String,Object> properties) {
-        return OMLinkedListMetaFactory.INSTANCE;
+        try {
+            return (AxiomNodeFactory)OMLinkedListMetaFactoryLoader.class.getClassLoader().loadClass("org.apache.axiom.om.impl.llom.factory.AxiomNodeFactoryImpl").getField("INSTANCE").get(null);
+        } catch (ReflectiveOperationException ex) {
+            throw new Error(ex);
+        }
     }
 }
diff --git a/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/mixin/AxiomInformationItemMixin.java b/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/mixin/AxiomInformationItemMixin.java
index 2d147f5..c712ea3 100644
--- a/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/mixin/AxiomInformationItemMixin.java
+++ b/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/mixin/AxiomInformationItemMixin.java
@@ -19,10 +19,8 @@
 package org.apache.axiom.om.impl.llom.mixin;
 
 import org.apache.axiom.core.NodeFactory;
-import org.apache.axiom.om.OMMetaFactory;
 import org.apache.axiom.om.impl.intf.AxiomInformationItem;
 import org.apache.axiom.om.impl.llom.factory.LLOMNodeFactory;
-import org.apache.axiom.om.impl.llom.factory.OMLinkedListMetaFactory;
 import org.apache.axiom.weaver.annotation.Mixin;
 
 @Mixin
@@ -31,9 +29,4 @@ public abstract class AxiomInformationItemMixin implements AxiomInformationItem
     public final NodeFactory coreGetNodeFactory() {
         return LLOMNodeFactory.INSTANCE;
     }
-
-    @Override
-    public final OMMetaFactory getMetaFactory() {
-        return OMLinkedListMetaFactory.INSTANCE;
-    }
 }
diff --git a/implementations/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java b/implementations/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java
index e51a1c7..b2445bd 100644
--- a/implementations/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java
+++ b/implementations/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java
@@ -21,14 +21,14 @@ package org.apache.axiom.om.impl.llom;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
-import org.apache.axiom.om.impl.llom.factory.OMLinkedListMetaFactory;
+import org.apache.axiom.om.impl.llom.factory.OMLinkedListMetaFactoryLoader;
 import org.apache.axiom.ts.om.OMTestSuiteBuilder;
 import org.apache.axiom.ts.om.document.TestDigest;
 import org.apache.axiom.ts.om.sourcedelement.TestGetSAXSourceWithPushOMDataSource;
 
 public class OMImplementationTest extends TestCase {
     public static TestSuite suite() {
-        OMTestSuiteBuilder builder = new OMTestSuiteBuilder(OMLinkedListMetaFactory.INSTANCE);
+        OMTestSuiteBuilder builder = new OMTestSuiteBuilder(new OMLinkedListMetaFactoryLoader().load(null));
         
         // TODO: if there is a comment node surrounded by text, then these text nodes need to be merged
         builder.exclude(TestDigest.class, "(|(file=digest3.xml)(file=digest4.xml))");
diff --git a/implementations/axiom-impl/src/test/java/org/apache/axiom/soap/impl/llom/SOAPImplementationTest.java b/implementations/axiom-impl/src/test/java/org/apache/axiom/soap/impl/llom/SOAPImplementationTest.java
index 9f88d6a..53ff9e3 100644
--- a/implementations/axiom-impl/src/test/java/org/apache/axiom/soap/impl/llom/SOAPImplementationTest.java
+++ b/implementations/axiom-impl/src/test/java/org/apache/axiom/soap/impl/llom/SOAPImplementationTest.java
@@ -21,12 +21,12 @@ package org.apache.axiom.soap.impl.llom;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
-import org.apache.axiom.om.impl.llom.factory.OMLinkedListMetaFactory;
+import org.apache.axiom.om.impl.llom.factory.OMLinkedListMetaFactoryLoader;
 import org.apache.axiom.ts.soap.SOAPTestSuiteBuilder;
 
 public class SOAPImplementationTest extends TestCase {
     public static TestSuite suite() {
-        SOAPTestSuiteBuilder builder = new SOAPTestSuiteBuilder(OMLinkedListMetaFactory.INSTANCE);
+        SOAPTestSuiteBuilder builder = new SOAPTestSuiteBuilder(new OMLinkedListMetaFactoryLoader().load(null));
         
         return builder.build();
     }
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/common/factory/OMFactoryImpl.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/common/factory/OMFactoryImpl.java
index 570e948..f00cb8a 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/common/factory/OMFactoryImpl.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/common/factory/OMFactoryImpl.java
@@ -66,17 +66,15 @@ import org.apache.axiom.om.impl.intf.factory.AxiomElementType;
 import org.apache.axiom.om.impl.intf.factory.AxiomNodeFactory;
 
 public class OMFactoryImpl implements OMFactory {
-    private final OMMetaFactory metaFactory;
     protected final AxiomNodeFactory nodeFactory;
     
-    public OMFactoryImpl(OMMetaFactory metaFactory, AxiomNodeFactory nodeFactory) {
-        this.metaFactory = metaFactory;
+    public OMFactoryImpl(AxiomNodeFactory nodeFactory) {
         this.nodeFactory = nodeFactory;
     }
 
     @Override
     public final OMMetaFactory getMetaFactory() {
-        return metaFactory;
+        return nodeFactory;
     }
 
     @Override
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/common/factory/meta/BuilderFactory.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/common/factory/meta/BuilderFactory.java
index e482a42..e97a906 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/common/factory/meta/BuilderFactory.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/common/factory/meta/BuilderFactory.java
@@ -35,18 +35,18 @@ import org.apache.axiom.soap.impl.common.builder.SOAPModelBuilderImpl;
 import org.apache.axiom.soap.impl.intf.AxiomSOAPEnvelope;
 import org.apache.axiom.soap.impl.intf.AxiomSOAPMessage;
 
-abstract class BuilderFactory<T extends OMXMLParserWrapper> {
-    final static BuilderFactory<OMXMLParserWrapper> OM = new BuilderFactory<OMXMLParserWrapper>() {
+public abstract class BuilderFactory<T extends OMXMLParserWrapper> {
+    public final static BuilderFactory<OMXMLParserWrapper> OM = new BuilderFactory<OMXMLParserWrapper>() {
         @Override
-        OMXMLParserWrapper createBuilder(AxiomNodeFactory nodeFactory, BuilderSpec spec) {
+        public OMXMLParserWrapper createBuilder(AxiomNodeFactory nodeFactory, BuilderSpec spec) {
             return new OMXMLParserWrapperImpl(new BuilderImpl(spec.getInput(), nodeFactory.getCoreNodeFactory(),
                     PlainXMLModel.INSTANCE, null), spec.getDetachable());
         }
     };
 
-    final static BuilderFactory<SOAPModelBuilder> SOAP = new BuilderFactory<SOAPModelBuilder>() {
+    public final static BuilderFactory<SOAPModelBuilder> SOAP = new BuilderFactory<SOAPModelBuilder>() {
         @Override
-        SOAPModelBuilder createBuilder(AxiomNodeFactory nodeFactory, BuilderSpec spec) {
+        public SOAPModelBuilder createBuilder(AxiomNodeFactory nodeFactory, BuilderSpec spec) {
             BuilderImpl builder = new BuilderImpl(new FilteredXmlInput(spec.getInput(), SOAPFilter.INSTANCE), nodeFactory.getCoreNodeFactory(), new SOAPModel(nodeFactory), null);
             // The SOAPFactory instance linked to the SOAPMessage is unknown until we reach the
             // SOAPEnvelope. Register a post-processor that does the necessary updates on the
@@ -68,5 +68,5 @@ abstract class BuilderFactory<T extends OMXMLParserWrapper> {
         }
     };
 
-    abstract T createBuilder(AxiomNodeFactory nodeFactory, BuilderSpec spec);
+    public abstract T createBuilder(AxiomNodeFactory nodeFactory, BuilderSpec spec);
 }
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/common/factory/meta/BuilderSpec.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/common/factory/meta/BuilderSpec.java
index 5780d86..3551b70 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/common/factory/meta/BuilderSpec.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/common/factory/meta/BuilderSpec.java
@@ -53,7 +53,7 @@ import org.apache.axiom.util.xml.stream.XMLEventUtils;
 import org.w3c.dom.Node;
 import org.xml.sax.InputSource;
 
-final class BuilderSpec {
+public final class BuilderSpec {
     private final XmlInput input;
     private final Detachable detachable;
 
@@ -125,7 +125,7 @@ final class BuilderSpec {
         return new BuilderSpec(new StAXPullInput(reader, AxiomXMLStreamReaderHelperFactory.INSTANCE, true, closeable), detachable);
     }
     
-    static BuilderSpec from(XMLStreamReader reader) {
+    public static BuilderSpec from(XMLStreamReader reader) {
         int eventType = reader.getEventType();
         switch (eventType) {
             case XMLStreamReader.START_DOCUMENT:
@@ -140,12 +140,12 @@ final class BuilderSpec {
         return new BuilderSpec(new FilteredXmlInput(new StAXPullInput(reader, AxiomXMLStreamReaderHelperFactory.INSTANCE, false, null), NamespaceRepairingFilter.DEFAULT), null);
     }
 
-    static BuilderSpec from(StAXParserConfiguration configuration,
+    public static BuilderSpec from(StAXParserConfiguration configuration,
             InputSource is) {
         return create(configuration, is, true);
     }
 
-    static BuilderSpec from(StAXParserConfiguration configuration, Source source) {
+    public static BuilderSpec from(StAXParserConfiguration configuration, Source source) {
         if (source instanceof SAXSource) {
             return from((SAXSource)source, true);
         } else if (source instanceof DOMSource) {
@@ -173,7 +173,7 @@ final class BuilderSpec {
         }
     }
 
-    static BuilderSpec from(Node node, boolean expandEntityReferences) {
+    public static BuilderSpec from(Node node, boolean expandEntityReferences) {
         return new BuilderSpec(
                 new FilteredXmlInput(
                         new FilteredXmlInput(
@@ -183,11 +183,11 @@ final class BuilderSpec {
                 null);
     }
 
-    static BuilderSpec from(SAXSource source, boolean expandEntityReferences) {
+    public static BuilderSpec from(SAXSource source, boolean expandEntityReferences) {
         return new BuilderSpec(new FilteredXmlInput(new SAXInput(source, expandEntityReferences), NamespaceRepairingFilter.DEFAULT), null);
     }
 
-    static BuilderSpec from(StAXParserConfiguration configuration, final MultipartBody message) {
+    public static BuilderSpec from(StAXParserConfiguration configuration, final MultipartBody message) {
         Part rootPart = message.getRootPart();
         InputSource is = new InputSource(rootPart.getInputStream(false));
         is.setEncoding(rootPart.getContentType().getParameter("charset"));
@@ -210,7 +210,7 @@ final class BuilderSpec {
                 });
     }
 
-    static BuilderSpec from(StAXParserConfiguration configuration, Source source, OMAttachmentAccessor attachmentAccessor) {
+    public static BuilderSpec from(StAXParserConfiguration configuration, Source source, OMAttachmentAccessor attachmentAccessor) {
         BuilderSpec spec = from(configuration, source);
         return new BuilderSpec(
                 new FilteredXmlInput(
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/intf/AxiomInformationItem.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/intf/AxiomInformationItem.java
index e992eb4..8250da4 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/intf/AxiomInformationItem.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/intf/AxiomInformationItem.java
@@ -28,5 +28,6 @@ public interface AxiomInformationItem extends OMInformationItem, CoreNode {
     @Inject
     AxiomNodeFactory getNodeFactory();
 
+    @Inject
     OMMetaFactory getMetaFactory();
 }
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/intf/factory/AxiomNodeFactory.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/intf/factory/AxiomNodeFactory.java
index 50a6614..4b5e11b 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/intf/factory/AxiomNodeFactory.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/intf/factory/AxiomNodeFactory.java
@@ -19,6 +19,7 @@
 package org.apache.axiom.om.impl.intf.factory;
 
 import org.apache.axiom.core.NodeFactory2;
+import org.apache.axiom.om.OMMetaFactorySPI;
 import org.apache.axiom.om.impl.intf.AxiomAttribute;
 import org.apache.axiom.om.impl.intf.AxiomCDATASection;
 import org.apache.axiom.om.impl.intf.AxiomCharacterDataNode;
@@ -58,7 +59,7 @@ import org.apache.axiom.weaver.annotation.Inject;
 import org.apache.axiom.weaver.annotation.Singleton;
 
 @Singleton
-public interface AxiomNodeFactory {
+public interface AxiomNodeFactory extends OMMetaFactorySPI {
     @Inject
     NodeFactory2 getCoreNodeFactory();
 
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/common/factory/meta/AbstractOMMetaFactory.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomNodeFactoryMixin.java
similarity index 64%
rename from mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/common/factory/meta/AbstractOMMetaFactory.java
rename to mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomNodeFactoryMixin.java
index bb0c65d..ca2af94 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/common/factory/meta/AbstractOMMetaFactory.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomNodeFactoryMixin.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.axiom.om.impl.common.factory.meta;
+package org.apache.axiom.om.impl.mixin;
 
 import static org.apache.axiom.om.impl.common.factory.meta.BuilderFactory.OM;
 import static org.apache.axiom.om.impl.common.factory.meta.BuilderFactory.SOAP;
@@ -28,34 +28,29 @@ import javax.xml.transform.sax.SAXSource;
 import org.apache.axiom.mime.MultipartBody;
 import org.apache.axiom.om.OMAttachmentAccessor;
 import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMMetaFactory;
-import org.apache.axiom.om.OMMetaFactorySPI;
 import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.om.impl.common.factory.OMFactoryImpl;
+import org.apache.axiom.om.impl.common.factory.meta.BuilderSpec;
 import org.apache.axiom.om.impl.intf.factory.AxiomNodeFactory;
 import org.apache.axiom.om.util.StAXParserConfiguration;
 import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axiom.soap.SOAPModelBuilder;
 import org.apache.axiom.soap.impl.factory.SOAP11Factory;
 import org.apache.axiom.soap.impl.factory.SOAP12Factory;
+import org.apache.axiom.weaver.annotation.Mixin;
 import org.w3c.dom.Node;
 import org.xml.sax.InputSource;
 
-/**
- * Base class for {@link OMMetaFactory} implementations that make use of the standard builders
- * ({@link org.apache.axiom.core.impl.builder.BuilderImpl} and its subclasses).
- */
-public abstract class AbstractOMMetaFactory implements OMMetaFactorySPI {
-    private final AxiomNodeFactory nodeFactory;
+@Mixin
+public abstract class AxiomNodeFactoryMixin implements AxiomNodeFactory {
     private final OMFactory omFactory;
     private final SOAPFactory soap11Factory;
     private final SOAPFactory soap12Factory;
     
-    public AbstractOMMetaFactory(AxiomNodeFactory nodeFactory) {
-        this.nodeFactory = nodeFactory;
-        omFactory = new OMFactoryImpl(this, nodeFactory);
-        soap11Factory = new SOAP11Factory(this, nodeFactory);
-        soap12Factory = new SOAP12Factory(this, nodeFactory);
+    public AxiomNodeFactoryMixin() {
+        omFactory = new OMFactoryImpl(this);
+        soap11Factory = new SOAP11Factory(this);
+        soap12Factory = new SOAP12Factory(this);
     }
     
     @Override
@@ -75,61 +70,61 @@ public abstract class AbstractOMMetaFactory implements OMMetaFactorySPI {
     
     @Override
     public final OMXMLParserWrapper createStAXOMBuilder(XMLStreamReader parser) {
-        return OM.createBuilder(nodeFactory, BuilderSpec.from(parser));
+        return OM.createBuilder(this, BuilderSpec.from(parser));
     }
 
     @Override
     public final OMXMLParserWrapper createOMBuilder(StAXParserConfiguration configuration, InputSource is) {
-        return OM.createBuilder(nodeFactory, BuilderSpec.from(configuration, is));
+        return OM.createBuilder(this, BuilderSpec.from(configuration, is));
     }
     
     @Override
     public final OMXMLParserWrapper createOMBuilder(Source source) {
-        return OM.createBuilder(nodeFactory, BuilderSpec.from(StAXParserConfiguration.DEFAULT, source));
+        return OM.createBuilder(this, BuilderSpec.from(StAXParserConfiguration.DEFAULT, source));
     }
 
     @Override
     public final OMXMLParserWrapper createOMBuilder(Node node, boolean expandEntityReferences) {
-        return OM.createBuilder(nodeFactory, BuilderSpec.from(node, expandEntityReferences));
+        return OM.createBuilder(this, BuilderSpec.from(node, expandEntityReferences));
     }
 
     @Override
     public final OMXMLParserWrapper createOMBuilder(SAXSource source, boolean expandEntityReferences) {
-        return OM.createBuilder(nodeFactory, BuilderSpec.from(source, expandEntityReferences));
+        return OM.createBuilder(this, BuilderSpec.from(source, expandEntityReferences));
     }
 
     @Override
     public final OMXMLParserWrapper createOMBuilder(StAXParserConfiguration configuration, MultipartBody message) {
-        return OM.createBuilder(nodeFactory, BuilderSpec.from(configuration, message));
+        return OM.createBuilder(this, BuilderSpec.from(configuration, message));
     }
 
     @Override
     public final OMXMLParserWrapper createOMBuilder(Source rootPart, OMAttachmentAccessor attachmentAccessor) {
-        return OM.createBuilder(nodeFactory, BuilderSpec.from(StAXParserConfiguration.DEFAULT, rootPart, attachmentAccessor));
+        return OM.createBuilder(this, BuilderSpec.from(StAXParserConfiguration.DEFAULT, rootPart, attachmentAccessor));
     }
 
     @Override
     public final SOAPModelBuilder createStAXSOAPModelBuilder(XMLStreamReader parser) {
-        return SOAP.createBuilder(nodeFactory, BuilderSpec.from(parser));
+        return SOAP.createBuilder(this, BuilderSpec.from(parser));
     }
 
     @Override
     public final SOAPModelBuilder createSOAPModelBuilder(InputSource is) {
-        return SOAP.createBuilder(nodeFactory, BuilderSpec.from(StAXParserConfiguration.SOAP, is));
+        return SOAP.createBuilder(this, BuilderSpec.from(StAXParserConfiguration.SOAP, is));
     }
 
     @Override
     public final SOAPModelBuilder createSOAPModelBuilder(Source source) {
-        return SOAP.createBuilder(nodeFactory, BuilderSpec.from(StAXParserConfiguration.SOAP, source));
+        return SOAP.createBuilder(this, BuilderSpec.from(StAXParserConfiguration.SOAP, source));
     }
 
     @Override
     public final SOAPModelBuilder createSOAPModelBuilder(MultipartBody message) {
-        return SOAP.createBuilder(nodeFactory, BuilderSpec.from(StAXParserConfiguration.SOAP, message));
+        return SOAP.createBuilder(this, BuilderSpec.from(StAXParserConfiguration.SOAP, message));
     }
 
     @Override
     public final SOAPModelBuilder createSOAPModelBuilder(Source rootPart, OMAttachmentAccessor attachmentAccessor) {
-        return SOAP.createBuilder(nodeFactory, BuilderSpec.from(StAXParserConfiguration.SOAP, rootPart, attachmentAccessor));
+        return SOAP.createBuilder(this, BuilderSpec.from(StAXParserConfiguration.SOAP, rootPart, attachmentAccessor));
     }
 }
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/package-info.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/package-info.java
index 8af074f..2b14f7a 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/package-info.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/package-info.java
@@ -33,6 +33,7 @@
         AxiomLeafNodeMixin.class,
         AxiomNamedInformationItemMixin.class,
         AxiomNamespaceDeclarationMixin.class,
+        AxiomNodeFactoryMixin.class,
         AxiomProcessingInstructionMixin.class,
         AxiomSerializableMixin.class,
         AxiomSourcedElementMixin.class,
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/factory/SOAP11Factory.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/factory/SOAP11Factory.java
index 8e5149e..30baa9b 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/factory/SOAP11Factory.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/factory/SOAP11Factory.java
@@ -18,7 +18,6 @@
  */
 package org.apache.axiom.soap.impl.factory;
 
-import org.apache.axiom.om.OMMetaFactory;
 import org.apache.axiom.om.impl.intf.factory.AxiomNodeFactory;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPFault;
@@ -32,8 +31,8 @@ import org.apache.axiom.soap.impl.intf.SOAPHelper;
 import org.apache.axiom.soap.impl.intf.soap11.SOAP11Helper;
 
 public class SOAP11Factory extends SOAPFactoryImpl {
-    public SOAP11Factory(OMMetaFactory metaFactory, AxiomNodeFactory nodeFactory) {
-        super(metaFactory, nodeFactory);
+    public SOAP11Factory(AxiomNodeFactory nodeFactory) {
+        super(nodeFactory);
     }
 
     @Override
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/factory/SOAP12Factory.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/factory/SOAP12Factory.java
index 07d54a1..2adeab9 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/factory/SOAP12Factory.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/factory/SOAP12Factory.java
@@ -18,7 +18,6 @@
  */
 package org.apache.axiom.soap.impl.factory;
 
-import org.apache.axiom.om.OMMetaFactory;
 import org.apache.axiom.om.impl.intf.factory.AxiomNodeFactory;
 import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axiom.soap.SOAPEnvelope;
@@ -34,8 +33,8 @@ import org.apache.axiom.soap.impl.intf.SOAPHelper;
 import org.apache.axiom.soap.impl.intf.soap12.SOAP12Helper;
 
 public class SOAP12Factory extends SOAPFactoryImpl {
-    public SOAP12Factory(OMMetaFactory metaFactory, AxiomNodeFactory nodeFactory) {
-        super(metaFactory, nodeFactory);
+    public SOAP12Factory(AxiomNodeFactory nodeFactory) {
+        super(nodeFactory);
     }
 
     @Override
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/factory/SOAPFactoryImpl.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/factory/SOAPFactoryImpl.java
index 0f0e549..e9a8140 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/factory/SOAPFactoryImpl.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/factory/SOAPFactoryImpl.java
@@ -22,7 +22,6 @@ import javax.xml.namespace.QName;
 
 import org.apache.axiom.om.OMDataSource;
 import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMMetaFactory;
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.impl.common.factory.OMFactoryImpl;
 import org.apache.axiom.om.impl.intf.AxiomElement;
@@ -50,8 +49,8 @@ import org.apache.axiom.soap.impl.intf.SOAPHelper;
 public abstract class SOAPFactoryImpl extends OMFactoryImpl implements SOAPFactory {
     private static final Sequence envelopeSequence = new Sequence(SOAPHeader.class, SOAPBody.class);
     
-    public SOAPFactoryImpl(OMMetaFactory metaFactory, AxiomNodeFactory nodeFactory) {
-        super(metaFactory, nodeFactory);
+    public SOAPFactoryImpl(AxiomNodeFactory nodeFactory) {
+        super(nodeFactory);
     }
     
     public abstract SOAPHelper getSOAPHelper();