Author: nadiramra
Date: Mon Mar 15 22:49:10 2010
New Revision: 923488

URL: http://svn.apache.org/viewvc?rev=923488&view=rev
Log:
AXISCPP-1066 - anyType element causes parser to be out of sync

Modified:
    axis/axis1/c/trunk/src/soap/SoapDeSerializer.cpp

Modified: axis/axis1/c/trunk/src/soap/SoapDeSerializer.cpp
URL: 
http://svn.apache.org/viewvc/axis/axis1/c/trunk/src/soap/SoapDeSerializer.cpp?rev=923488&r1=923487&r2=923488&view=diff
==============================================================================
--- axis/axis1/c/trunk/src/soap/SoapDeSerializer.cpp (original)
+++ axis/axis1/c/trunk/src/soap/SoapDeSerializer.cpp Mon Mar 15 22:49:10 2010
@@ -2211,12 +2211,21 @@ getAnyObject ()
             else
                 bContinue = false;
             
-            // Increment counter if entering new tag, Decrement counter if 
exiting tag
-            if (START_ELEMENT == m_pNode->m_type && START_END_ELEMENT != 
m_pNode->m_type2)
-                tagCount++;
-            else if (END_ELEMENT == m_pNode->m_type)
-                tagCount--;
-    
+            // if empty element we need to do a parser get to consume the 
end-element node.
+            if (START_END_ELEMENT == m_pNode->m_type2)
+            {
+                if (END_ELEMENT == m_pNode->m_type)
+                    m_pNode = m_pParser->anyNext ();
+            }
+            else
+            {
+                // Increment counter if entering new tag, Decrement counter if 
exiting tag
+                if (START_ELEMENT == m_pNode->m_type)
+                    tagCount++;
+                else if (END_ELEMENT == m_pNode->m_type)
+                    tagCount--;
+            }
+
             if (START_PREFIX == m_pNode->m_type)
             {
                 nsDecls += " xmlns";
@@ -2242,10 +2251,16 @@ getAnyObject ()
                 xmlStr += outValue;
             }
         
-            if ( !bContinue && tagCount == 0 && (!xmlStr.empty ()))    /* 
copying the First level element into the list */
+            /* copy the First level element into the list */
+            if ( !bContinue && tagCount == 0 && (!xmlStr.empty ()))
             {
                 lstXML.push_back (xmlStr);
                 xmlStr = "";
+
+                // If the anyType element is empty element, we need to consume 
END_ELEMENT.
+                if (START_END_ELEMENT == m_pNode->m_type2 && START_ELEMENT == 
m_pNode->m_type)
+                    m_pNode = m_pParser->anyNext ();
+
                 m_pNode = NULL;
                 break;
             }


Reply via email to