Author: scheu
Date: Tue Jul 15 05:21:17 2008
New Revision: 676898

URL: http://svn.apache.org/viewvc?rev=676898&view=rev
Log:
Quick Fix for an NPE
Added protection in the OMStAXWrapper.generateEvents method if the current node 
is null.
Also added more logging to OMElementImpl and OMNodeImpl.

Modified:
    
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMNodeImpl.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java?rev=676898&r1=676897&r2=676898&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
 Tue Jul 15 05:21:17 2008
@@ -1110,8 +1110,24 @@
     }
 
     public OMElement cloneOMElement() {
+        
+        if (log.isDebugEnabled()) {
+            log.debug("cloneOMElement start");
+            log.debug("  element string =" + this.toString());
+            log.debug(" isComplete = " + isComplete());
+            log.debug("  builder = " + builder);
+        }
+        // Make sure the source (this node) is completed
+        if (!isComplete()) {
+            this.build();
+        }
+        
+        // Now get a parser for the full tree
+        XMLStreamReader xmlStreamReader = this.getXMLStreamReader(true);
+        
+        // Build the (target) clonedElement from the parser
         OMElement clonedElement =
-                new 
StAXOMBuilder(this.getXMLStreamReader(true)).getDocumentElement();
+                new StAXOMBuilder(xmlStreamReader).getDocumentElement();
         clonedElement.build();
         return clonedElement;
     }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMNodeImpl.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMNodeImpl.java?rev=676898&r1=676897&r2=676898&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMNodeImpl.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMNodeImpl.java
 Tue Jul 15 05:21:17 2008
@@ -323,8 +323,14 @@
      * @throws OMException
      */
     public void build() throws OMException {
+        if (builder != null && builder.isCompleted()) {
+            if (DEBUG_ENABLED) {
+                log.debug("Builder is already complete.");
+            }
+        }
         while (!done) {
-            builder.next();
+
+            builder.next();    
             if (builder.isCompleted() && !done) {
                 if (DEBUG_ENABLED) {
                     log.debug("Builder is complete.  Setting OMNode to 
complete.");

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java?rev=676898&r1=676897&r2=676898&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
 Tue Jul 15 05:21:17 2008
@@ -1096,10 +1096,10 @@
             nextNode = navigator.next();
         } else {
             if (!switchingAllowed) {
-                if (navigator.isCompleted() || builder.isCompleted()) {
+                if (navigator.isCompleted() || builder == null || 
builder.isCompleted()) {
                     nextNode = null;
                     if (DEBUG_ENABLED) {
-                        if (builder.isCompleted()) {
+                        if (builder == null || builder.isCompleted()) {
                             log.debug("Builder is complete.  Next node is set 
to null.");
                         }
                     }
@@ -1117,7 +1117,9 @@
                 } else {
                     // reset caching (the default is ON so it was not needed 
in the
                     // earlier case!
-                    builder.setCache(false);
+                    if (builder != null) {
+                        builder.setCache(false);
+                    }
                     state = SWITCH_AT_NEXT;
                 }
             }
@@ -1265,6 +1267,13 @@
      */
     private int generateEvents(OMNode node) {
         int returnEvent = 0;
+        if (node == null) {
+            if (log.isDebugEnabled()) {
+                log.debug("Node is null...returning END_DOCUMENT");
+            }
+            returnEvent = END_DOCUMENT;
+            return returnEvent;
+        }
         int nodeType = node.getType();
         switch (nodeType) {
             case OMNode.ELEMENT_NODE:


Reply via email to