You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by na...@apache.org on 2006/03/01 18:42:40 UTC

svn commit: r382097 - in /webservices/axis/trunk/c/src/xml/xerces: XMLParserXerces.cpp XMLParserXerces.h

Author: nadiramra
Date: Wed Mar  1 09:42:39 2006
New Revision: 382097

URL: http://svn.apache.org/viewcvs?rev=382097&view=rev
Log:
Uncommented parser exception processing, fixed message clone bugs in uncommented code.

Modified:
    webservices/axis/trunk/c/src/xml/xerces/XMLParserXerces.cpp
    webservices/axis/trunk/c/src/xml/xerces/XMLParserXerces.h

Modified: webservices/axis/trunk/c/src/xml/xerces/XMLParserXerces.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/xml/xerces/XMLParserXerces.cpp?rev=382097&r1=382096&r2=382097&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/xml/xerces/XMLParserXerces.cpp (original)
+++ webservices/axis/trunk/c/src/xml/xerces/XMLParserXerces.cpp Wed Mar  1 09:42:39 2006
@@ -32,14 +32,14 @@
 XMLParserXerces::XMLParserXerces()
 {
     m_bFirstParsed = false;
-	m_bPeeked = false;
+    m_bPeeked = false;
     m_pParser = XMLReaderFactory::createXMLReader();
     m_pInputSource = NULL;
 }
 
 XMLParserXerces::~XMLParserXerces()
 {
-    //Samisa - Parser has memory allocated with the last AnyElement parsed; clean that
+    // Parser has memory allocated with the last AnyElement parsed; clean that
     m_Xhandler.freeElement();
 
     if(m_pInputSource)
@@ -51,19 +51,20 @@
 int XMLParserXerces::setInputStream(AxisIOStream* pInputStream)
 {
     m_pInputStream = pInputStream;
-    //check if memeory is already allocated for is
+    
+    // check if memory is already allocated for is
     if(m_pInputSource)
         delete m_pInputSource;
     
     m_pInputSource = new SoapInputSource(pInputStream);
-	m_Xhandler.reset();
+    m_Xhandler.reset();
     m_pParser->setContentHandler(&m_Xhandler);
      if (m_bFirstParsed)
     {
         m_pParser->parseReset(m_ScanToken);
         m_bFirstParsed = false;
     }
-   /* return m_pHandler->Success(); */
+   
     return AXIS_SUCCESS;
 }
 
@@ -79,80 +80,69 @@
 
 const AnyElement* XMLParserXerces::next(bool isCharData)
 {
-	bool bCanParseMore = false;
+    bool bCanParseMore = false;
 
     if( !m_bFirstParsed)
     {
-		m_pParser->parseFirst( *m_pInputSource, m_ScanToken);
-/*
-	Try this again at some point in the future.  At the moment it works on
-	Windows, but Linux as a problem...
-		try
-		{
-			m_pParser->parseFirst( *m_pInputSource, m_ScanToken);
-		}
-		catch( const XMLException& toCatch)
-		{
-			char *	message = XMLString::transcode( toCatch.getMessage());
-
-// Clone the error message before deleting it.
-			char *	pErrorMsg = new char[strlen( message + 1)];
-
-			strcpy( pErrorMsg, message);
-
-			XMLString::release( &message);
-
-			throw AxisParseException( CLIENT_SOAP_CONTENT_NOT_SOAP, pErrorMsg);
-		}
-		catch( const SAXParseException& toCatch)
-		{
-			char *	message = XMLString::transcode( toCatch.getMessage());
-
-// Clone the error message before deleting it.
-			char *	pErrorMsg = new char[strlen( message + 1)];
-
-			strcpy( pErrorMsg, message);
-
-			XMLString::release( &message);
-
-			throw AxisParseException( CLIENT_SOAP_CONTENT_NOT_SOAP, pErrorMsg);
-		}
-		catch( HTTPTransportException & e)
-		{
-			throw;
-		}
-		catch( ...)
-		{
-			char *	pErrorMsg = "Unexpected Exception in SAX parser.  Probably no message or the message is not recognised as XML.";
-
-			throw AxisParseException( CLIENT_SOAP_CONTENT_NOT_SOAP, pErrorMsg);
-		}
-*/
+        m_pParser->parseFirst( *m_pInputSource, m_ScanToken);
+
+        try
+        {
+            m_pParser->parseFirst( *m_pInputSource, m_ScanToken);
+        }
+        catch( const XMLException& toCatch)
+        {
+            char *    message = XMLString::transcode( toCatch.getMessage());
+
+            // Clone the error message before deleting it.
+            char *    pErrorMsg = new char[strlen( message ) + 1];
+            strcpy( pErrorMsg, message);
+            XMLString::release( &message);
+
+            throw AxisParseException( CLIENT_SOAP_CONTENT_NOT_SOAP, pErrorMsg);
+        }
+        catch( const SAXParseException& toCatch)
+        {
+            char *    message = XMLString::transcode( toCatch.getMessage());
+
+            // Clone the error message before deleting it.
+            char *    pErrorMsg = new char[strlen( message ) + 1];
+            strcpy( pErrorMsg, message);
+            XMLString::release( &message);
+
+            throw AxisParseException( CLIENT_SOAP_CONTENT_NOT_SOAP, pErrorMsg);
+        }
+        catch( HTTPTransportException & e)
+        {
+            throw;
+        }
+        catch( ...)
+        {
+            char *pErrorMsg = "Unexpected Exception in SAX parser.  Probably no message or the message is not recognised as XML.";
+
+            throw AxisParseException( CLIENT_SOAP_CONTENT_NOT_SOAP, pErrorMsg);
+        }
+
         m_bFirstParsed = true;
     }
 
-	if(!m_bPeeked) 
-	{
-		m_Xhandler.freeElement();
-	}
+    if(!m_bPeeked) 
+        m_Xhandler.freeElement();
+    
     while (true)
     {
         AnyElement* elem = m_Xhandler.getAnyElement();
         if (!elem)
         {
-			//Chinthana:check the peek is called or not
-			if(!m_bPeeked) 
-			{
-				bCanParseMore = m_pParser->parseNext(m_ScanToken);
-			}
-			else
-			{
-				m_bPeeked = false;
-				bCanParseMore = true;
-			}
-			elem = m_Xhandler.getAnyElement();
-			
-			//27/04/2005
+            //Chinthana:check the peek is called or not
+            if(!m_bPeeked) 
+                bCanParseMore = m_pParser->parseNext(m_ScanToken);
+            else
+            {
+                m_bPeeked = false;
+                bCanParseMore = true;
+            }
+            elem = m_Xhandler.getAnyElement();
         }
         if (elem)
         {
@@ -162,106 +152,100 @@
                 continue;
             }
 
-			if( m_bPeeked )
-				m_bPeeked = false;
+            if( m_bPeeked )
+                m_bPeeked = false;
             
-			return elem;
+            return elem;
         }
-        else if (AXIS_FAIL == m_Xhandler.getStatus()) return NULL;
-        else if (!bCanParseMore) return NULL;
+        else if (AXIS_FAIL == m_Xhandler.getStatus()) 
+            return NULL;
+        else if (!bCanParseMore) 
+            return NULL;
     }
 }
-//Chinthana:New method which peek a head next element 
-//Here always Peek() will call after the first pase done
+// New method which peek a head next element 
+// Here always Peek() will call after the first pase done
 const char* XMLParserXerces::peek()
 {
     if (!m_bPeeked)
     {
-    	if(!m_bFirstParsed)
+        if(!m_bFirstParsed)
         {
-    		m_pParser->parseFirst(*m_pInputSource, m_ScanToken);
+            m_pParser->parseFirst(*m_pInputSource, m_ScanToken);
             m_bFirstParsed = true;
         }
-    	 
-    	bool bCanParseMore = true;
-    	
-    	m_Xhandler.freeElement();
-    	bCanParseMore = m_pParser->parseNext(m_ScanToken);
-    	AnyElement* elem = m_Xhandler.getAnyElement();
-    	while (CHARACTER_ELEMENT == elem->m_type) // we never peek for char data
-    											  //hence this is a white space
+         
+        bool bCanParseMore = true;
+        
+        m_Xhandler.freeElement();
+        bCanParseMore = m_pParser->parseNext(m_ScanToken);
+        AnyElement* elem = m_Xhandler.getAnyElement();
+        while (CHARACTER_ELEMENT == elem->m_type) // we never peek for char data
+                                                  //hence this is a white space
         { /* ignorable white space */
             m_Xhandler.freeElement();
-    		bCanParseMore = m_pParser->parseNext(m_ScanToken);
-    		elem = m_Xhandler.getAnyElement();
+            bCanParseMore = m_pParser->parseNext(m_ScanToken);
+            elem = m_Xhandler.getAnyElement();
          }
     }
 
-	m_bPeeked = true;
-	
-	const XML_NODE_TYPE type = m_Xhandler.peekNextElementType();
-	if(type != END_ELEMENT && type != END_PREFIX && type != UNKNOWN)
-    {
-		const char* name = m_Xhandler.peekNextElementName();
-		return name;
-	}
-	else
-	{
-		return "";
-	}
-
-	
+    m_bPeeked = true;
+    
+    const XML_NODE_TYPE type = m_Xhandler.peekNextElementType();
+    if(type != END_ELEMENT && type != END_PREFIX && type != UNKNOWN)
+    {
+        const char* name = m_Xhandler.peekNextElementName();
+        return name;
+    }
+    else
+        return "";
 }
-//27/04/2005
 
 const AnyElement* XMLParserXerces::anyNext()
 {
     bool bCanParseMore = false;
-		/* 
-		 * Say the SAX event handler to record prefix mappings too 
-		 * By default the event handler do not record them.
-		 */
-		m_Xhandler.setGetPrefixMappings(true);
-        if(!m_bFirstParsed)
-        {
-            m_pParser->parseFirst(*m_pInputSource, m_ScanToken);
-            m_bFirstParsed = true;
-        }
+    
+    // Say the SAX event handler to record prefix mappings too 
+    // By default the event handler do not record them.
+    m_Xhandler.setGetPrefixMappings(true);
+    if(!m_bFirstParsed)
+    {
+        m_pParser->parseFirst(*m_pInputSource, m_ScanToken);
+        m_bFirstParsed = true;
+    }
 
-		if(!m_bPeeked) 
-		{
-			m_Xhandler.freeElement();
-		}
+    if(!m_bPeeked) 
+        m_Xhandler.freeElement();
 
-		while (true)
+    while (true)
+    {
+        AnyElement* elem = m_Xhandler.getAnyElement();
+        if (!elem)
         {
-            AnyElement* elem = m_Xhandler.getAnyElement();
-            if (!elem)
+            if(!m_bPeeked) 
+                bCanParseMore = m_pParser->parseNext(m_ScanToken);
+            else
             {
-                if(!m_bPeeked) 
-				{
-					bCanParseMore = m_pParser->parseNext(m_ScanToken);
-				}
-				else
-				{
-					m_bPeeked = false;
-					bCanParseMore = true;
-				}
-
-                elem = m_Xhandler.getAnyElement();
+                m_bPeeked = false;
+                bCanParseMore = true;
             }
-            if (elem)
-            {
-				m_Xhandler.setGetPrefixMappings(false);
 
-				if( m_bPeeked )
-					m_bPeeked = false;
+            elem = m_Xhandler.getAnyElement();
+        }
+        if (elem)
+        {
+            m_Xhandler.setGetPrefixMappings(false);
 
-				return elem;
-            }
-            else if (AXIS_FAIL == m_Xhandler.getStatus()) return NULL;
-            else if (!bCanParseMore) return NULL;
+            if( m_bPeeked )
+                m_bPeeked = false;
+
+            return elem;
         }
+        else if (AXIS_FAIL == m_Xhandler.getStatus()) 
+            return NULL;
+        else if (!bCanParseMore) 
+            return NULL;
+    }
 }
 
 const XML_Ch* XMLParserXerces::getPrefix4NS(const XML_Ch* pcNS)

Modified: webservices/axis/trunk/c/src/xml/xerces/XMLParserXerces.h
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/xml/xerces/XMLParserXerces.h?rev=382097&r1=382096&r2=382097&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/xml/xerces/XMLParserXerces.h (original)
+++ webservices/axis/trunk/c/src/xml/xerces/XMLParserXerces.h Wed Mar  1 09:42:39 2006
@@ -36,11 +36,8 @@
 #include <xercesc/framework/XMLPScanToken.hpp>
 #include "SoapInputSource.h"
 #include "../AxisParseException.h"
-/*
-Try this again at some point in the future.  At the moment it works on
-Windows, but Linux as a problem...
+
 #include "../../transport/axis3/HTTPTransportException.hpp"
-*/
 
 XERCES_CPP_NAMESPACE_USE
 
@@ -54,9 +51,9 @@
     int setInputStream(AxisIOStream* pInputStream);
     const XML_Ch* getNS4Prefix(const XML_Ch* pcPrefix);
     int getStatus();
-    const AnyElement* next(bool bIsCharData=false);//Chinthana:change to accept "all" construct 27/04/2005
+    const AnyElement* next(bool bIsCharData=false);
     const AnyElement* anyNext();
-	const char* peek(); //Chinthana:Add the method to peek head and find the next element 27/04/2005.
+    const char* peek();
     const XML_Ch* getPrefix4NS(const XML_Ch* pcNS);
 
 private:
@@ -65,9 +62,7 @@
     XercesHandler m_Xhandler;
     bool m_bFirstParsed;
     SoapInputSource* m_pInputSource;
-	bool m_bPeeked;
-
-
+    bool m_bPeeked;
 };
 
 #endif