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 su...@apache.org on 2004/06/25 08:37:40 UTC

cvs commit: ws-axis/c/src/xml/xerces XMLParserXerces.cpp XercesHandler.cpp XercesHandler.h

susantha    2004/06/24 23:37:40

  Modified:    c        configure.ac
               c/src/xml Makefile.am
               c/src/xml/expat XMLParserExpat.cpp
               c/src/xml/xerces XMLParserXerces.cpp XercesHandler.cpp
                        XercesHandler.h
  Log:
  Adding changes to the Xerces wrapper to support xsd:any
  
  Revision  Changes    Path
  1.25      +2 -2      ws-axis/c/configure.ac
  
  Index: configure.ac
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/configure.ac,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- configure.ac	8 Jun 2004 12:02:02 -0000	1.24
  +++ configure.ac	25 Jun 2004 06:37:40 -0000	1.25
  @@ -14,11 +14,11 @@
   
   #if you need to build both axis_expat and axis_xerces libraries
   
  -AC_OUTPUT(Makefile src/Makefile src/common/Makefile src/soap/Makefile src/wsdd/Makefile src/xml/Makefile src/transport/Makefile src/transport/axis/Makefile src/engine/Makefile src/engine/server/Makefile src/engine/client/Makefile  src/server/Makefile src/server/apache2/Makefile src/server/simple_axis_server/Makefile src/server/adminservice/Makefile src/client/Makefile src/client/adminclient/Makefile src/xml/expat/Makefile src/xml/xerces/Makefile)
  +#AC_OUTPUT(Makefile src/Makefile src/common/Makefile src/soap/Makefile src/wsdd/Makefile src/xml/Makefile src/transport/Makefile src/transport/axis/Makefile src/engine/Makefile src/engine/server/Makefile src/engine/client/Makefile  src/server/Makefile src/server/apache2/Makefile src/server/simple_axis_server/Makefile src/server/adminservice/Makefile src/client/Makefile src/client/adminclient/Makefile src/xml/expat/Makefile src/xml/xerces/Makefile)
   
   #if you need to build only axis_expat
   
  -#AC_OUTPUT(Makefile src/Makefile src/common/Makefile src/soap/Makefile src/wsdd/Makefile src/xml/Makefile src/transport/Makefile src/transport/axis/Makefile src/engine/Makefile src/engine/server/Makefile src/engine/client/Makefile  src/server/Makefile src/server/apache2/Makefile src/server/simple_axis_server/Makefile src/server/adminservice/Makefile src/client/Makefile src/client/adminclient/Makefile src/xml/expat/Makefile)
  +AC_OUTPUT(Makefile src/Makefile src/common/Makefile src/soap/Makefile src/wsdd/Makefile src/xml/Makefile src/transport/Makefile src/transport/axis/Makefile src/engine/Makefile src/engine/server/Makefile src/engine/client/Makefile  src/server/Makefile src/server/apache2/Makefile src/server/simple_axis_server/Makefile src/server/adminservice/Makefile src/client/Makefile src/client/adminclient/Makefile src/xml/expat/Makefile)
   
   #if you need to build only axis_xerces
   
  
  
  
  1.10      +2 -2      ws-axis/c/src/xml/Makefile.am
  
  Index: Makefile.am
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/xml/Makefile.am,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- Makefile.am	19 May 2004 04:48:59 -0000	1.9
  +++ Makefile.am	25 Jun 2004 06:37:40 -0000	1.10
  @@ -1,6 +1,6 @@
   noinst_LTLIBRARIES = libxml.la
  -SUBDIRS = expat xerces
  -#SUBDIRS = expat
  +#SUBDIRS = expat xerces
  +SUBDIRS = expat
   #SUBDIRS = xerces
   
   AM_CPPFLAGS = $(CPPFLAGS)
  
  
  
  1.7       +62 -62    ws-axis/c/src/xml/expat/XMLParserExpat.cpp
  
  Index: XMLParserExpat.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/xml/expat/XMLParserExpat.cpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XMLParserExpat.cpp	24 Jun 2004 10:39:31 -0000	1.6
  +++ XMLParserExpat.cpp	25 Jun 2004 06:37:40 -0000	1.7
  @@ -36,7 +36,7 @@
   {
       m_pLastEvent = NULL;
       m_Parser = XML_ParserCreateNS(NULL, NAMESPACESEPARATOR);
  -	m_pCurrentBuffer = 0;
  +    m_pCurrentBuffer = 0;
   }
   
   XMLParserExpat::~XMLParserExpat()
  @@ -60,7 +60,7 @@
       pSE->m_Namespace  = qn.uri ? qn.uri : "";
       qn.mergeQNameString(NAMESPACESEPARATOR);
       SimpleAttribute *pAt = NULL;
  -    for (int i = 0; attrs[i]; i += 2) 
  +    for (int i = 0; attrs[i]; i += 2)
       {
           qn.splitQNameString(attrs[i], NAMESPACESEPARATOR);
           pAt = new SimpleAttribute();
  @@ -93,7 +93,7 @@
       pTemp[length] = '\0';
       /* putting nul charactor so that chars can be used safely */
       Event* pLastEvent;
  -    if (!m_Events.empty()) 
  +    if (!m_Events.empty())
       {
           pLastEvent = m_Events.back();
           if (CHARACTER_ELEMENT == pLastEvent->getType())
  @@ -101,8 +101,8 @@
           {
               pLastEvent->m_NameOrValue += pTemp;
               pTemp[length] = replacedchar;
  -            /* put back the character that was there before putting nul 
  -             * charactor 
  +            /* put back the character that was there before putting nul
  +             * charactor
                */
               return;
           }
  @@ -114,7 +114,7 @@
       /* put back the character that was there before putting nul charactor */
   }
   
  -void XMLParserExpat::startPrefixMapping(const XML_Ch *prefix, 
  +void XMLParserExpat::startPrefixMapping(const XML_Ch *prefix,
                                            const XML_Ch *uri)
   {
       if (prefix && uri)
  @@ -181,7 +181,7 @@
                   m_Events.push(m_pLastEvent);
                   nStatus = parseNext();
                   if (TRANSPORT_FAILED == nStatus) return NULL;
  -                if ((TRANSPORT_FINISHED == nStatus) && m_Events.empty()) 
  +                if ((TRANSPORT_FINISHED == nStatus) && m_Events.empty())
                       //throw AxisParseException(SERVER_PARSE_TRANSPORT_FAILED);
                       return NULL;
               }
  @@ -192,19 +192,19 @@
                   {
                   case START_ELEMENT:
                       {
  -                        for (list<SimpleAttribute*>::iterator it = 
  +                        for (list<SimpleAttribute*>::iterator it =
                               ((StartElement*)m_pLastEvent)->m_Attributes.begin()
                               ; it != ((StartElement*)m_pLastEvent)->
                               m_Attributes.end(); it++)
                           {
  -                            m_Element.m_pchAttributes[i+0] = 
  +                            m_Element.m_pchAttributes[i+0] =
                                   (*it)->m_Name.c_str();
                               if ((*it)->m_Namespace.empty())
  -								m_Element.m_pchAttributes[i+1] = 0;
  -							else
  -								m_Element.m_pchAttributes[i+1] = 
  +                                m_Element.m_pchAttributes[i+1] = 0;
  +                            else
  +                                m_Element.m_pchAttributes[i+1] =
                                   (*it)->m_Namespace.c_str();
  -                            m_Element.m_pchAttributes[i+2] = 
  +                            m_Element.m_pchAttributes[i+2] =
                                   (*it)->m_Value.c_str();
                               i+=3;
                           }
  @@ -214,26 +214,26 @@
                       }
                       /* no break */
                   case END_ELEMENT:
  -					if (((StartElement*)m_pLastEvent)->
  +                    if (((StartElement*)m_pLastEvent)->
                           m_Namespace.empty())
  -						m_Element.m_pchNamespace = 0;
  -					else 
  -						m_Element.m_pchNamespace =
  -						((StartElement*)m_pLastEvent)->m_Namespace.c_str();
  +                        m_Element.m_pchNamespace = 0;
  +                    else
  +                        m_Element.m_pchNamespace =
  +                        ((StartElement*)m_pLastEvent)->m_Namespace.c_str();
                       /* no break */
                   case CHARACTER_ELEMENT:
                       m_Element.m_pchNameOrValue = m_pLastEvent->
                           m_NameOrValue.c_str();
                       m_Element.m_type = type;
  -					if (!isCharData && (CHARACTER_ELEMENT == type))
  -					{ /* ignorable white space */
  -						delete m_pLastEvent;
  -						m_pLastEvent = NULL;
  -						break;						
  -					}
  +                    if (!isCharData && (CHARACTER_ELEMENT == type))
  +                    { /* ignorable white space */
  +                        delete m_pLastEvent;
  +                        m_pLastEvent = NULL;
  +                        break;
  +                    }
                       return &m_Element;
                   case START_PREFIX:
  -                    m_NsStack[m_pLastEvent->m_NameOrValue] = 
  +                    m_NsStack[m_pLastEvent->m_NameOrValue] =
                           ((StartPrefix*)m_pLastEvent)->m_Namespace;
                       /* I think the same prifix cannot repeat ??? */
                       delete m_pLastEvent;
  @@ -271,21 +271,21 @@
       AXIS_TRANSPORT_STATUS iTransportStatus;
       try
       {
  -	m_pCurrentBuffer = (char*) XML_GetBuffer(m_Parser, EXPAT_BUFFER_SIZE);
  -	if (m_pCurrentBuffer)
  -	{
  -		iTransportStatus = m_pInputStream->getBytes(m_pCurrentBuffer, &nChars);
  -		if (nChars > 0)
  -		{
  -			if (XML_STATUS_ERROR == XML_ParseBuffer(m_Parser, nChars, false))
  -				m_nStatus = AXIS_FAIL;
  -		}
  -		if (TRANSPORT_FAILED == iTransportStatus) XML_ParseBuffer(m_Parser, 0, true);
  +    m_pCurrentBuffer = (char*) XML_GetBuffer(m_Parser, EXPAT_BUFFER_SIZE);
  +    if (m_pCurrentBuffer)
  +    {
  +        iTransportStatus = m_pInputStream->getBytes(m_pCurrentBuffer, &nChars);
  +        if (nChars > 0)
  +        {
  +            if (XML_STATUS_ERROR == XML_ParseBuffer(m_Parser, nChars, false))
  +                m_nStatus = AXIS_FAIL;
  +        }
  +        if (TRANSPORT_FAILED == iTransportStatus) XML_ParseBuffer(m_Parser, 0, true);
                   if(AXIS_FAIL == m_nStatus)
                       throw AxisParseException( SERVER_PARSE_PARSER_FAILED);
                   if(TRANSPORT_FAILED == iTransportStatus)
                       throw AxisParseException(SERVER_PARSE_TRANSPORT_FAILED);
  -	}
  +    }
           else throw AxisParseException(SERVER_PARSE_BUFFER_EMPTY);
       /* end of parsing */
       }
  @@ -310,7 +310,7 @@
   }
   
   /**
  - * Sets the new input stream and resets XMLParserExpat object state to 
  + * Sets the new input stream and resets XMLParserExpat object state to
    * initial state
    */
   int XMLParserExpat::setInputStream(AxisIOStream* pInputStream)
  @@ -318,7 +318,7 @@
       m_pInputStream = pInputStream;
       XML_ParserReset(m_Parser, NULL);
       XML_SetUserData(m_Parser, this);
  -    XML_SetNamespaceDeclHandler(m_Parser, s_startPrefixMapping, 
  +    XML_SetNamespaceDeclHandler(m_Parser, s_startPrefixMapping,
           s_endPrefixMapping);
       XML_SetElementHandler(m_Parser, s_startElement, s_endElement);
       XML_SetCharacterDataHandler(m_Parser, s_characters);
  @@ -367,7 +367,7 @@
                   m_Events.push(m_pLastEvent);
                   nStatus = parseNext();
                   if (TRANSPORT_FAILED == nStatus) return NULL;
  -                if ((TRANSPORT_FINISHED == nStatus) && m_Events.empty()) 
  +                if ((TRANSPORT_FINISHED == nStatus) && m_Events.empty())
                       return NULL;
               }
               else
  @@ -377,19 +377,19 @@
                   {
                   case START_ELEMENT:
                       {
  -                        for (list<SimpleAttribute*>::iterator it = 
  +                        for (list<SimpleAttribute*>::iterator it =
                               ((StartElement*)m_pLastEvent)->m_Attributes.begin()
                               ; it != ((StartElement*)m_pLastEvent)->
                               m_Attributes.end(); it++)
                           {
  -                            m_Element.m_pchAttributes[i+0] = 
  +                            m_Element.m_pchAttributes[i+0] =
                                   (*it)->m_Name.c_str();
                               if ((*it)->m_Namespace.empty())
  -								m_Element.m_pchAttributes[i+1] = 0;
  -							else
  -								m_Element.m_pchAttributes[i+1] = 
  +                                m_Element.m_pchAttributes[i+1] = 0;
  +                            else
  +                                m_Element.m_pchAttributes[i+1] =
                                   (*it)->m_Namespace.c_str();
  -                            m_Element.m_pchAttributes[i+2] = 
  +                            m_Element.m_pchAttributes[i+2] =
                                   (*it)->m_Value.c_str();
                               i+=3;
                           }
  @@ -399,12 +399,12 @@
                       }
                       /* no break */
                   case END_ELEMENT:
  -					if (((StartElement*)m_pLastEvent)->
  +                    if (((StartElement*)m_pLastEvent)->
                           m_Namespace.empty())
  -						m_Element.m_pchNamespace = 0;
  -					else 
  -						m_Element.m_pchNamespace =
  -						((StartElement*)m_pLastEvent)->m_Namespace.c_str();
  +                        m_Element.m_pchNamespace = 0;
  +                    else
  +                        m_Element.m_pchNamespace =
  +                        ((StartElement*)m_pLastEvent)->m_Namespace.c_str();
                       /* no break */
                   case CHARACTER_ELEMENT:
                       m_Element.m_pchNameOrValue = m_pLastEvent->
  @@ -412,18 +412,18 @@
                       m_Element.m_type = type;
                       return &m_Element;
                   case START_PREFIX:
  -                    m_NsStack[m_pLastEvent->m_NameOrValue] = 
  +                    m_NsStack[m_pLastEvent->m_NameOrValue] =
                           ((StartPrefix*)m_pLastEvent)->m_Namespace;
                       m_Element.m_pchNamespace = ((StartElement*)m_pLastEvent)->
                           m_Namespace.c_str();
                       m_Element.m_pchNameOrValue = ((StartElement*)m_pLastEvent)
  -						->m_NameOrValue.c_str();
  +                        ->m_NameOrValue.c_str();
                       m_Element.m_type = type;
                       return &m_Element;
                   case END_PREFIX:
                       m_NsStack.erase(m_pLastEvent->m_NameOrValue);
                       m_Element.m_pchNameOrValue = ((StartElement*)m_pLastEvent)
  -						->m_NameOrValue.c_str();
  +                        ->m_NameOrValue.c_str();
                       m_Element.m_type = type;
                       return &m_Element;
                   }
  @@ -448,15 +448,15 @@
   
   const XML_Ch* XMLParserExpat::getPrefix4NS(const XML_Ch* pcNS)
   {
  -	for (map<AxisXMLString, AxisXMLString>::iterator it;
  -		 it!=m_NsStack.end(); it++)
  -	{
  -		if ((*it).second == pcNS)
  -		{
  -			return (*it).first.c_str();
  -		}
  -	}
  -	return 0;
  +    for (map<AxisXMLString, AxisXMLString>::iterator it;
  +         it!=m_NsStack.end(); it++)
  +    {
  +        if ((*it).second == pcNS)
  +        {
  +            return (*it).first.c_str();
  +        }
  +    }
  +    return 0;
   }
   
   
  
  
  
  1.7       +73 -30    ws-axis/c/src/xml/xerces/XMLParserXerces.cpp
  
  Index: XMLParserXerces.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/xml/xerces/XMLParserXerces.cpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XMLParserXerces.cpp	24 Jun 2004 10:39:31 -0000	1.6
  +++ XMLParserXerces.cpp	25 Jun 2004 06:37:40 -0000	1.7
  @@ -71,41 +71,47 @@
   
   int XMLParserXerces::getStatus()
   {
  -	return m_Xhandler.getStatus();
  +    return m_Xhandler.getStatus();
   }
   
   const AnyElement* XMLParserXerces::next(bool isCharData)
   {
  -	bool bCanParseMore = false;
  +    bool bCanParseMore = false;
       try
       {
  -		if(!m_bFirstParsed)
  -		{
  -			m_pParser->parseFirst(*m_pInputSource, m_ScanToken);
  -			m_bFirstParsed = true;
  -		}
  +        if(!m_bFirstParsed)
  +        {
  +            m_pParser->parseFirst(*m_pInputSource, m_ScanToken);
  +            m_bFirstParsed = true;
  +        }
   
  -		m_Xhandler.freeElement();
  -		while (true)
  -		{
  -			AnyElement* elem = m_Xhandler.getAnyElement();
  -			if (!elem)
  -			{
  -				bCanParseMore = m_pParser->parseNext(m_ScanToken);
  -				elem = m_Xhandler.getAnyElement();
  -			}
  -			if (elem) 
  -			{
  -				if (!isCharData && (CHARACTER_ELEMENT == elem->m_type))
  -				{ /* ignorable white space */
  -					m_Xhandler.freeElement();
  -					continue;		
  -				}			
  -				return elem;
  -			}
  -			else if (AXIS_FAIL == m_Xhandler.getStatus()) return NULL;
  -			else if (!bCanParseMore) return NULL;
  -		}
  +        m_Xhandler.freeElement();
  +        while (true)
  +        {
  +            AnyElement* elem = m_Xhandler.getAnyElement();
  +            if (!elem)
  +            {
  +                bCanParseMore = m_pParser->parseNext(m_ScanToken);
  +                elem = m_Xhandler.getAnyElement();
  +            }
  +            if (elem)
  +            {
  +                if ((START_PREFIX == elem->m_type) ||
  +                (END_PREFIX == elem->m_type))
  +                {
  +                    m_Xhandler.freeElement();
  +                    continue;
  +                }
  +                if (!isCharData && (CHARACTER_ELEMENT == elem->m_type))
  +                { /* ignorable white space */
  +                    m_Xhandler.freeElement();
  +                    continue;
  +                }
  +                return elem;
  +            }
  +            else if (AXIS_FAIL == m_Xhandler.getStatus()) return NULL;
  +            else if (!bCanParseMore) return NULL;
  +        }
       }
       catch(AxisParseException& e)
       {
  @@ -123,11 +129,48 @@
   
   const AnyElement* XMLParserXerces::anyNext()
   {
  -	return 0;
  +    bool bCanParseMore = false;
  +    try
  +    {
  +        if(!m_bFirstParsed)
  +        {
  +            m_pParser->parseFirst(*m_pInputSource, m_ScanToken);
  +            m_bFirstParsed = true;
  +        }
  +
  +        m_Xhandler.freeElement();
  +        while (true)
  +        {
  +            AnyElement* elem = m_Xhandler.getAnyElement();
  +            if (!elem)
  +            {
  +                bCanParseMore = m_pParser->parseNext(m_ScanToken);
  +                elem = m_Xhandler.getAnyElement();
  +            }
  +            if (elem)
  +            {
  +                return elem;
  +            }
  +            else if (AXIS_FAIL == m_Xhandler.getStatus()) return NULL;
  +            else if (!bCanParseMore) return NULL;
  +        }
  +    }
  +    catch(AxisParseException& e)
  +    {
  +        throw;
  +    }
  +    catch(AxisException& e)
  +    {
  +        throw;
  +    }
  +    catch(...)
  +    {
  +        throw;
  +    }
   }
   
   const XML_Ch* XMLParserXerces::getPrefix4NS(const XML_Ch* pcNS)
   {
  -	return 0;
  +    return m_Xhandler.prefix4NS(pcNS);
   }
   
  
  
  
  1.3       +38 -23    ws-axis/c/src/xml/xerces/XercesHandler.cpp
  
  Index: XercesHandler.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/xml/xerces/XercesHandler.cpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XercesHandler.cpp	24 May 2004 05:54:55 -0000	1.2
  +++ XercesHandler.cpp	25 Jun 2004 06:37:40 -0000	1.3
  @@ -30,7 +30,7 @@
   {
       m_nStatus = AXIS_SUCCESS;
       Nelement = (AnyElement*)malloc(sizeof (AnyElement));
  -	m_bEndElementFollows = false;
  +    m_bEndElementFollows = false;
   }
   
   XercesHandler::~XercesHandler()
  @@ -48,7 +48,7 @@
       
       unsigned int len = attrs.getLength();
       unsigned int index;
  -	unsigned int i = 0;
  +    unsigned int i = 0;
       for (index = 0; index < len*3; index+=3)
       {    
           Nelement->m_pchAttributes[index] = 
  @@ -57,7 +57,7 @@
               XMLString::transcode(attrs.getURI(i));
           Nelement->m_pchAttributes[index+2] = 
               XMLString::transcode(attrs.getValue(i));
  -		i++;
  +        i++;
       }
       Nelement->m_pchAttributes[len*3]=NULL;
   }
  @@ -71,6 +71,19 @@
       return NULL;
   }
   
  +const XML_Ch* XercesHandler::prefix4NS(const XML_Ch* pcNS)
  +{
  +    for (map<AxisXMLString, AxisXMLString>::iterator it;
  +         it!=m_NsStack.end(); it++)
  +    {
  +        if ((*it).second == pcNS)
  +        {
  +            return (*it).first.c_str();
  +        }
  +    }
  +    return 0;
  +}
  +    
   void XercesHandler::characters(const XMLCh* const chars, 
                                  const unsigned int length)
   {
  @@ -100,13 +113,13 @@
                                   const XMLCh *const localname,
                                   const XMLCh *const qname)
   {
  -	if (m_pCurrElement && (START_ELEMENT == m_pCurrElement->m_type)) 
  -	/* it seems that both startElement and endElemen events fired within a 
  -	single parseNext call */
  -	{
  -		m_bEndElementFollows = true;
  -		return;
  -	}
  +    if (m_pCurrElement && (START_ELEMENT == m_pCurrElement->m_type))
  +    /* it seems that both startElement and endElemen events fired within a
  +    single parseNext call */
  +    {
  +        m_bEndElementFollows = true;
  +        return;
  +    }
       m_pCurrElement = Nelement;
       Nelement->m_type = END_ELEMENT;
       Nelement->m_pchNameOrValue = XMLString::transcode(localname);
  @@ -114,9 +127,10 @@
       Nelement->m_pchAttributes[0] = NULL;
   }
   
  -void XercesHandler::startPrefixMapping(const XMLCh* const prefix, 
  +void XercesHandler::startPrefixMapping(const XMLCh* const prefix,
                                          const XMLCh* const uri)
   {
  +    m_pCurrElement = Nelement;
       Nelement->m_type = START_PREFIX;
       Nelement->m_pchNameOrValue = XMLString::transcode(prefix);
       Nelement->m_pchNamespace = XMLString::transcode(uri);
  @@ -125,6 +139,7 @@
   
   void XercesHandler::endPrefixMapping(const XMLCh* const prefix)
   {
  +    m_pCurrElement = Nelement;
       Nelement->m_type = END_PREFIX;
       Nelement->m_pchNameOrValue = XMLString::transcode(prefix);
       m_NsStack.erase(XMLString::transcode(prefix));
  @@ -134,17 +149,17 @@
   {
       if (m_pCurrElement)
       {
  -		if (m_bEndElementFollows)
  -			/* free only attributes list if available */
  -		{
  -			m_bEndElementFollows = false;
  -			Nelement->m_type = END_ELEMENT;
  -			Nelement->m_pchAttributes[0] = NULL;
  -		}
  -		else
  -			/* free all inner strings */
  -		{
  -			m_pCurrElement = 0;
  -		}
  +        if (m_bEndElementFollows)
  +            /* free only attributes list if available */
  +        {
  +            m_bEndElementFollows = false;
  +            Nelement->m_type = END_ELEMENT;
  +            Nelement->m_pchAttributes[0] = NULL;
  +        }
  +        else
  +            /* free all inner strings */
  +        {
  +            m_pCurrElement = 0;
  +        }
       }
   }
  
  
  
  1.4       +2 -9      ws-axis/c/src/xml/xerces/XercesHandler.h
  
  Index: XercesHandler.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/xml/xerces/XercesHandler.h,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XercesHandler.h	25 May 2004 03:47:34 -0000	1.3
  +++ XercesHandler.h	25 Jun 2004 06:37:40 -0000	1.4
  @@ -35,17 +35,10 @@
   public :
       void freeElement();
       int getStatus(){return m_nStatus;};
  -    /* -----------------------------------------------------------------------
  -     *  Constructors
  -     * -----------------------------------------------------------------------
  -     */
       XercesHandler();
       ~XercesHandler();
  -
  -
  -
  -    const XML_Ch* XercesHandler::ns4Prefix(const XML_Ch* prefix);
  -
  +    const XML_Ch* ns4Prefix(const XML_Ch* prefix);
  +    const XML_Ch* prefix4NS(const XML_Ch* pcNS);
       AnyElement* getAnyElement()
       {
           return m_pCurrElement;