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/22 20:21:34 UTC

svn commit: r1731722 - in /webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl: common/serializer/push/ common/serializer/push/sax/ common/serializer/push/stax/ mixin/

Author: veithen
Date: Mon Feb 22 19:21:34 2016
New Revision: 1731722

URL: http://svn.apache.org/viewvc?rev=1731722&view=rev
Log:
Some cleanup of SerializerImpl.

Modified:
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/NamespaceHelper.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/SerializerImpl.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/XMLReaderImpl.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomDocumentSupport.aj
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomElementSupport.aj

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/NamespaceHelper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/NamespaceHelper.java?rev=1731722&r1=1731721&r2=1731722&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/NamespaceHelper.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/NamespaceHelper.java Mon Feb 22 19:21:34 2016
@@ -22,10 +22,10 @@ import org.apache.axiom.core.stream.Stre
 import org.apache.axiom.core.stream.XmlHandler;
 import org.apache.axiom.core.stream.XmlHandlerWrapper;
 
-final class NamespaceHelper extends XmlHandlerWrapper {
+public final class NamespaceHelper extends XmlHandlerWrapper {
     private final SerializerImpl serializer;
 
-    NamespaceHelper(SerializerImpl serializer, XmlHandler handler) {
+    public NamespaceHelper(SerializerImpl serializer, XmlHandler handler) {
         super(handler);
         this.serializer = serializer;
     }

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/SerializerImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/SerializerImpl.java?rev=1731722&r1=1731721&r2=1731722&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/SerializerImpl.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/SerializerImpl.java Mon Feb 22 19:21:34 2016
@@ -18,53 +18,9 @@
  */
 package org.apache.axiom.om.impl.common.serializer.push;
 
-import org.apache.axiom.core.CoreElement;
 import org.apache.axiom.core.stream.StreamException;
 import org.apache.axiom.core.stream.XmlHandler;
-import org.apache.axiom.om.OMContainer;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMNode;
-import org.apache.axiom.om.OMSerializable;
 
 public abstract class SerializerImpl implements XmlHandler {
-    /**
-     * Constructor.
-     * 
-     * @param root
-     *            the root node of the object model subtree that is being serialized; this
-     *            information is used by the serializer in scenarios that require access to the
-     *            namespace context of the parent of the root node
-     * @param namespaceRepairing
-     *            indicates if the serializer should perform namespace repairing
-     * @param preserveNamespaceContext
-     *            indicates if the namespace context determined by the ancestors of the root node
-     *            should be strictly preserved in the output
-     */
-    public XmlHandler buildHandler(OMSerializable root, boolean namespaceRepairing, boolean preserveNamespaceContext) {
-        OMElement contextElement;
-        if (root instanceof OMNode) {
-            OMContainer parent = ((OMNode)root).getParent();
-            if (parent instanceof OMElement) {
-                contextElement = (OMElement)parent; 
-            } else {
-                contextElement = null;
-            }
-        } else {
-            contextElement = null;
-        }
-        XmlHandler handler = this;
-        if (contextElement != null) {
-            if (preserveNamespaceContext) {
-                handler = new NamespaceContextPreservationFilterHandler(handler, (CoreElement)contextElement);
-            } else {
-                handler = new XsiTypeFilterHandler(handler, (CoreElement)contextElement);
-            }
-        }
-        if (namespaceRepairing) {
-            handler = new NamespaceHelper(this, handler);
-        }
-        return handler;
-    }
-
     protected abstract boolean isAssociated(String prefix, String namespace) throws StreamException;
 }

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/XMLReaderImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/XMLReaderImpl.java?rev=1731722&r1=1731721&r2=1731722&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/XMLReaderImpl.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/XMLReaderImpl.java Mon Feb 22 19:21:34 2016
@@ -20,8 +20,11 @@ package org.apache.axiom.om.impl.common.
 
 import java.io.IOException;
 
+import org.apache.axiom.core.CoreElement;
 import org.apache.axiom.core.stream.StreamException;
+import org.apache.axiom.core.stream.XmlHandler;
 import org.apache.axiom.om.OMOutputFormat;
+import org.apache.axiom.om.impl.common.serializer.push.NamespaceContextPreservationFilterHandler;
 import org.apache.axiom.om.impl.intf.AxiomContainer;
 import org.apache.axiom.util.sax.AbstractXMLReader;
 import org.xml.sax.InputSource;
@@ -45,9 +48,13 @@ public class XMLReaderImpl extends Abstr
     }
     
     private void parse() throws SAXException {
+        XmlHandler handler = new SAXSerializer(contentHandler, lexicalHandler);
+        CoreElement contextElement = root.getContextElement();
+        if (contextElement != null) {
+            handler = new NamespaceContextPreservationFilterHandler(handler, contextElement);
+        }
         try {
-            root.internalSerialize(new SAXSerializer(contentHandler, lexicalHandler).buildHandler(root, false, true),
-                    new OMOutputFormat(), cache);
+            root.internalSerialize(handler, new OMOutputFormat(), cache);
         } catch (StreamException ex) {
             throw (SAXException)ex.getCause();
         }

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java?rev=1731722&r1=1731721&r2=1731722&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java Mon Feb 22 19:21:34 2016
@@ -21,11 +21,9 @@ package org.apache.axiom.om.impl.common.
 import java.io.IOException;
 
 import org.apache.axiom.core.stream.StreamException;
-import org.apache.axiom.core.stream.XmlHandler;
 import org.apache.axiom.ext.stax.datahandler.DataHandlerProvider;
 import org.apache.axiom.ext.stax.datahandler.DataHandlerWriter;
 import org.apache.axiom.om.OMException;
-import org.apache.axiom.om.OMSerializable;
 import org.apache.axiom.om.impl.common.serializer.push.SerializerImpl;
 import org.apache.axiom.om.impl.intf.TextContent;
 import org.apache.axiom.util.stax.XMLStreamWriterUtils;
@@ -46,10 +44,6 @@ public class StAXSerializer extends Seri
         this.writer = writer;
     }
 
-    public XmlHandler buildHandler(OMSerializable root) {
-        return buildHandler(root, true, false);
-    }
-    
     public XMLStreamWriter getWriter() {
         return writer;
     }

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj?rev=1731722&r1=1731721&r2=1731722&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj Mon Feb 22 19:21:34 2016
@@ -31,6 +31,7 @@ import javax.xml.transform.sax.SAXSource
 
 import org.apache.axiom.core.Axis;
 import org.apache.axiom.core.Builder;
+import org.apache.axiom.core.CoreElement;
 import org.apache.axiom.core.CoreModelException;
 import org.apache.axiom.core.CoreNSAwareElement;
 import org.apache.axiom.core.CoreNode;
@@ -58,6 +59,8 @@ import org.apache.axiom.om.impl.common.S
 import org.apache.axiom.om.impl.common.builder.StAXHelper;
 import org.apache.axiom.om.impl.common.serializer.pull.OMXMLStreamReaderExAdapter;
 import org.apache.axiom.om.impl.common.serializer.pull.PullSerializer;
+import org.apache.axiom.om.impl.common.serializer.push.NamespaceHelper;
+import org.apache.axiom.om.impl.common.serializer.push.XsiTypeFilterHandler;
 import org.apache.axiom.om.impl.common.serializer.push.sax.XMLReaderImpl;
 import org.apache.axiom.om.impl.common.serializer.push.stax.StAXSerializer;
 import org.apache.axiom.om.impl.intf.AxiomChildNode;
@@ -263,13 +266,25 @@ public aspect AxiomContainerSupport {
         return result;
     }
 
+    private XmlHandler AxiomContainer.createSerializer(XMLStreamWriter writer) {
+        StAXSerializer serializer = new StAXSerializer(writer);
+        XmlHandler handler = serializer;
+        CoreElement contextElement = getContextElement();
+        if (contextElement != null) {
+            handler = new XsiTypeFilterHandler(handler, contextElement);
+        }
+        return new NamespaceHelper(serializer, handler);
+    }
+    
+    public abstract CoreElement AxiomContainer.getContextElement();
+    
     public final void AxiomContainer.serialize(XMLStreamWriter xmlWriter, boolean cache) throws XMLStreamException {
         // If the input xmlWriter is not an MTOMXMLStreamWriter, then wrapper it
         MTOMXMLStreamWriter writer = xmlWriter instanceof MTOMXMLStreamWriter ?
                 (MTOMXMLStreamWriter) xmlWriter : 
                     new MTOMXMLStreamWriter(xmlWriter);
         try {
-            internalSerialize(new StAXSerializer(writer).buildHandler(this), writer.getOutputFormat(), cache);
+            internalSerialize(createSerializer(writer), writer.getOutputFormat(), cache);
         } catch (StreamException ex) {
             throw AxiomExceptionTranslator.toXMLStreamException(ex);
         }
@@ -306,7 +321,7 @@ public aspect AxiomContainerSupport {
         MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(output, format, true);
         try {
             try {
-                internalSerialize(new StAXSerializer(writer).buildHandler(this), format, true);
+                internalSerialize(createSerializer(writer), format, true);
             } catch (StreamException ex) {
                 throw AxiomExceptionTranslator.toXMLStreamException(ex);
             }
@@ -321,7 +336,7 @@ public aspect AxiomContainerSupport {
         writer.setOutputFormat(format);
         try {
             try {
-                internalSerialize(new StAXSerializer(writer).buildHandler(this), format, true);
+                internalSerialize(createSerializer(writer), format, true);
             } catch (StreamException ex) {
                 throw AxiomExceptionTranslator.toXMLStreamException(ex);
             }
@@ -335,7 +350,7 @@ public aspect AxiomContainerSupport {
         MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(output, format, false);
         try {
             try {
-                internalSerialize(new StAXSerializer(writer).buildHandler(this), format, false);
+                internalSerialize(createSerializer(writer), format, false);
             } catch (StreamException ex) {
                 throw AxiomExceptionTranslator.toXMLStreamException(ex);
             }
@@ -351,7 +366,7 @@ public aspect AxiomContainerSupport {
         writer.setOutputFormat(format);
         try {
             try {
-                internalSerialize(new StAXSerializer(writer).buildHandler(this), format, false);
+                internalSerialize(createSerializer(writer), format, false);
             } catch (StreamException ex) {
                 throw AxiomExceptionTranslator.toXMLStreamException(ex);
             }

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomDocumentSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomDocumentSupport.aj?rev=1731722&r1=1731721&r2=1731722&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomDocumentSupport.aj (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomDocumentSupport.aj Mon Feb 22 19:21:34 2016
@@ -18,6 +18,7 @@
  */
 package org.apache.axiom.om.impl.mixin;
 
+import org.apache.axiom.core.CoreElement;
 import org.apache.axiom.core.CoreModelException;
 import org.apache.axiom.core.stream.StreamException;
 import org.apache.axiom.core.stream.XmlHandler;
@@ -128,4 +129,8 @@ public aspect AxiomDocumentSupport {
 
     public void AxiomDocument.checkDocumentElement(OMElement element) {
     }
+
+    public final CoreElement AxiomDocument.getContextElement() {
+        return null;
+    }
 }

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomElementSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomElementSupport.aj?rev=1731722&r1=1731721&r2=1731722&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomElementSupport.aj (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomElementSupport.aj Mon Feb 22 19:21:34 2016
@@ -618,4 +618,9 @@ public aspect AxiomElementSupport {
     public final int AxiomElement.getLineNumber() {
         return 0;
     }
+
+    public final CoreElement AxiomElement.getContextElement() {
+        CoreParentNode parent = coreGetParent();
+        return parent instanceof CoreElement ? (CoreElement)parent : null;
+    }
 }