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/04/26 20:29:26 UTC

svn commit: r1741068 - in /webservices/axiom/trunk: aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/ testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/ testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap...

Author: veithen
Date: Tue Apr 26 18:29:26 2016
New Revision: 1741068

URL: http://svn.apache.org/viewvc?rev=1741068&view=rev
Log:
Eliminate duplicate code from AbstractOMMetaFactory. This also enables building a SOAPEnvelope from a SAXSource.

Added:
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/BuilderFactory.java
      - copied, changed from r1740922, webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/AbstractOMMetaFactory.java
    webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/builder/TestCreateSOAPModelBuilderFromSAXSource.java   (with props)
Modified:
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/AbstractOMMetaFactory.java
    webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/AbstractOMMetaFactory.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/AbstractOMMetaFactory.java?rev=1741068&r1=1741067&r2=1741068&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/AbstractOMMetaFactory.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/AbstractOMMetaFactory.java Tue Apr 26 18:29:26 2016
@@ -18,49 +18,22 @@
  */
 package org.apache.axiom.om.impl.common.factory;
 
-import java.io.Closeable;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.net.URL;
+import static org.apache.axiom.om.impl.common.factory.BuilderFactory.OM;
+import static org.apache.axiom.om.impl.common.factory.BuilderFactory.SOAP;
 
-import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.transform.Source;
-import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.sax.SAXSource;
-import javax.xml.transform.stream.StreamSource;
 
-import org.apache.axiom.core.CoreNode;
 import org.apache.axiom.core.NodeFactory;
-import org.apache.axiom.core.impl.builder.BuilderImpl;
-import org.apache.axiom.core.impl.builder.BuilderListener;
-import org.apache.axiom.core.impl.builder.PlainXMLModel;
-import org.apache.axiom.core.stream.FilteredXmlInput;
-import org.apache.axiom.core.stream.XmlInput;
-import org.apache.axiom.core.stream.dom.DOMInput;
-import org.apache.axiom.core.stream.sax.SAXInput;
-import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMMetaFactory;
 import org.apache.axiom.om.OMXMLParserWrapper;
-import org.apache.axiom.om.impl.builder.Detachable;
-import org.apache.axiom.om.impl.common.builder.OMXMLParserWrapperImpl;
-import org.apache.axiom.om.impl.stream.stax.StAXPullInput;
 import org.apache.axiom.om.util.StAXParserConfiguration;
-import org.apache.axiom.om.util.StAXUtils;
 import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axiom.soap.SOAPModelBuilder;
 import org.apache.axiom.soap.SOAPProcessingException;
-import org.apache.axiom.soap.impl.common.builder.SOAPFilter;
-import org.apache.axiom.soap.impl.common.builder.SOAPModel;
-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;
-import org.apache.axiom.util.stax.XMLEventUtils;
-import org.apache.axiom.util.stax.XMLFragmentStreamReader;
 import org.apache.axiom.util.stax.xop.MimePartProvider;
-import org.apache.axiom.util.stax.xop.XOPDecodingStreamReader;
 import org.w3c.dom.Node;
 import org.xml.sax.InputSource;
 
@@ -69,232 +42,52 @@ import org.xml.sax.InputSource;
  * ({@link org.apache.axiom.core.impl.builder.BuilderImpl} and its subclasses).
  */
 public abstract class AbstractOMMetaFactory implements OMMetaFactory {
-    private final static class SourceInfo {
-        private final XMLStreamReader reader;
-        private final Detachable detachable;
-        private final Closeable closeable;
-        
-        SourceInfo(XMLStreamReader reader, Detachable detachable, Closeable closeable) {
-            this.reader = reader;
-            this.detachable = detachable;
-            this.closeable = closeable;
-        }
-
-        XMLStreamReader getReader() {
-            return reader;
-        }
-
-        Detachable getDetachable() {
-            return detachable;
-        }
-
-        Closeable getCloseable() {
-            return closeable;
-        }
-    }
-    
     private final NodeFactory nodeFactory;
     
     public AbstractOMMetaFactory(NodeFactory nodeFactory) {
         this.nodeFactory = nodeFactory;
     }
     
-    private static SourceInfo createXMLStreamReader(StAXParserConfiguration configuration,
-            InputSource is, boolean makeDetachable) {
-        XMLStreamReader reader;
-        Detachable detachable;
-        Closeable closeable;
-        try {
-            if (is.getByteStream() != null) {
-                String systemId = is.getSystemId();
-                String encoding = is.getEncoding();
-                InputStream in = is.getByteStream();
-                if (makeDetachable) {
-                    DetachableInputStream detachableInputStream = new DetachableInputStream(in, false);
-                    in = detachableInputStream;
-                    detachable = detachableInputStream;
-                } else {
-                    detachable = null;
-                }
-                if (systemId != null) {
-                    if (encoding == null) {
-                        reader = StAXUtils.createXMLStreamReader(configuration, systemId, in);
-                    } else {
-                        throw new UnsupportedOperationException();
-                    }
-                } else {
-                    if (encoding == null) {
-                        reader = StAXUtils.createXMLStreamReader(configuration, in);
-                    } else {
-                        reader = StAXUtils.createXMLStreamReader(configuration, in, encoding);
-                    }
-                }
-                closeable = null;
-            } else if (is.getCharacterStream() != null) {
-                Reader in = is.getCharacterStream();
-                if (makeDetachable) {
-                    DetachableReader detachableReader = new DetachableReader(in);
-                    in = detachableReader;
-                    detachable = detachableReader;
-                } else {
-                    detachable = null;
-                }
-                reader = StAXUtils.createXMLStreamReader(configuration, in);
-                closeable = null;
-            } else {
-                String systemId = is.getSystemId();
-                InputStream in = new URL(systemId).openConnection().getInputStream();
-                if (makeDetachable) {
-                    DetachableInputStream detachableInputStream = new DetachableInputStream(in, true);
-                    in = detachableInputStream;
-                    detachable = detachableInputStream;
-                } else {
-                    detachable = null;
-                }
-                reader = StAXUtils.createXMLStreamReader(configuration, systemId, in);
-                closeable = in;
-            }
-        } catch (XMLStreamException ex) {
-            throw new OMException(ex);
-        } catch (IOException ex) {
-            throw new OMException(ex);
-        }
-        return new SourceInfo(reader, detachable, closeable);
-    }
-    
-    private static XMLStreamReader getXMLStreamReader(XMLStreamReader originalReader) {
-        int eventType = originalReader.getEventType();
-        switch (eventType) {
-            case XMLStreamReader.START_DOCUMENT:
-                return originalReader;
-            case XMLStreamReader.START_ELEMENT:
-                return new XMLFragmentStreamReader(originalReader);
-            default:
-                throw new OMException("The supplied XMLStreamReader is in an unexpected state ("
-                        + XMLEventUtils.getEventTypeString(eventType) + ")");
-        }
-    }
-    
-    private OMXMLParserWrapper createOMBuilder(XmlInput input, boolean repairNamespaces, Detachable detachable) {
-        return new OMXMLParserWrapperImpl(new BuilderImpl(input, nodeFactory, PlainXMLModel.INSTANCE, null, repairNamespaces), detachable);
-    }
-    
-    private SOAPModelBuilder createSOAPModelBuilder(XmlInput input,
-            boolean repairNamespaces, Detachable detachable) {
-        BuilderImpl builder = new BuilderImpl(new FilteredXmlInput(input, SOAPFilter.INSTANCE), nodeFactory, new SOAPModel(), null, true);
-        // 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.
-        builder.addListener(new BuilderListener() {
-            private AxiomSOAPMessage message;
-            
-            @Override
-            public Runnable nodeAdded(CoreNode node, int depth) {
-                if (node instanceof AxiomSOAPMessage) {
-                    message = (AxiomSOAPMessage)node;
-                } else if (message != null && node instanceof AxiomSOAPEnvelope) {
-                    message.initSOAPFactory((SOAPFactory)((AxiomSOAPEnvelope)node).getOMFactory());
-                }
-                return null;
-            }
-        });
-        return new SOAPModelBuilderImpl(builder, detachable);
-    }
-    
     public OMXMLParserWrapper createStAXOMBuilder(XMLStreamReader parser) {
-        return createOMBuilder(
-                new StAXPullInput(getXMLStreamReader(parser), false, null),
-                true, null);
+        return OM.createBuilder(nodeFactory, parser);
     }
 
     public OMXMLParserWrapper createOMBuilder(StAXParserConfiguration configuration, InputSource is) {
-        SourceInfo sourceInfo = createXMLStreamReader(configuration, is, true);
-        return createOMBuilder(
-                new StAXPullInput(sourceInfo.getReader(), true, sourceInfo.getCloseable()),
-                false, sourceInfo.getDetachable());
-    }
-    
-    private static InputSource toInputSource(StreamSource source) {
-        InputSource is = new InputSource();
-        is.setByteStream(source.getInputStream());
-        is.setCharacterStream(source.getReader());
-        is.setPublicId(source.getPublicId());
-        is.setSystemId(source.getSystemId());
-        return is;
+        return OM.createBuilder(nodeFactory, configuration, is);
     }
     
     public OMXMLParserWrapper createOMBuilder(Source source) {
-        if (source instanceof SAXSource) {
-            return createOMBuilder((SAXSource)source, true);
-        } else if (source instanceof DOMSource) {
-            return createOMBuilder(((DOMSource)source).getNode(), true);
-        } else if (source instanceof StreamSource) {
-            return createOMBuilder(StAXParserConfiguration.DEFAULT, toInputSource((StreamSource)source));
-        } else {
-            try {
-                return createOMBuilder(
-                        new StAXPullInput(StAXUtils.getXMLInputFactory().createXMLStreamReader(source), true, null),
-                        true, null);
-            } catch (XMLStreamException ex) {
-                throw new OMException(ex);
-            }
-        }
+        return OM.createBuilder(nodeFactory, StAXParserConfiguration.DEFAULT, source);
     }
 
     public OMXMLParserWrapper createOMBuilder(Node node, boolean expandEntityReferences) {
-        return createOMBuilder(
-                new DOMInput(node, expandEntityReferences),
-                true, null);
+        return OM.createBuilder(nodeFactory, node, expandEntityReferences);
     }
 
     public OMXMLParserWrapper createOMBuilder(SAXSource source, boolean expandEntityReferences) {
-        return createOMBuilder(new SAXInput(source, expandEntityReferences), true, null);
+        return OM.createBuilder(nodeFactory, source, expandEntityReferences);
     }
 
     public OMXMLParserWrapper createOMBuilder(StAXParserConfiguration configuration,
             InputSource rootPart, MimePartProvider mimePartProvider) {
-        SourceInfo sourceInfo = createXMLStreamReader(configuration, rootPart, false);
-        return createOMBuilder(
-                new StAXPullInput(new XOPDecodingStreamReader(sourceInfo.getReader(), mimePartProvider), true, sourceInfo.getCloseable()), 
-                false, mimePartProvider instanceof Detachable ? (Detachable)mimePartProvider : null);
+        return OM.createBuilder(nodeFactory, configuration, rootPart, mimePartProvider);
     }
 
     public SOAPModelBuilder createStAXSOAPModelBuilder(XMLStreamReader parser) {
-        return createSOAPModelBuilder(new StAXPullInput(getXMLStreamReader(parser), false, null), true, null);
+        return SOAP.createBuilder(nodeFactory, parser);
     }
 
     public SOAPModelBuilder createSOAPModelBuilder(StAXParserConfiguration configuration, InputSource is) {
-        SourceInfo sourceInfo = createXMLStreamReader(configuration, is, true);
-        return createSOAPModelBuilder(
-                new StAXPullInput(sourceInfo.getReader(), true, sourceInfo.getCloseable()),
-                false, sourceInfo.getDetachable());
+        return SOAP.createBuilder(nodeFactory, configuration, is);
     }
 
     public SOAPModelBuilder createSOAPModelBuilder(Source source) {
-        if (source instanceof SAXSource) {
-            // TODO: supporting this will require some refactoring of the builders
-            throw new UnsupportedOperationException();
-        } else if (source instanceof DOMSource) {
-            return createSOAPModelBuilder(new DOMInput(((DOMSource)source).getNode(), true), true, null);
-        } else if (source instanceof StreamSource) {
-            return createSOAPModelBuilder(StAXParserConfiguration.SOAP,
-                    toInputSource((StreamSource)source));
-        } else {
-            try {
-                return createSOAPModelBuilder(new StAXPullInput(StAXUtils.getXMLInputFactory().createXMLStreamReader(source), true, null), true, null);
-            } catch (XMLStreamException ex) {
-                throw new OMException(ex);
-            }
-        }
+        return SOAP.createBuilder(nodeFactory, StAXParserConfiguration.SOAP, source);
     }
 
     public SOAPModelBuilder createSOAPModelBuilder(StAXParserConfiguration configuration,
             SOAPFactory soapFactory, InputSource rootPart, MimePartProvider mimePartProvider) {
-        SourceInfo sourceInfo = createXMLStreamReader(configuration, rootPart, false);
-        SOAPModelBuilder builder = createSOAPModelBuilder(
-                new StAXPullInput(new XOPDecodingStreamReader(sourceInfo.getReader(), mimePartProvider), true, sourceInfo.getCloseable()),
-                false,
-                mimePartProvider instanceof Detachable ? (Detachable)mimePartProvider : null);
+        SOAPModelBuilder builder = SOAP.createBuilder(nodeFactory, configuration, rootPart, mimePartProvider);
         if (builder.getSOAPMessage().getOMFactory() != soapFactory) {
             throw new SOAPProcessingException("Invalid SOAP namespace URI. " +
                     "Expected " + soapFactory.getSoapVersionURI(), SOAP12Constants.FAULT_CODE_SENDER);

Copied: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/BuilderFactory.java (from r1740922, webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/AbstractOMMetaFactory.java)
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/BuilderFactory.java?p2=webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/BuilderFactory.java&p1=webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/AbstractOMMetaFactory.java&r1=1740922&r2=1741068&rev=1741068&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/AbstractOMMetaFactory.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/BuilderFactory.java Tue Apr 26 18:29:26 2016
@@ -41,17 +41,14 @@ import org.apache.axiom.core.stream.XmlI
 import org.apache.axiom.core.stream.dom.DOMInput;
 import org.apache.axiom.core.stream.sax.SAXInput;
 import org.apache.axiom.om.OMException;
-import org.apache.axiom.om.OMMetaFactory;
 import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.om.impl.builder.Detachable;
 import org.apache.axiom.om.impl.common.builder.OMXMLParserWrapperImpl;
 import org.apache.axiom.om.impl.stream.stax.StAXPullInput;
 import org.apache.axiom.om.util.StAXParserConfiguration;
 import org.apache.axiom.om.util.StAXUtils;
-import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axiom.soap.SOAPModelBuilder;
-import org.apache.axiom.soap.SOAPProcessingException;
 import org.apache.axiom.soap.impl.common.builder.SOAPFilter;
 import org.apache.axiom.soap.impl.common.builder.SOAPModel;
 import org.apache.axiom.soap.impl.common.builder.SOAPModelBuilderImpl;
@@ -64,11 +61,7 @@ import org.apache.axiom.util.stax.xop.XO
 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 OMMetaFactory {
+abstract class BuilderFactory<T extends OMXMLParserWrapper> {
     private final static class SourceInfo {
         private final XMLStreamReader reader;
         private final Detachable detachable;
@@ -93,12 +86,40 @@ public abstract class AbstractOMMetaFact
         }
     }
     
-    private final NodeFactory nodeFactory;
-    
-    public AbstractOMMetaFactory(NodeFactory nodeFactory) {
-        this.nodeFactory = nodeFactory;
-    }
-    
+    final static BuilderFactory<OMXMLParserWrapper> OM = new BuilderFactory<OMXMLParserWrapper>() {
+        @Override
+        OMXMLParserWrapper createBuilder(NodeFactory nodeFactory, XmlInput input,
+                boolean repairNamespaces, Detachable detachable) {
+            return new OMXMLParserWrapperImpl(new BuilderImpl(input, nodeFactory,
+                    PlainXMLModel.INSTANCE, null, repairNamespaces), detachable);
+        }
+    };
+
+    final static BuilderFactory<SOAPModelBuilder> SOAP = new BuilderFactory<SOAPModelBuilder>() {
+        @Override
+        SOAPModelBuilder createBuilder(NodeFactory nodeFactory, XmlInput input,
+                boolean repairNamespaces, Detachable detachable) {
+            BuilderImpl builder = new BuilderImpl(new FilteredXmlInput(input, SOAPFilter.INSTANCE), nodeFactory, new SOAPModel(), null, true);
+            // 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.
+            builder.addListener(new BuilderListener() {
+                private AxiomSOAPMessage message;
+                
+                @Override
+                public Runnable nodeAdded(CoreNode node, int depth) {
+                    if (node instanceof AxiomSOAPMessage) {
+                        message = (AxiomSOAPMessage)node;
+                    } else if (message != null && node instanceof AxiomSOAPEnvelope) {
+                        message.initSOAPFactory((SOAPFactory)((AxiomSOAPEnvelope)node).getOMFactory());
+                    }
+                    return null;
+                }
+            });
+            return new SOAPModelBuilderImpl(builder, detachable);
+        }
+    };
+
     private static SourceInfo createXMLStreamReader(StAXParserConfiguration configuration,
             InputSource is, boolean makeDetachable) {
         XMLStreamReader reader;
@@ -162,77 +183,48 @@ public abstract class AbstractOMMetaFact
         return new SourceInfo(reader, detachable, closeable);
     }
     
-    private static XMLStreamReader getXMLStreamReader(XMLStreamReader originalReader) {
-        int eventType = originalReader.getEventType();
+    abstract T createBuilder(NodeFactory nodeFactory, XmlInput input, boolean repairNamespaces,
+            Detachable detachable);
+
+    final T createBuilder(NodeFactory nodeFactory, XMLStreamReader reader) {
+        int eventType = reader.getEventType();
         switch (eventType) {
             case XMLStreamReader.START_DOCUMENT:
-                return originalReader;
+                break;
             case XMLStreamReader.START_ELEMENT:
-                return new XMLFragmentStreamReader(originalReader);
+                reader = new XMLFragmentStreamReader(reader);
+                break;
             default:
                 throw new OMException("The supplied XMLStreamReader is in an unexpected state ("
                         + XMLEventUtils.getEventTypeString(eventType) + ")");
         }
-    }
-    
-    private OMXMLParserWrapper createOMBuilder(XmlInput input, boolean repairNamespaces, Detachable detachable) {
-        return new OMXMLParserWrapperImpl(new BuilderImpl(input, nodeFactory, PlainXMLModel.INSTANCE, null, repairNamespaces), detachable);
-    }
-    
-    private SOAPModelBuilder createSOAPModelBuilder(XmlInput input,
-            boolean repairNamespaces, Detachable detachable) {
-        BuilderImpl builder = new BuilderImpl(new FilteredXmlInput(input, SOAPFilter.INSTANCE), nodeFactory, new SOAPModel(), null, true);
-        // 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.
-        builder.addListener(new BuilderListener() {
-            private AxiomSOAPMessage message;
-            
-            @Override
-            public Runnable nodeAdded(CoreNode node, int depth) {
-                if (node instanceof AxiomSOAPMessage) {
-                    message = (AxiomSOAPMessage)node;
-                } else if (message != null && node instanceof AxiomSOAPEnvelope) {
-                    message.initSOAPFactory((SOAPFactory)((AxiomSOAPEnvelope)node).getOMFactory());
-                }
-                return null;
-            }
-        });
-        return new SOAPModelBuilderImpl(builder, detachable);
-    }
-    
-    public OMXMLParserWrapper createStAXOMBuilder(XMLStreamReader parser) {
-        return createOMBuilder(
-                new StAXPullInput(getXMLStreamReader(parser), false, null),
-                true, null);
+        return createBuilder(nodeFactory, new StAXPullInput(reader, false, null), true, null);
     }
 
-    public OMXMLParserWrapper createOMBuilder(StAXParserConfiguration configuration, InputSource is) {
+    final T createBuilder(NodeFactory nodeFactory, StAXParserConfiguration configuration,
+            InputSource is) {
         SourceInfo sourceInfo = createXMLStreamReader(configuration, is, true);
-        return createOMBuilder(
-                new StAXPullInput(sourceInfo.getReader(), true, sourceInfo.getCloseable()),
-                false, sourceInfo.getDetachable());
-    }
-    
-    private static InputSource toInputSource(StreamSource source) {
-        InputSource is = new InputSource();
-        is.setByteStream(source.getInputStream());
-        is.setCharacterStream(source.getReader());
-        is.setPublicId(source.getPublicId());
-        is.setSystemId(source.getSystemId());
-        return is;
+        return createBuilder(nodeFactory,
+                new StAXPullInput(sourceInfo.getReader(), true, sourceInfo.getCloseable()), false,
+                sourceInfo.getDetachable());
     }
-    
-    public OMXMLParserWrapper createOMBuilder(Source source) {
+
+    final T createBuilder(NodeFactory nodeFactory, StAXParserConfiguration configuration, Source source) {
         if (source instanceof SAXSource) {
-            return createOMBuilder((SAXSource)source, true);
+            return createBuilder(nodeFactory, (SAXSource)source, true);
         } else if (source instanceof DOMSource) {
-            return createOMBuilder(((DOMSource)source).getNode(), true);
+            return createBuilder(nodeFactory, ((DOMSource)source).getNode(), true);
         } else if (source instanceof StreamSource) {
-            return createOMBuilder(StAXParserConfiguration.DEFAULT, toInputSource((StreamSource)source));
+            StreamSource streamSource = (StreamSource)source;
+            InputSource is = new InputSource();
+            is.setByteStream(streamSource.getInputStream());
+            is.setCharacterStream(streamSource.getReader());
+            is.setPublicId(streamSource.getPublicId());
+            is.setSystemId(streamSource.getSystemId());
+            return createBuilder(nodeFactory, configuration, is);
         } else {
             try {
-                return createOMBuilder(
+                return createBuilder(nodeFactory,
                         new StAXPullInput(StAXUtils.getXMLInputFactory().createXMLStreamReader(source), true, null),
                         true, null);
             } catch (XMLStreamException ex) {
@@ -241,64 +233,22 @@ public abstract class AbstractOMMetaFact
         }
     }
 
-    public OMXMLParserWrapper createOMBuilder(Node node, boolean expandEntityReferences) {
-        return createOMBuilder(
-                new DOMInput(node, expandEntityReferences),
-                true, null);
+    final T createBuilder(NodeFactory nodeFactory, Node node, boolean expandEntityReferences) {
+        return createBuilder(nodeFactory, new DOMInput(node, expandEntityReferences), true, null);
     }
 
-    public OMXMLParserWrapper createOMBuilder(SAXSource source, boolean expandEntityReferences) {
-        return createOMBuilder(new SAXInput(source, expandEntityReferences), true, null);
+    final T createBuilder(NodeFactory nodeFactory, SAXSource source, boolean expandEntityReferences) {
+        return createBuilder(nodeFactory, new SAXInput(source, expandEntityReferences), true, null);
     }
 
-    public OMXMLParserWrapper createOMBuilder(StAXParserConfiguration configuration,
+    final T createBuilder(NodeFactory nodeFactory, StAXParserConfiguration configuration,
             InputSource rootPart, MimePartProvider mimePartProvider) {
         SourceInfo sourceInfo = createXMLStreamReader(configuration, rootPart, false);
-        return createOMBuilder(
-                new StAXPullInput(new XOPDecodingStreamReader(sourceInfo.getReader(), mimePartProvider), true, sourceInfo.getCloseable()), 
-                false, mimePartProvider instanceof Detachable ? (Detachable)mimePartProvider : null);
-    }
-
-    public SOAPModelBuilder createStAXSOAPModelBuilder(XMLStreamReader parser) {
-        return createSOAPModelBuilder(new StAXPullInput(getXMLStreamReader(parser), false, null), true, null);
-    }
-
-    public SOAPModelBuilder createSOAPModelBuilder(StAXParserConfiguration configuration, InputSource is) {
-        SourceInfo sourceInfo = createXMLStreamReader(configuration, is, true);
-        return createSOAPModelBuilder(
-                new StAXPullInput(sourceInfo.getReader(), true, sourceInfo.getCloseable()),
-                false, sourceInfo.getDetachable());
-    }
-
-    public SOAPModelBuilder createSOAPModelBuilder(Source source) {
-        if (source instanceof SAXSource) {
-            // TODO: supporting this will require some refactoring of the builders
-            throw new UnsupportedOperationException();
-        } else if (source instanceof DOMSource) {
-            return createSOAPModelBuilder(new DOMInput(((DOMSource)source).getNode(), true), true, null);
-        } else if (source instanceof StreamSource) {
-            return createSOAPModelBuilder(StAXParserConfiguration.SOAP,
-                    toInputSource((StreamSource)source));
-        } else {
-            try {
-                return createSOAPModelBuilder(new StAXPullInput(StAXUtils.getXMLInputFactory().createXMLStreamReader(source), true, null), true, null);
-            } catch (XMLStreamException ex) {
-                throw new OMException(ex);
-            }
-        }
-    }
-
-    public SOAPModelBuilder createSOAPModelBuilder(StAXParserConfiguration configuration,
-            SOAPFactory soapFactory, InputSource rootPart, MimePartProvider mimePartProvider) {
-        SourceInfo sourceInfo = createXMLStreamReader(configuration, rootPart, false);
-        SOAPModelBuilder builder = createSOAPModelBuilder(
-                new StAXPullInput(new XOPDecodingStreamReader(sourceInfo.getReader(), mimePartProvider), true, sourceInfo.getCloseable()),
+        return createBuilder(nodeFactory,
+                new StAXPullInput(
+                        new XOPDecodingStreamReader(sourceInfo.getReader(), mimePartProvider), true,
+                        sourceInfo.getCloseable()),
                 false,
-                mimePartProvider instanceof Detachable ? (Detachable)mimePartProvider : null);
-        if (builder.getSOAPMessage().getOMFactory() != soapFactory) {
-            throw new SOAPProcessingException("Invalid SOAP namespace URI. " +
-                    "Expected " + soapFactory.getSoapVersionURI(), SOAP12Constants.FAULT_CODE_SENDER);
-        }
-        return builder;
+                mimePartProvider instanceof Detachable ? (Detachable) mimePartProvider : null);
     }
 }

Modified: webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java?rev=1741068&r1=1741067&r2=1741068&view=diff
==============================================================================
--- webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java (original)
+++ webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java Tue Apr 26 18:29:26 2016
@@ -130,6 +130,7 @@ public class SOAPTestSuiteBuilder extend
         addTest(new org.apache.axiom.ts.soap.builder.TestCommentInEpilog(metaFactory, spec));
         addTest(new org.apache.axiom.ts.soap.builder.TestCommentInProlog(metaFactory, spec));
         addTest(new org.apache.axiom.ts.soap.builder.TestCreateSOAPModelBuilderFromDOMSource(metaFactory, spec));
+        addTest(new org.apache.axiom.ts.soap.builder.TestCreateSOAPModelBuilderFromSAXSource(metaFactory, spec));
         addTest(new org.apache.axiom.ts.soap.builder.TestCreateSOAPModelBuilderMTOMContentTypeMismatch(metaFactory, spec));
         addTest(new org.apache.axiom.ts.soap.builder.TestDTD(metaFactory, spec));
         if (supportsOMSourcedElement) {

Added: webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/builder/TestCreateSOAPModelBuilderFromSAXSource.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/builder/TestCreateSOAPModelBuilderFromSAXSource.java?rev=1741068&view=auto
==============================================================================
--- webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/builder/TestCreateSOAPModelBuilderFromSAXSource.java (added)
+++ webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/builder/TestCreateSOAPModelBuilderFromSAXSource.java Tue Apr 26 18:29:26 2016
@@ -0,0 +1,63 @@
+/*
+ * 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.ts.soap.builder;
+
+import static com.google.common.truth.Truth.assertAbout;
+import static com.google.common.truth.Truth.assertThat;
+import static org.apache.axiom.truth.xml.XMLTruth.xml;
+
+import java.io.InputStream;
+
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.transform.sax.SAXSource;
+
+import org.apache.axiom.om.OMDocument;
+import org.apache.axiom.om.OMMetaFactory;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axiom.soap.SOAPMessage;
+import org.apache.axiom.ts.jaxp.SAXImplementation;
+import org.apache.axiom.ts.soap.SOAPSample;
+import org.apache.axiom.ts.soap.SOAPSampleSet;
+import org.apache.axiom.ts.soap.SOAPSpec;
+import org.apache.axiom.ts.soap.SOAPTestCase;
+import org.xml.sax.InputSource;
+import org.xml.sax.XMLReader;
+
+public class TestCreateSOAPModelBuilderFromSAXSource extends SOAPTestCase {
+    public TestCreateSOAPModelBuilderFromSAXSource(OMMetaFactory metaFactory, SOAPSpec spec) {
+        super(metaFactory, spec);
+    }
+
+    @Override
+    protected void runTest() throws Throwable {
+        SAXParserFactory parserFactory = SAXImplementation.XERCES.newSAXParserFactory();
+        parserFactory.setNamespaceAware(true);
+        XMLReader reader = parserFactory.newSAXParser().getXMLReader();
+        SOAPSample sample = SOAPSampleSet.SIMPLE_FAULT.getMessage(spec);
+        InputStream in = sample.getInputStream();
+        InputSource is = new InputSource(in);
+        is.setEncoding(sample.getEncoding());
+        SOAPMessage message = OMXMLBuilderFactory.createSOAPModelBuilder(metaFactory, new SAXSource(reader, is)).getSOAPMessage();
+        assertAbout(xml())
+                .that(xml(OMDocument.class, message))
+                .ignoringWhitespaceInPrologAndEpilog()
+                .hasSameContentAs(sample.getEnvelope());
+        assertThat(message.getSOAPEnvelope().getBody().getFault()).isNotNull();
+    }
+}

Propchange: webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/builder/TestCreateSOAPModelBuilderFromSAXSource.java
------------------------------------------------------------------------------
    svn:eol-style = native