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/27 20:16:10 UTC

svn commit: r1732666 - in /webservices/axiom/trunk/aspects: core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/ core-aspects/src/main/java/org/apache/axiom/core/stream/ core-aspects/src/main/java/org/apache/axiom/core/stream/sax/ om-aspects/sr...

Author: veithen
Date: Sat Feb 27 19:16:09 2016
New Revision: 1732666

URL: http://svn.apache.org/viewvc?rev=1732666&view=rev
Log:
Realign the XmlHandler API with the structure of the core model.

Modified:
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreCommentSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreProcessingInstructionSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/DocumentElementExtractingFilterHandler.java
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandler.java
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandlerWrapper.java
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/ContentHandlerXmlHandler.java
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/XmlHandlerContentHandler.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/SAXResultContentHandler.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/Context.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXHelper.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/stream/stax/XmlHandlerStreamWriter.java

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreCommentSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreCommentSupport.aj?rev=1732666&r1=1732665&r2=1732666&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreCommentSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreCommentSupport.aj Sat Feb 27 19:16:09 2016
@@ -34,7 +34,11 @@ public aspect CoreCommentSupport {
     public final <T> void CoreComment.init(ClonePolicy<T> policy, T options, CoreNode other) {
     }
     
-    public final void CoreComment.internalSerialize(XmlHandler handler, boolean cache) throws CoreModelException, StreamException {
-        handler.processComment(coreGetCharacterData().toString());
+    final void CoreComment.serializeStartEvent(XmlHandler handler) throws CoreModelException, StreamException {
+        handler.startComment();
+    }
+
+    final void CoreComment.serializeEndEvent(XmlHandler handler) throws StreamException {
+        handler.endComment();
     }
 }

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreProcessingInstructionSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreProcessingInstructionSupport.aj?rev=1732666&r1=1732665&r2=1732666&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreProcessingInstructionSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreProcessingInstructionSupport.aj Sat Feb 27 19:16:09 2016
@@ -45,7 +45,11 @@ public aspect CoreProcessingInstructionS
         target = ((CoreProcessingInstruction)other).target;
     }
     
-    public final void CoreProcessingInstruction.internalSerialize(XmlHandler handler, boolean cache) throws CoreModelException, StreamException {
-        handler.processProcessingInstruction(coreGetTarget() + " ", coreGetCharacterData().toString());
+    final void CoreProcessingInstruction.serializeStartEvent(XmlHandler handler) throws CoreModelException, StreamException {
+        handler.startProcessingInstruction(coreGetTarget() + " ");
+    }
+
+    final void CoreProcessingInstruction.serializeEndEvent(XmlHandler handler) throws StreamException {
+        handler.endProcessingInstruction();
     }
 }

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/DocumentElementExtractingFilterHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/DocumentElementExtractingFilterHandler.java?rev=1732666&r1=1732665&r2=1732666&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/DocumentElementExtractingFilterHandler.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/DocumentElementExtractingFilterHandler.java Sat Feb 27 19:16:09 2016
@@ -57,16 +57,30 @@ public final class DocumentElementExtrac
     }
 
     @Override
-    public void processProcessingInstruction(String piTarget, String piData) throws StreamException {
+    public void startProcessingInstruction(String target) throws StreamException {
         if (depth > 0) {
-            super.processProcessingInstruction(piTarget, piData);
+            super.startProcessingInstruction(target);
         }
     }
 
     @Override
-    public void processComment(String content) throws StreamException {
+    public void endProcessingInstruction() throws StreamException {
         if (depth > 0) {
-            super.processComment(content);
+            super.endProcessingInstruction();
+        }
+    }
+
+    @Override
+    public void startComment() throws StreamException {
+        if (depth > 0) {
+            super.startComment();
+        }
+    }
+
+    @Override
+    public void endComment() throws StreamException {
+        if (depth > 0) {
+            super.endComment();
         }
     }
 }

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandler.java?rev=1732666&r1=1732665&r2=1732666&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandler.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandler.java Sat Feb 27 19:16:09 2016
@@ -76,9 +76,39 @@ public interface XmlHandler {
     
     void processCharacterData(Object data, boolean ignorable) throws StreamException;
     
-    void processProcessingInstruction(String piTarget, String piData) throws StreamException;
+    /**
+     * Notify the handler of the beginning of a processing instruction.
+     * 
+     * @param target
+     *            the target of the processing instruction
+     * @throws StreamException
+     *             if an error occurs when processing the event
+     */
+    void startProcessingInstruction(String target) throws StreamException;
+    
+    /**
+     * Notify the handler of the end of a processing instruction.
+     * 
+     * @throws StreamException
+     *             if an error occurs when processing the event
+     */
+    void endProcessingInstruction() throws StreamException;
     
-    void processComment(String content) throws StreamException;
+    /**
+     * Notify the handler of the beginning of a comment.
+     * 
+     * @throws StreamException
+     *             if an error occurs when processing the event
+     */
+    void startComment() throws StreamException;
+    
+    /**
+     * Notify the handler of the end of a comment.
+     * 
+     * @throws StreamException
+     *             if an error occurs when processing the event
+     */
+    void endComment() throws StreamException;
     
     /**
      * Notify the handler of the beginning of a CDATA section.

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandlerWrapper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandlerWrapper.java?rev=1732666&r1=1732665&r2=1732666&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandlerWrapper.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandlerWrapper.java Sat Feb 27 19:16:09 2016
@@ -70,13 +70,20 @@ public class XmlHandlerWrapper implement
         parent.processCharacterData(data, ignorable);
     }
 
-    public void processProcessingInstruction(String piTarget, String piData)
-            throws StreamException {
-        parent.processProcessingInstruction(piTarget, piData);
+    public void startProcessingInstruction(String target) throws StreamException {
+        parent.startProcessingInstruction(target);
     }
 
-    public void processComment(String content) throws StreamException {
-        parent.processComment(content);
+    public void endProcessingInstruction() throws StreamException {
+        parent.endProcessingInstruction();
+    }
+
+    public void startComment() throws StreamException {
+        parent.startComment();
+    }
+
+    public void endComment() throws StreamException {
+        parent.endComment();
     }
 
     public void startCDATASection() throws StreamException {

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/ContentHandlerXmlHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/ContentHandlerXmlHandler.java?rev=1732666&r1=1732665&r2=1732666&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/ContentHandlerXmlHandler.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/ContentHandlerXmlHandler.java Sat Feb 27 19:16:09 2016
@@ -24,12 +24,15 @@ import java.util.Stack;
 import org.apache.axiom.core.CharacterData;
 import org.apache.axiom.core.stream.StreamException;
 import org.apache.axiom.core.stream.XmlHandler;
+import org.apache.axiom.core.stream.util.CharacterDataAccumulator;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
 import org.xml.sax.ext.LexicalHandler;
 import org.xml.sax.helpers.AttributesImpl;
 
 public class ContentHandlerXmlHandler implements XmlHandler {
+    private enum CharacterDataMode { PASS_THROUGH, BUFFER, SKIP, ACCUMULATE };
+    
     private final ContentHandler contentHandler;
     private final LexicalHandler lexicalHandler;
     private String[] prefixStack = new String[16];
@@ -43,6 +46,11 @@ public class ContentHandlerXmlHandler im
     private String elementLocalName;
     private String elementQName;
     private final AttributesImpl attributes = new AttributesImpl();
+    private CharacterDataMode characterDataMode = CharacterDataMode.PASS_THROUGH;
+    private char[] buffer = new char[4096];
+    private int bufferPos;
+    private CharacterDataAccumulator accumulator;
+    private String piTarget;
     
     public ContentHandlerXmlHandler(ContentHandler contentHandler, LexicalHandler lexicalHandler) {
         this.contentHandler = contentHandler;
@@ -151,27 +159,55 @@ public class ContentHandlerXmlHandler im
         }
     }
 
+    private void writeToBuffer(String data) {
+        int dataLen = data.length();
+        if (buffer.length-bufferPos < dataLen) {
+            int newLength = buffer.length;
+            do {
+                newLength *= 2;
+            } while (newLength-bufferPos < dataLen);
+            char[] newBuffer = new char[newLength];
+            System.arraycopy(buffer, 0, newBuffer, 0, bufferPos);
+            buffer = newBuffer;
+        }
+        data.getChars(0, dataLen, buffer, bufferPos);
+        bufferPos += dataLen;
+    }
+
     public void processCharacterData(Object data, boolean ignorable) throws StreamException {
         try {
-            if (ignorable) {
-                char[] ch = data.toString().toCharArray();
-                contentHandler.ignorableWhitespace(ch, 0, ch.length);
-            } else if (data instanceof CharacterData) {
-                try {
-                    ((CharacterData)data).writeTo(new ContentHandlerWriter(contentHandler));
-                } catch (IOException ex) {
-                    Throwable cause = ex.getCause();
-                    SAXException saxException;
-                    if (cause instanceof SAXException) {
-                        saxException = (SAXException)cause;
+            switch (characterDataMode) {
+                case PASS_THROUGH:
+                    if (ignorable) {
+                        writeToBuffer(data.toString());
+                        contentHandler.ignorableWhitespace(buffer, 0, bufferPos);
+                        bufferPos = 0;
+                    } else if (data instanceof CharacterData) {
+                        try {
+                            ((CharacterData)data).writeTo(new ContentHandlerWriter(contentHandler));
+                        } catch (IOException ex) {
+                            Throwable cause = ex.getCause();
+                            SAXException saxException;
+                            if (cause instanceof SAXException) {
+                                saxException = (SAXException)cause;
+                            } else {
+                                saxException = new SAXException(ex);
+                            }
+                            throw new StreamException(saxException);
+                        }
                     } else {
-                        saxException = new SAXException(ex);
+                        writeToBuffer(data.toString());
+                        contentHandler.characters(buffer, 0, bufferPos);
+                        bufferPos = 0;
                     }
-                    throw new StreamException(saxException);
-                }
-            } else {
-                char[] ch = data.toString().toCharArray();
-                contentHandler.characters(ch, 0, ch.length);
+                    break;
+                case BUFFER:
+                    writeToBuffer(data.toString());
+                    break;
+                case ACCUMULATE:
+                    accumulator.append(data);
+                    break;
+                case SKIP:
             }
         } catch (SAXException ex) {
             throw new StreamException(ex);
@@ -200,20 +236,40 @@ public class ContentHandlerXmlHandler im
         }
     }
 
-    public void processComment(String data) throws StreamException {
+    @Override
+    public void startComment() throws StreamException {
+        characterDataMode = lexicalHandler == null ? CharacterDataMode.SKIP : CharacterDataMode.BUFFER;
+    }
+
+    @Override
+    public void endComment() throws StreamException {
         if (lexicalHandler != null) {
-            char[] ch = data.toCharArray();
             try {
-                lexicalHandler.comment(ch, 0, ch.length);
+                lexicalHandler.comment(buffer, 0, bufferPos);
+                bufferPos = 0;
             } catch (SAXException ex) {
                 throw new StreamException(ex);
             }
         }
+        characterDataMode = CharacterDataMode.PASS_THROUGH;
+    }
+
+    @Override
+    public void startProcessingInstruction(String target) throws StreamException {
+        if (accumulator == null) {
+            accumulator = new CharacterDataAccumulator();
+        }
+        piTarget = target;
+        characterDataMode = CharacterDataMode.ACCUMULATE;
     }
 
-    public void processProcessingInstruction(String target, String data) throws StreamException {
+    @Override
+    public void endProcessingInstruction() throws StreamException {
         try {
-            contentHandler.processingInstruction(target, data);
+            contentHandler.processingInstruction(piTarget, accumulator.toString());
+            accumulator.clear();
+            piTarget = null;
+            characterDataMode = CharacterDataMode.PASS_THROUGH;
         } catch (SAXException ex) {
             throw new StreamException(ex);
         }

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/XmlHandlerContentHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/XmlHandlerContentHandler.java?rev=1732666&r1=1732665&r2=1732666&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/XmlHandlerContentHandler.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/XmlHandlerContentHandler.java Sat Feb 27 19:16:09 2016
@@ -350,7 +350,9 @@ public final class XmlHandlerContentHand
             throws SAXException {
         if (!inEntityReference) {
             try {
-                handler.processProcessingInstruction(piTarget, data);
+                handler.startProcessingInstruction(piTarget);
+                handler.processCharacterData(data, false);
+                handler.endProcessingInstruction();
             } catch (StreamException ex) {
                 throw toSAXException(ex);
             }
@@ -360,7 +362,9 @@ public final class XmlHandlerContentHand
     public void comment(char[] ch, int start, int length) throws SAXException {
         if (!inEntityReference) {
             try {
-                handler.processComment(new String(ch, start, length));
+                handler.startComment();
+                handler.processCharacterData(new String(ch, start, length), false);
+                handler.endComment();
             } catch (StreamException ex) {
                 throw toSAXException(ex);
             }

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/SAXResultContentHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/SAXResultContentHandler.java?rev=1732666&r1=1732665&r2=1732666&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/SAXResultContentHandler.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/SAXResultContentHandler.java Sat Feb 27 19:16:09 2016
@@ -36,6 +36,7 @@ public final  class SAXResultContentHand
     private OMContainer target;
     private final CharacterDataAccumulator buffer = new CharacterDataAccumulator();
     private boolean buffering;
+    private String piTarget;
 
     public SAXResultContentHandler(OMContainer root) {
         this.root = root;
@@ -121,12 +122,26 @@ public final  class SAXResultContentHand
         factory.createOMText(target, stopBuffering(), OMNode.CDATA_SECTION_NODE);
     }
 
-    public void processProcessingInstruction(String piTarget, String piData) {
-        factory.createOMProcessingInstruction(target, piTarget, piData);
+    @Override
+    public void startProcessingInstruction(String target) throws StreamException {
+        buffering = true;
+        piTarget = target;
+    }
+
+    @Override
+    public void endProcessingInstruction() throws StreamException {
+        factory.createOMProcessingInstruction(target, piTarget, stopBuffering());
+        piTarget = null;
     }
 
-    public void processComment(String content) {
-        factory.createOMComment(target, content);
+    @Override
+    public void startComment() throws StreamException {
+        buffering = true;
+    }
+
+    @Override
+    public void endComment() throws StreamException {
+        factory.createOMComment(target, stopBuffering());
     }
 
     public void processEntityReference(String name, String replacementText) {

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=1732666&r1=1732665&r2=1732666&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 27 19:16:09 2016
@@ -163,14 +163,26 @@ public final class BuilderHandler implem
         context.processCharacterData(data, ignorable);
     }
     
-    public void processProcessingInstruction(String piTarget, String piData) throws StreamException {
+    @Override
+    public void startProcessingInstruction(String target) throws StreamException {
         model.validateEventType(XMLStreamConstants.PROCESSING_INSTRUCTION);
-        context.processProcessingInstruction(piTarget, piData);
+        context = context.startProcessingInstruction(target);
+    }
+
+    @Override
+    public void endProcessingInstruction() throws StreamException {
+        context = context.endProcessingInstruction();
     }
 
-    public void processComment(String content) throws StreamException {
+    @Override
+    public void startComment() throws StreamException {
         model.validateEventType(XMLStreamConstants.COMMENT);
-        context.processComment(content);
+        context = context.startComment();
+    }
+
+    @Override
+    public void endComment() throws StreamException {
+        context = context.endComment();
     }
     
     @Override

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/Context.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/Context.java?rev=1732666&r1=1732665&r2=1732666&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/Context.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/Context.java Sat Feb 27 19:16:09 2016
@@ -228,24 +228,46 @@ public final class Context implements In
         }
     }
     
-    public void processProcessingInstruction(String piTarget, String piData) throws StreamException {
+    public Context startProcessingInstruction(String piTarget) throws StreamException {
         if (passThroughHandler != null) {
-            passThroughHandler.processProcessingInstruction(piTarget, piData);
+            passThroughDepth++;
+            passThroughHandler.startProcessingInstruction(piTarget);
+            return this;
         } else {
             AxiomProcessingInstruction node = builderHandler.nodeFactory.createNode(AxiomProcessingInstruction.class);
             node.coreSetTarget(piTarget);
-            node.coreSetCharacterData(piData, AxiomSemantics.INSTANCE);
             addChild(node);
+            return newContext(node);
         }
     }
 
-    public void processComment(String content) throws StreamException {
+    public Context endProcessingInstruction() throws StreamException {
         if (passThroughHandler != null) {
-            passThroughHandler.processComment(content);
+            passThroughHandler.endProcessingInstruction();
+            return decrementPassThroughDepth();
+        } else {
+            return endContext();
+        }
+    }
+
+    public Context startComment() throws StreamException {
+        if (passThroughHandler != null) {
+            passThroughDepth++;
+            passThroughHandler.startComment();
+            return this;
         } else {
             AxiomComment node = builderHandler.nodeFactory.createNode(AxiomComment.class);
-            node.coreSetCharacterData(content, AxiomSemantics.INSTANCE);
             addChild(node);
+            return newContext(node);
+        }
+    }
+    
+    public Context endComment() throws StreamException {
+        if (passThroughHandler != null) {
+            passThroughHandler.endComment();
+            return decrementPassThroughDepth();
+        } else {
+            return endContext();
         }
     }
     

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXHelper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXHelper.java?rev=1732666&r1=1732665&r2=1732666&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXHelper.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXHelper.java Sat Feb 27 19:16:09 2016
@@ -237,13 +237,17 @@ public class StAXHelper implements XmlRe
                     handler.endDocument();
                     break;
                 case XMLStreamConstants.COMMENT:
-                    handler.processComment(parser.getText());
+                    handler.startComment();
+                    handler.processCharacterData(parser.getText(), false);
+                    handler.endComment();
                     break;
                 case XMLStreamConstants.DTD:
                     processDTD();
                     break;
                 case XMLStreamConstants.PROCESSING_INSTRUCTION:
-                    handler.processProcessingInstruction(parser.getPITarget(), parser.getPIData());
+                    handler.startProcessingInstruction(parser.getPITarget());
+                    handler.processCharacterData(parser.getPIData(), false);
+                    handler.endProcessingInstruction();
                     break;
                 case XMLStreamConstants.ENTITY_REFERENCE:
                     handler.processEntityReference(parser.getLocalName(), parser.getText());

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=1732666&r1=1732665&r2=1732666&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 Sat Feb 27 19:16:09 2016
@@ -36,6 +36,7 @@ public class StAXSerializer implements X
     private DataHandlerWriter dataHandlerWriter;
     private final CharacterDataAccumulator buffer = new CharacterDataAccumulator();
     private boolean buffering;
+    private String piTarget;
     
     public StAXSerializer(XMLStreamWriter writer) {
         this.writer = writer;
@@ -154,17 +155,31 @@ public class StAXSerializer implements X
         }
     }
 
-    public void processComment(String data) throws StreamException {
+    @Override
+    public void startComment() throws StreamException {
+        buffering = true;
+    }
+
+    @Override
+    public void endComment() throws StreamException {
         try {
-            writer.writeComment(data);
+            writer.writeComment(stopBuffering());
         } catch (XMLStreamException ex) {
             throw new StreamException(ex);
         }
     }
 
-    public void processProcessingInstruction(String target, String data) throws StreamException {
+    @Override
+    public void startProcessingInstruction(String target) throws StreamException {
+        buffering = true;
+        piTarget = target;
+    }
+
+    @Override
+    public void endProcessingInstruction() throws StreamException {
         try {
-            writer.writeProcessingInstruction(target, data);
+            writer.writeProcessingInstruction(piTarget, stopBuffering());
+            piTarget = null;
         } catch (XMLStreamException ex) {
             throw new StreamException(ex);
         }

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=1732666&r1=1732665&r2=1732666&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 Sat Feb 27 19:16:09 2016
@@ -191,7 +191,9 @@ public class XmlHandlerStreamWriter exte
     protected void doWriteComment(String data) throws XMLStreamException {
         finishStartElement();
         try {
-            handler.processComment(data);
+            handler.startComment();
+            handler.processCharacterData(data, false);
+            handler.endComment();
         } catch (StreamException ex) {
             throw toXMLStreamException(ex);
         }
@@ -209,7 +211,9 @@ public class XmlHandlerStreamWriter exte
     protected void doWriteProcessingInstruction(String piTarget, String data) throws XMLStreamException {
         finishStartElement();
         try {
-            handler.processProcessingInstruction(piTarget, data);
+            handler.startProcessingInstruction(piTarget);
+            handler.processCharacterData(data, false);
+            handler.endProcessingInstruction();
         } catch (StreamException ex) {
             throw toXMLStreamException(ex);
         }