Author: veithen Date: Tue May 24 07:29:27 2016 New Revision: 1745310 URL: http://svn.apache.org/viewvc?rev=1745310&view=rev Log: Get the XmlHandler by unwrapping the XMLStreamWriter.
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/MTOMXMLStreamWriterImpl.java webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/XmlHandlerStreamWriter.java Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/MTOMXMLStreamWriterImpl.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/MTOMXMLStreamWriterImpl.java?rev=1745310&r1=1745309&r2=1745310&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/MTOMXMLStreamWriterImpl.java (original) +++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/MTOMXMLStreamWriterImpl.java Tue May 24 07:29:27 2016 @@ -34,7 +34,6 @@ import org.apache.axiom.attachments.life import org.apache.axiom.core.stream.StreamException; import org.apache.axiom.core.stream.XmlHandler; import org.apache.axiom.core.stream.serializer.Serializer; -import org.apache.axiom.ext.stax.datahandler.DataHandlerProvider; import org.apache.axiom.ext.stax.datahandler.DataHandlerWriter; import org.apache.axiom.om.OMOutputFormat; import org.apache.axiom.om.OMText; @@ -45,7 +44,6 @@ import org.apache.axiom.om.impl.stream.x import org.apache.axiom.om.util.CommonUtils; import org.apache.axiom.om.util.XMLStreamWriterFilter; import org.apache.axiom.util.io.IOUtils; -import org.apache.axiom.util.stax.XMLStreamWriterUtils; import org.apache.axiom.util.stax.xop.ContentIDGenerator; import org.apache.axiom.util.stax.xop.OptimizationPolicy; import org.apache.commons.logging.Log; @@ -78,7 +76,6 @@ public class MTOMXMLStreamWriterImpl ext private List<Part> otherParts = new LinkedList<Part>(); private OMOutputFormat format; private final OptimizationPolicy optimizationPolicy; - private final XmlHandler handler; // State variables private boolean isEndDocument = false; // has endElement been called @@ -95,7 +92,6 @@ public class MTOMXMLStreamWriterImpl ext } this.format = format; optimizationPolicy = new OptimizationPolicyImpl(format); - handler = null; } public MTOMXMLStreamWriterImpl(XMLStreamWriter xmlWriter) { @@ -157,6 +153,7 @@ public class MTOMXMLStreamWriterImpl ext Serializer serializer = new Serializer(rootPartOutputStream, encoding); + XmlHandler handler; if (format.isOptimized()) { ContentIDGenerator contentIDGenerator = new ContentIDGenerator() { public String generateContentID(String existingContentID) { @@ -205,6 +202,25 @@ public class MTOMXMLStreamWriterImpl ext } } + /** + * Get the {@link XmlHandler} events are serialized to. + * + * @return the {@link XmlHandler} or {@code null} if the {@link XMLStreamWriter} is not + * connected to a {@link XmlHandler} (e.g. because the {@link XMLStreamWriter} is user + * supplied) + */ + private XmlHandler getHandler() { + XMLStreamWriter writer = xmlWriter; + while (writer instanceof XMLStreamWriterFilter) { + writer = ((XMLStreamWriterFilter)writer).getDelegate(); + } + if (writer instanceof XmlHandlerStreamWriter) { + return ((XmlHandlerStreamWriter)writer).getHandler(); + } else { + return null; + } + } + public void writeStartElement(String string) throws XMLStreamException { xmlWriter.writeStartElement(string); depth++; @@ -265,10 +281,13 @@ public class MTOMXMLStreamWriterImpl ext if (format.isOptimized() && !isComplete & (isEndDocument || depth == 0)) { log.debug("The XML writing is completed. Now the attachments are written"); isComplete = true; - try { - handler.completed(); - } catch (StreamException ex) { - throw new XMLStreamException(ex); + XmlHandler handler = getHandler(); + if (handler != null) { + try { + handler.completed(); + } catch (StreamException ex) { + throw new XMLStreamException(ex); + } } } } @@ -476,7 +495,7 @@ public class MTOMXMLStreamWriterImpl ext } OutputStream outputStream; - XmlHandler handler = this.handler; + XmlHandler handler = getHandler(); // Remove the XOPEncodingFilterHandler wrapper if necessary if (handler instanceof XOPEncodingFilterHandler) { handler = ((XOPEncodingFilterHandler)handler).getParent(); Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/XmlHandlerStreamWriter.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/XmlHandlerStreamWriter.java?rev=1745310&r1=1745309&r2=1745310&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/XmlHandlerStreamWriter.java (original) +++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/XmlHandlerStreamWriter.java Tue May 24 07:29:27 2016 @@ -43,6 +43,10 @@ public class XmlHandlerStreamWriter exte this.serializer = serializer; } + public XmlHandler getHandler() { + return handler; + } + private static String normalize(String s) { return s == null ? "" : s; }