Author: veithen
Date: Mon Nov 24 15:08:52 2008
New Revision: 720329

URL: http://svn.apache.org/viewvc?rev=720329&view=rev
Log:
Let SAXOMBuilder implement LexicalHandler so that it can build comment and 
CDATA nodes.

Modified:
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/SAXOMBuilder.java

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/SAXOMBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/SAXOMBuilder.java?rev=720329&r1=720328&r2=720329&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/SAXOMBuilder.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/SAXOMBuilder.java
 Mon Nov 24 15:08:52 2008
@@ -31,12 +31,13 @@
 import org.xml.sax.Attributes;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
+import org.xml.sax.ext.LexicalHandler;
 import org.xml.sax.helpers.DefaultHandler;
 
 import java.util.ArrayList;
 import java.util.List;
 
-public class SAXOMBuilder extends DefaultHandler {
+public class SAXOMBuilder extends DefaultHandler implements LexicalHandler {
     OMElement root = null;
 
     OMNode lastNode = null;
@@ -46,6 +47,8 @@
     OMFactory factory = OMAbstractFactory.getOMFactory();
 
     List prefixMappings = new ArrayList();
+    
+    int textNodeType = OMNode.TEXT_NODE;
 
     public void setDocumentLocator(Locator arg0) {
     }
@@ -57,6 +60,12 @@
     public void endDocument() throws SAXException {
     }
 
+    public void startDTD(String name, String publicId, String systemId) throws 
SAXException {
+    }
+
+    public void endDTD() throws SAXException {
+    }
+
     protected OMElement createNextElement(String localName) throws OMException 
{
         OMElement e;
         if (lastNode == null) {
@@ -142,6 +151,14 @@
         }
     }
 
+    public void startCDATA() throws SAXException {
+        textNodeType = OMNode.CDATA_SECTION_NODE;
+    }
+
+    public void endCDATA() throws SAXException {
+        textNodeType = OMNode.TEXT_NODE;
+    }
+
     /*
      * (non-Javadoc)
      *
@@ -154,15 +171,13 @@
         }
         OMNode node;
         if (lastNode.isComplete()) {
-            node =
-                    factory.createOMText(lastNode.getParent(),
-                                         new String(ch,
-                                                    start, length));
+            node = factory.createOMText(lastNode.getParent(),
+                    new String(ch, start, length), textNodeType);
             ((OMNodeEx) lastNode).setNextOMSibling(node);
             ((OMNodeEx) node).setPreviousOMSibling(lastNode);
         } else {
             OMContainerEx e = (OMContainerEx) lastNode;
-            node = factory.createOMText(e, new String(ch, start, length));
+            node = factory.createOMText(e, new String(ch, start, length), 
textNodeType);
             e.setFirstChild(node);
         }
         lastNode = node;
@@ -176,9 +191,34 @@
             throws SAXException {
     }
 
+    public void comment(char[] ch, int start, int length) throws SAXException {
+        if (lastNode == null) {
+            // Do nothing: the comment appears before the root element.
+            return;
+        } 
+        OMNode node;
+        if (lastNode.isComplete()) {
+            node = factory.createOMComment(lastNode.getParent(),
+                    new String(ch, start, length));
+            ((OMNodeEx) lastNode).setNextOMSibling(node);
+            ((OMNodeEx) node).setPreviousOMSibling(lastNode);
+        } else {
+            OMContainerEx e = (OMContainerEx) lastNode;
+            node = factory.createOMComment(e, new String(ch, start, length));
+            e.setFirstChild(node);
+        }
+        lastNode = node;
+    }
+
     public void skippedEntity(String arg0) throws SAXException {
     }
 
+    public void startEntity(String name) throws SAXException {
+    }
+
+    public void endEntity(String name) throws SAXException {
+    }
+
     /** @return Returns the root. */
     public OMElement getRootElement() {
         return root;


Reply via email to