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 2016/02/06 15:15:15 UTC

svn commit: r1728840 - in /webservices/axiom/trunk: aspects/core-aspects/src/main/java/org/apache/axiom/core/ aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/ aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/fac...

Author: veithen
Date: Sat Feb  6 14:15:15 2016
New Revision: 1728840

URL: http://svn.apache.org/viewvc?rev=1728840&view=rev
Log:
Increase consistency in the builder setup for OMSourcedElements.

Modified:
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreParentNode.java
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/Flags.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/AbstractBuilder.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/AbstractPushBuilder.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandlerXMLStreamWriter.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/PushOMBuilder.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXOMBuilder.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/SAXOMBuilder.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomSourcedElementSupport.aj
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/builder/StAXSOAPModelBuilder.java
    webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreParentNode.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreParentNode.java?rev=1728840&r1=1728839&r2=1728840&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreParentNode.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreParentNode.java Sat Feb  6 14:15:15 2016
@@ -25,9 +25,10 @@ import org.apache.axiom.om.OMXMLParserWr
  */
 public interface CoreParentNode extends CoreNode {
     int COMPLETE = 0;
-    int INCOMPLETE = 1;
-    int DISCARDED = 2;
-    int COMPACT = 3;
+    int ATTRIBUTES_PENDING = 1;
+    int INCOMPLETE = 2;
+    int DISCARDED = 3;
+    int COMPACT = 4;
     
     OMXMLParserWrapper getBuilder();
     void coreSetBuilder(OMXMLParserWrapper builder);

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/Flags.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/Flags.java?rev=1728840&r1=1728839&r2=1728840&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/Flags.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/Flags.java Sat Feb  6 14:15:15 2016
@@ -25,19 +25,19 @@ final class Flags {
      * Defines the bit mask for the part of the flags that indicate the state of a
      * {@link CoreParentNode}.
      */
-    static final int STATE_MASK = 3;
+    static final int STATE_MASK = 7;
 
     /**
      * Used by {@link CoreChildNode} instances to indicate whether the node has a parent or not.
      * This is necessary to interpret the meaning of the <code>owner</code> attribute if it refers
      * to a document node (which may be the parent or simply the owner document).
      */
-    static final int HAS_PARENT = 4;
+    static final int HAS_PARENT = 8;
     
-    static final int DEFAULT_ATTR = 8;
+    static final int DEFAULT_ATTR = 16;
     
     /**
      * Used to store the information returned by {@link CoreCharacterDataNode#coreIsIgnorable()}.
      */
-    static final int IGNORABLE = 16;
+    static final int IGNORABLE = 32;
 }

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/AbstractBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/AbstractBuilder.java?rev=1728840&r1=1728839&r2=1728840&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/AbstractBuilder.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/AbstractBuilder.java Sat Feb  6 14:15:15 2016
@@ -20,12 +20,13 @@ package org.apache.axiom.om.impl.common.
 
 import org.apache.axiom.core.NodeFactory;
 import org.apache.axiom.om.OMXMLParserWrapper;
+import org.apache.axiom.om.impl.intf.AxiomSourcedElement;
 
 public abstract class AbstractBuilder implements OMXMLParserWrapper {
     protected final BuilderHandler handler;
 
-    public AbstractBuilder(NodeFactory nodeFactory, Model model) {
-        handler = new BuilderHandler(nodeFactory, model, this);
+    public AbstractBuilder(NodeFactory nodeFactory, Model model, AxiomSourcedElement root) {
+        handler = new BuilderHandler(nodeFactory, model, root, this);
     }
 
     public final void addNodePostProcessor(NodePostProcessor nodePostProcessor) {

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/AbstractPushBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/AbstractPushBuilder.java?rev=1728840&r1=1728839&r2=1728840&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/AbstractPushBuilder.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/AbstractPushBuilder.java Sat Feb  6 14:15:15 2016
@@ -21,16 +21,13 @@ package org.apache.axiom.om.impl.common.
 import org.apache.axiom.core.NodeFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMException;
+import org.apache.axiom.om.impl.intf.AxiomSourcedElement;
 
 public abstract class AbstractPushBuilder extends AbstractBuilder {
-    public AbstractPushBuilder(NodeFactory nodeFactory, Model model) {
-        super(nodeFactory, model);
+    public AbstractPushBuilder(NodeFactory nodeFactory, Model model, AxiomSourcedElement root) {
+        super(nodeFactory, model, root);
     }
     
-    public final int next() throws OMException {
-        throw new UnsupportedOperationException();
-    }
-
     public final void discard(OMElement el) throws OMException {
         throw new UnsupportedOperationException();
     }

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java?rev=1728840&r1=1728839&r2=1728840&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java Sat Feb  6 14:15:15 2016
@@ -24,6 +24,7 @@ import java.util.Map;
 
 import javax.xml.stream.XMLStreamConstants;
 
+import org.apache.axiom.core.CoreParentNode;
 import org.apache.axiom.core.NodeFactory;
 import org.apache.axiom.om.OMContainer;
 import org.apache.axiom.om.OMSerializable;
@@ -39,6 +40,7 @@ import org.apache.axiom.om.impl.intf.Axi
 import org.apache.axiom.om.impl.intf.AxiomElement;
 import org.apache.axiom.om.impl.intf.AxiomEntityReference;
 import org.apache.axiom.om.impl.intf.AxiomProcessingInstruction;
+import org.apache.axiom.om.impl.intf.AxiomSourcedElement;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -47,6 +49,7 @@ public final class BuilderHandler {
     
     private final NodeFactory nodeFactory;
     private final Model model;
+    private final AxiomSourcedElement root;
     private final OMXMLParserWrapper builder;
     public AxiomContainer target;
     // returns the state of completion
@@ -70,9 +73,10 @@ public final class BuilderHandler {
     
     private ArrayList<NodePostProcessor> nodePostProcessors;
 
-    public BuilderHandler(NodeFactory nodeFactory, Model model, OMXMLParserWrapper builder) {
+    public BuilderHandler(NodeFactory nodeFactory, Model model, AxiomSourcedElement root, OMXMLParserWrapper builder) {
         this.nodeFactory = nodeFactory;
         this.model = model;
+        this.root = root;
         this.builder = builder;
     }
 
@@ -97,14 +101,16 @@ public final class BuilderHandler {
     }
     
     public void startDocument(String inputEncoding, String xmlVersion, String xmlEncoding, boolean standalone) {
-        document = nodeFactory.createNode(model.getDocumentType());
-        document.coreSetInputEncoding(inputEncoding);
-        document.coreSetXmlVersion(xmlVersion);
-        document.coreSetXmlEncoding(xmlEncoding);
-        document.coreSetStandalone(standalone);
-        document.coreSetBuilder(builder);
-        postProcessNode(document);
-        target = document;
+        if (root == null) {
+            document = nodeFactory.createNode(model.getDocumentType());
+            document.coreSetInputEncoding(inputEncoding);
+            document.coreSetXmlVersion(xmlVersion);
+            document.coreSetXmlEncoding(xmlEncoding);
+            document.coreSetStandalone(standalone);
+            document.coreSetBuilder(builder);
+            postProcessNode(document);
+            target = document;
+        }
     }
     
     public void createDocumentTypeDeclaration(String rootName, String publicId, String systemId,
@@ -120,11 +126,18 @@ public final class BuilderHandler {
     
     public AxiomElement startElement(String namespaceURI, String localName, String prefix) {
         elementLevel++;
-        AxiomElement element = nodeFactory.createNode(model.determineElementType(
-                target, elementLevel, namespaceURI, localName));
-        element.coreSetBuilder(builder);
-        element.initName(localName, /*ns*/ null, false);
-        addChild(element);
+        AxiomElement element;
+        if (elementLevel == 1 && root != null) {
+            root.validateName(prefix, localName, namespaceURI);
+            element = root;
+        } else {
+            element = nodeFactory.createNode(model.determineElementType(
+                    target, elementLevel, namespaceURI, localName));
+            element.coreSetBuilder(builder);
+            element.coreSetState(CoreParentNode.ATTRIBUTES_PENDING);
+            element.initName(localName, /*ns*/ null, false);
+            addChild(element);
+        }
         target = element;
         return element;
     }
@@ -142,6 +155,10 @@ public final class BuilderHandler {
         }
     }
 
+    public void attributesCompleted() {
+        target.coreSetState(CoreParentNode.INCOMPLETE);
+    }
+    
     public void processCharacterData(Object data, boolean ignorable) {
         AxiomCharacterDataNode node = nodeFactory.createNode(AxiomCharacterDataNode.class);
         node.coreSetCharacterData(data);

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandlerXMLStreamWriter.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandlerXMLStreamWriter.java?rev=1728840&r1=1728839&r2=1728840&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandlerXMLStreamWriter.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandlerXMLStreamWriter.java Sat Feb  6 14:15:15 2016
@@ -37,13 +37,12 @@ import org.apache.axiom.om.impl.intf.Tex
 import org.apache.axiom.util.stax.AbstractXMLStreamWriter;
 
 public class BuilderHandlerXMLStreamWriter extends AbstractXMLStreamWriter implements DataHandlerWriter {
-    private final AxiomSourcedElement root;
     private final OMFactoryEx factory;
     private final BuilderHandler handler;
+    private boolean inStartElement;
 
     public BuilderHandlerXMLStreamWriter(BuilderHandler handler, AxiomSourcedElement root) throws XMLStreamException {
         this.handler = handler;
-        this.root = root;
         factory = (OMFactoryEx)root.getOMFactory();
         // Seed the namespace context with the namespace context from the parent
         OMContainer parent = root.getParent();
@@ -107,16 +106,11 @@ public class BuilderHandlerXMLStreamWrit
     protected void doWriteStartElement(String prefix, String localName, String namespaceURI) {
         // Get the OMNamespace object before we change the parent
         OMNamespace ns = getOMNamespace(prefix, namespaceURI, false);
-        if (handler.target == null) {
-            root.validateName(prefix, localName, namespaceURI);
-            handler.target = root;
-            handler.elementLevel = 1;
-        } else {
-            handler.startElement(namespaceURI, localName, prefix);
-        }
+        handler.startElement(namespaceURI, localName, prefix);
         if (ns != null) {
             ((OMElement)handler.target).setNamespace(ns, false);
         }
+        inStartElement = true;
     }
 
     protected void doWriteStartElement(String localName) throws XMLStreamException {
@@ -127,8 +121,16 @@ public class BuilderHandlerXMLStreamWrit
         handler.endElement();
     }
 
+    private void finishStartElement() {
+        if (inStartElement) {
+            handler.attributesCompleted();
+            inStartElement = false;
+        }
+    }
+    
     protected void doWriteEmptyElement(String prefix, String localName, String namespaceURI) {
         doWriteStartElement(prefix, localName, namespaceURI);
+        finishStartElement();
         doWriteEndElement();
     }
 
@@ -161,22 +163,27 @@ public class BuilderHandlerXMLStreamWrit
     }
 
     protected void doWriteCharacters(String text) {
+        finishStartElement();
         handler.processCharacterData(text, false);
     }
 
     protected void doWriteCData(String data) {
+        finishStartElement();
         handler.createCDATASection(data);
     }
 
     protected void doWriteComment(String data) {
+        finishStartElement();
         handler.createComment(data);
     }
 
     protected void doWriteEntityRef(String name) throws XMLStreamException {
+        finishStartElement();
         handler.createEntityReference(name, null);
     }
 
     protected void doWriteProcessingInstruction(String piTarget, String data) {
+        finishStartElement();
         handler.createProcessingInstruction(piTarget, data);
     }
 
@@ -194,11 +201,13 @@ public class BuilderHandlerXMLStreamWrit
 
     public void writeDataHandler(DataHandler dataHandler, String contentID, boolean optimize)
             throws IOException, XMLStreamException {
+        finishStartElement();
         handler.processCharacterData(new TextContent(contentID, dataHandler, optimize), false);
     }
 
     public void writeDataHandler(DataHandlerProvider dataHandlerProvider, String contentID,
             boolean optimize) throws IOException, XMLStreamException {
+        finishStartElement();
         handler.processCharacterData(new TextContent(contentID, dataHandlerProvider, optimize), false);
     }
 }

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/PushOMBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/PushOMBuilder.java?rev=1728840&r1=1728839&r2=1728840&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/PushOMBuilder.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/PushOMBuilder.java Sat Feb  6 14:15:15 2016
@@ -20,6 +20,7 @@ package org.apache.axiom.om.impl.common.
 
 import javax.xml.stream.XMLStreamException;
 
+import org.apache.axiom.om.DeferredParsingException;
 import org.apache.axiom.om.OMDataSource;
 import org.apache.axiom.om.OMDocument;
 import org.apache.axiom.om.impl.intf.AxiomSourcedElement;
@@ -28,14 +29,19 @@ public final class PushOMBuilder extends
     private final AxiomSourcedElement root;
     private final OMDataSource dataSource;
 
-    public PushOMBuilder(AxiomSourcedElement root, OMDataSource dataSource) throws XMLStreamException {
-        super(root.coreGetNodeFactory(), PlainXMLModel.INSTANCE);
+    public PushOMBuilder(AxiomSourcedElement root, OMDataSource dataSource) {
+        super(root.coreGetNodeFactory(), PlainXMLModel.INSTANCE, root);
         this.root = root;
         this.dataSource = dataSource;
     }
     
-    public void expand() throws XMLStreamException {
-        dataSource.serialize(new BuilderHandlerXMLStreamWriter(handler, root));
+    public int next() {
+        try {
+            dataSource.serialize(new BuilderHandlerXMLStreamWriter(handler, root));
+        } catch (XMLStreamException ex) {
+            throw new DeferredParsingException(ex);
+        }
+        return -1;
     }
 
     @Override

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXOMBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXOMBuilder.java?rev=1728840&r1=1728839&r2=1728840&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXOMBuilder.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXOMBuilder.java Sat Feb  6 14:15:15 2016
@@ -38,6 +38,7 @@ import org.apache.axiom.om.impl.builder.
 import org.apache.axiom.om.impl.builder.Detachable;
 import org.apache.axiom.om.impl.intf.AxiomContainer;
 import org.apache.axiom.om.impl.intf.AxiomElement;
+import org.apache.axiom.om.impl.intf.AxiomSourcedElement;
 import org.apache.axiom.om.impl.intf.TextContent;
 import org.apache.axiom.util.stax.XMLEventUtils;
 import org.apache.axiom.util.stax.XMLStreamReaderUtils;
@@ -130,39 +131,28 @@ public class StAXOMBuilder extends Abstr
     
     private int lookAheadToken = -1;
 
-    private StAXOMBuilder(NodeFactory nodeFactory, XMLStreamReader parser, String encoding,
-            boolean autoClose, Detachable detachable, Closeable closeable, Model model, PayloadSelector payloadSelector) {
-        super(nodeFactory, model);
+    protected StAXOMBuilder(NodeFactory nodeFactory, XMLStreamReader parser,
+            boolean autoClose, Detachable detachable, Closeable closeable, Model model, PayloadSelector payloadSelector,
+            AxiomSourcedElement root) {
+        super(nodeFactory, model, root);
         this.parser = parser;
         this.autoClose = autoClose;
         this.detachable = detachable;
         this.closeable = closeable;
         this.payloadSelector = payloadSelector;
-        charEncoding = encoding;
+        charEncoding = parser.getEncoding();
         dataHandlerReader = XMLStreamReaderUtils.getDataHandlerReader(parser);
     }
     
-    protected StAXOMBuilder(NodeFactory nodeFactory, XMLStreamReader parser, boolean autoClose,
-            Detachable detachable, Closeable closeable, Model model, PayloadSelector payloadSelector) {
-        // The getEncoding information is only available at the START_DOCUMENT event.
-        this(nodeFactory, parser, parser.getEncoding(), autoClose, detachable, closeable, model, payloadSelector);
-        
-    }
-    
     public StAXOMBuilder(NodeFactory nodeFactory, XMLStreamReader parser, boolean autoClose,
             Detachable detachable, Closeable closeable) {
-        this(nodeFactory, parser, autoClose, detachable, closeable, PlainXMLModel.INSTANCE, PayloadSelector.DEFAULT);
+        this(nodeFactory, parser, autoClose, detachable, closeable, PlainXMLModel.INSTANCE, PayloadSelector.DEFAULT, null);
     }
     
     public StAXOMBuilder(NodeFactory nodeFactory,
                          XMLStreamReader parser, 
-                         OMElement element, 
-                         String characterEncoding) {
-        // Use this constructor because the parser is passed the START_DOCUMENT state.
-        this(nodeFactory, parser, characterEncoding, true, null, null, PlainXMLModel.INSTANCE, PayloadSelector.DEFAULT);  
-        handler.elementLevel = 1;
-        handler.target = (AxiomContainer)element;
-        populateOMElement(element);
+                         AxiomSourcedElement element) {
+        this(nodeFactory, parser, true, null, null, PlainXMLModel.INSTANCE, PayloadSelector.DEFAULT, element);
     }
     
     /**
@@ -706,6 +696,7 @@ public class StAXOMBuilder extends Abstr
         processNamespaceData(node);
         // fill in the attributes
         processAttributes(node);
+        handler.attributesCompleted();
         Location location = parser.getLocation();
         if(location != null) {
             node.setLineNumber(location.getLineNumber());

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/SAXOMBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/SAXOMBuilder.java?rev=1728840&r1=1728839&r2=1728840&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/SAXOMBuilder.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/SAXOMBuilder.java Sat Feb  6 14:15:15 2016
@@ -43,7 +43,7 @@ public final class SAXOMBuilder extends
     private final SAXSource source;
     
     public SAXOMBuilder(NodeFactory nodeFactory, Model model, SAXSource source, boolean expandEntityReferences) {
-        super(nodeFactory, model);
+        super(nodeFactory, model, null);
         this.expandEntityReferences = expandEntityReferences;
         this.source = source;
     }
@@ -103,6 +103,8 @@ public final class SAXOMBuilder extends
             element.addNamespaceDeclaration(namespaces[2*i+1], namespaces[2*i]);
         }
         BuilderUtil.setNamespace(element, namespaceURI, prefix);
+        // TODO: not entirely correct, but should work
+        handler.attributesCompleted();
         return element;
     }
 
@@ -137,4 +139,8 @@ public final class SAXOMBuilder extends
     public void createOMEntityReference(String name, String replacementText) {
         handler.createEntityReference(name, replacementText);
     }
+
+    public int next() throws OMException {
+        throw new UnsupportedOperationException();
+    }
 }

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomSourcedElementSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomSourcedElementSupport.aj?rev=1728840&r1=1728839&r2=1728840&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomSourcedElementSupport.aj (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomSourcedElementSupport.aj Sat Feb  6 14:15:15 2016
@@ -28,6 +28,7 @@ import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.OMNode;
 import org.apache.axiom.om.OMOutputFormat;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.om.OMXMLStreamReaderConfiguration;
 import org.apache.axiom.om.QNameAwareOMDataSource;
 import org.apache.axiom.om.impl.common.DeferredNamespace;
@@ -42,7 +43,6 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import javax.xml.namespace.QName;
-import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
@@ -214,14 +214,9 @@ public aspect AxiomSourcedElementSupport
                 }
             }
 
+            OMXMLParserWrapper builder;
             if (OMDataSourceUtil.isPushDataSource(dataSource)) {
-                // Set this before we start expanding; otherwise this would result in an infinite recursion
-                isExpanded = true;
-                try {
-                    new PushOMBuilder(this, dataSource).expand();
-                } catch (XMLStreamException ex) {
-                    throw new OMException("Failed to expand data source", ex);
-                }
+                builder = new PushOMBuilder(this, dataSource);
             } else {
                 // Get the XMLStreamReader
                 XMLStreamReader readerFromDS;
@@ -230,29 +225,14 @@ public aspect AxiomSourcedElementSupport
                 } catch (XMLStreamException ex) {
                     throw new OMException("Error obtaining parser from data source for element " + getPrintableName(), ex);
                 }
-                
-                // Advance past the START_DOCUMENT to the start tag.
-                // Remember the character encoding.
-                String characterEncoding = readerFromDS.getCharacterEncodingScheme();
-                if (characterEncoding != null) {
-                    characterEncoding = readerFromDS.getEncoding();
-                }
-                try {
-                    if (readerFromDS.getEventType() != XMLStreamConstants.START_ELEMENT) {
-                        while (readerFromDS.next() != XMLStreamConstants.START_ELEMENT) ;
-                    }
-                } catch (XMLStreamException ex) {
-                    throw new OMException("Error parsing data source document for element " + getLocalName(), ex);
-                }
-    
-                validateName(readerFromDS.getPrefix(), readerFromDS.getLocalName(), readerFromDS.getNamespaceURI());
-    
-                // Set the builder for this element. Note that the StAXOMBuilder constructor will also
-                // update the namespace of the element, so we don't need to do that here.
-                isExpanded = true;
-                coreSetBuilder(new StAXOMBuilder(coreGetNodeFactory(), readerFromDS, this, characterEncoding));
-                setComplete(false);
+                builder = new StAXOMBuilder(coreGetNodeFactory(), readerFromDS, this);
             }
+            isExpanded = true;
+            coreSetBuilder(builder);
+            coreSetState(ATTRIBUTES_PENDING);
+            do {
+                builder.next();
+            } while (getState() == ATTRIBUTES_PENDING);
         }
     }
     

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/builder/StAXSOAPModelBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/builder/StAXSOAPModelBuilder.java?rev=1728840&r1=1728839&r2=1728840&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/builder/StAXSOAPModelBuilder.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/builder/StAXSOAPModelBuilder.java Sat Feb  6 14:15:15 2016
@@ -43,7 +43,7 @@ public class StAXSOAPModelBuilder extend
     public StAXSOAPModelBuilder(NodeFactory nodeFactory, XMLStreamReader parser,
             boolean autoClose, Detachable detachable, Closeable closeable) {
         super(nodeFactory, parser, autoClose, detachable, closeable, new SOAPModel(),
-                SOAPPayloadSelector.INSTANCE);
+                SOAPPayloadSelector.INSTANCE, 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
         // SOAPMessage.

Modified: webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java?rev=1728840&r1=1728839&r2=1728840&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java (original)
+++ webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMBuilder.java Sat Feb  6 14:15:15 2016
@@ -43,7 +43,7 @@ public class FOMBuilder extends StAXOMBu
 
     public FOMBuilder(final FOMFactory factory, XMLStreamReader parser, ParserOptions parserOptions) {
         super(FOMNodeFactory.INSTANCE, new FOMStAXFilter(parser, parserOptions), false, (Detachable)null, (Closeable)null,
-                factory, PayloadSelector.DEFAULT);
+                factory, PayloadSelector.DEFAULT, null);
         this.parserOptions = parserOptions;
         this.fomfactory = factory;
         addNodePostProcessor(new NodePostProcessor() {