You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by du...@apache.org on 2005/08/16 11:56:52 UTC

cvs commit: ws-axis/c/src/soap SoapDeSerializer.cpp

dushshantha    2005/08/16 02:56:52

  Modified:    c/src/soap SoapDeSerializer.cpp
  Log:
  Fixed the deserialization problem of simple type soap faults.
  
  Revision  Changes    Path
  1.174     +23 -19    ws-axis/c/src/soap/SoapDeSerializer.cpp
  
  Index: SoapDeSerializer.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/SoapDeSerializer.cpp,v
  retrieving revision 1.173
  retrieving revision 1.174
  diff -u -r1.173 -r1.174
  --- SoapDeSerializer.cpp	2 Aug 2005 09:47:56 -0000	1.173
  +++ SoapDeSerializer.cpp	16 Aug 2005 09:56:52 -0000	1.174
  @@ -1257,20 +1257,9 @@
   SoapDeSerializer::getCmplxFaultObjectName ()
   {
       
  -	if (m_pNode)
  -	{
  -		/*
  -		 * Just to skip <appSpecific> tag
  -		 */
  -		m_pNode = m_pParser->next ();
  -	}
  -
  -	/* if there is an unprocessed node that may be one left from
  -     * last array deserialization 
  -     */
  -    
  -	else
  +	if (!m_pNode)
   	{
  +		
   		// Skip the faultdetail tag
   		m_pParser->next ();
   	}
  @@ -1900,6 +1889,12 @@
   		}
   		if (0 == strcmp (pName, m_pNode->m_pchNameOrValue))
   		{
  +			
  +			if (0 == strcmp(pName,"detail") )
  +			{
  +				m_pNode = m_pParser->next ();
  +			}
  +			
   			for (int i = 0; m_pNode->m_pchAttributes[i] && !bNillFound; i += 3)
   			{
   				string sLocalName = m_pNode->m_pchAttributes[i];
  @@ -1920,6 +1915,7 @@
   				if (m_pNode && (CHARACTER_ELEMENT == m_pNode->m_type))
   				{
   					const AxisChar* elementValue = m_pNode->m_pchNameOrValue;
  +										
   					// FJP Added this code for fault finding.  If detail is
   					//     followed by CR/LF or CR/LF then CR/LF then assume that
   					//     it is not a simple object.  As added protection against
  @@ -1990,7 +1986,7 @@
       {
   	 //DOC_LITERAL	
   
  -     if (!m_pNode)
  +    if (!m_pNode)
           /* if there is an unprocessed node that may be one left from last 
            * array deserialization
            */
  @@ -2003,6 +1999,14 @@
   	 if (0 == strcmp (pName, m_pNode->m_pchNameOrValue))
        {
           
  +	
  +		
  +		if (0 == strcmp(pName,"detail") )
  +		{
  +			m_pNode = m_pParser->next ();
  +		}
  +		
  +			
   		bool    bNillFound = false;
           for (int i = 0; m_pNode->m_pchAttributes[i] && !bNillFound; i += 3)
           {
  @@ -2021,8 +2025,7 @@
           {
               
   			const AxisChar* elementValue = m_pNode->m_pchNameOrValue;
  -            
  -			// FJP Added this code for fault finding.  If detail is
  +           	// FJP Added this code for fault finding.  If detail is
               //     followed by CR/LF or CR/LF then CR/LF then assume that
               //     it is not a simple object.  As added protection against
               //     false findings, the namespace has been set to an invalid
  @@ -2032,8 +2035,8 @@
                   if (*pNamespace == ' ')
                   {
                       bool bReturn = false;
  -        
  -                    if (strlen (elementValue) == 0)
  +
  +					if (strlen (elementValue) == 0)
                       {
                           bReturn = true;
                       }
  @@ -2055,7 +2058,8 @@
                       }
                   }
               }
  -            pSimpleType->deserialize(elementValue);
  +            
  +			pSimpleType->deserialize(elementValue);
               m_pNode = m_pParser->next ();   /* skip end element node too */
               m_pNode = NULL;
               /* this is important in doc/lit style when deserializing