AXISCPP-227 complex extension support step 1.
diff --git a/src/soap/SoapDeSerializer.cpp b/src/soap/SoapDeSerializer.cpp
index 3d72e5b..9531f64 100644
--- a/src/soap/SoapDeSerializer.cpp
+++ b/src/soap/SoapDeSerializer.cpp
@@ -74,6 +74,8 @@
     m_nStatus = AXIS_SUCCESS;
     m_nSoapVersion = VERSION_LAST;
     
+    m_doNotSkip = false;
+
     logExit()
 }
 
@@ -1024,7 +1026,9 @@
     if (pObject && pDZFunct)
     {
         try 
-        {        
+        {
+            m_doNotSkip = false;
+
             logDebugArg1("Calling object deserializer function for %s", pName)
             
             m_nStatus =    ((AXIS_DESERIALIZE_FUNCT) pDZFunct) (pObject, this);
@@ -1033,7 +1037,10 @@
 
         
             if (AXIS_SUCCESS == m_nStatus)
-                skipNode();
+            {
+                if (!m_doNotSkip)
+                  skipNode();
+            }
             else
             {
                 logDebugArg2("Calling object delete function for %s for object %p", pName, pObject)
@@ -2460,6 +2467,11 @@
             *pValue = pSimpleType->getValue();
             delete pSimpleType;
         }
+        else if (END_ELEMENT == m_pNode->m_type)
+        {
+            m_doNotSkip = true;
+            m_pNode = NULL;
+        }
     }
     
     logExit()
diff --git a/src/soap/SoapDeSerializer.h b/src/soap/SoapDeSerializer.h
index 84713fd..8639bdd 100644
--- a/src/soap/SoapDeSerializer.h
+++ b/src/soap/SoapDeSerializer.h
@@ -63,6 +63,8 @@
     
     string m_strMethodNameToInvoke;
 
+    bool m_doNotSkip;
+
 private:
     int AXISCALL getArraySize();
 public: