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/05/18 13:09:12 UTC

cvs commit: ws-axis/c/vc/wsdd WSDDLibrary.dsp

susantha    2004/05/18 04:09:12

  Modified:    c/include/axis SOAPTransport.h
               c/include/axis/server SoapDeSerializer.h XMLParser.h
               c/src/common AxisTime.cpp
               c/src/engine Axis.cpp
               c/src/engine/client Call.cpp
               c/src/soap SoapDeSerializer.cpp SoapFault.cpp
               c/src/wsdd WSDDDeployment.cpp WSDDDeployment.h
                        WSDDDocument.h
               c/vc     AxisClientDLL.dsp AxisServerDLL.dsp
                        Distribution.dsw
               c/vc/server/apache1_3 Apache1_3Module.dsp
               c/vc/server/apache2_0 Apache2_0Module.dsp
               c/vc/server/simple_axis_server SimpleAxisServer.dsp
               c/vc/soap SoapLibrary.dsp
               c/vc/transport/axis AxisTransport.dsp
               c/vc/wsdd WSDDLibrary.dsp
  Added:       c/src/engine SOAPTransportFactory.cpp SOAPTransportFactory.h
                        XMLParserFactory.cpp XMLParserFactory.h
               c/src/wsdd WSDDDocument.cpp
               c/src/xml/expat SoapParserExpat.cpp SoapParserExpat.h
               c/src/xml/xerces SoapBinInputStream.cpp SoapBinInputStream.h
                        SoapInputSource.cpp SoapInputSource.h
                        SoapParserXerces.cpp SoapParserXerces.h
                        XercesHandler.cpp XercesHandler.h
  Removed:     c/src/soap SoapBinInputStream.cpp SoapBinInputStream.h
                        SoapInputSource.cpp SoapInputSource.h
                        SoapParserExpat.cpp SoapParserExpat.h
                        SoapParserXerces.cpp SoapParserXerces.h
                        XercesHandler.cpp XercesHandler.h
               c/src/wsdd WSDDDocumentExpat.cpp WSDDDocumentExpat.h
                        WSDDDocumentXerces.cpp WSDDDocumentXerces.h
  Log:
  Parser abstraction
  1. Added new files
  	SOAPTransportFactory and XMLParserFactory classes
  2. Moved xerces and expat specific files from /src/soap /src/wsdd etc to /src/xml/xerces and /src/xml/expat respectively.
  3. Changes to the Axis codebase to make parser layer abstraction
  4. Added vc++ project files for making xerces and expat parser dynamic libraries.
  
  Revision  Changes    Path
  1.2       +13 -8     ws-axis/c/include/axis/SOAPTransport.h
  
  Index: SOAPTransport.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/include/axis/SOAPTransport.h,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SOAPTransport.h	12 May 2004 07:36:45 -0000	1.1
  +++ SOAPTransport.h	18 May 2004 11:09:08 -0000	1.2
  @@ -34,12 +34,9 @@
   
   #ifdef __cplusplus
   
  -class SOAPTransport  
  +class AxisIOStream
   {
   public:
  -	virtual ~SOAPTransport(){};
  -    virtual int openConnection()=0;
  -    virtual void closeConnection()=0;
   	/**
   	 * Used to send buffers to the transport layer. Axis Engine may call this method multiple 
   	 * times. Its upto the transport to decide how they are sent (chunked/unchunked etc). This 
  @@ -53,15 +50,23 @@
   	 */
       virtual AXIS_TRANSPORT_STATUS sendBytes(const char* pcSendBuffer, const void* pBufferid)=0;
   	/**
  +	 * Used to get part of or all SOAP message. 
  +	 */
  +    virtual AXIS_TRANSPORT_STATUS getBytes(char* pcBuffer, int* piRetSize)=0;
  +};
  +
  +class SOAPTransport : public AxisIOStream
  +{
  +public:
  +	virtual ~SOAPTransport(){};
  +    virtual int openConnection()=0;
  +    virtual void closeConnection()=0;
  +	/**
   	 * Method used to register the callback function which is called by transport layer to inform
   	 * Axis Engine that a buffer given to it is sent and it can be re-used by Axis Engine. 
   	 * 
   	 */
   	virtual void registerReleaseBufferCallback(AXIS_ENGINE_CALLBACK_RELEASE_SEND_BUFFER pFunct)=0;
  -	/**
  -	 * Used to get part of or all SOAP message. 
  -	 */
  -    virtual AXIS_TRANSPORT_STATUS getBytes(char* pcBuffer, int* piRetSize)=0;
       virtual void setTransportProperty(AXIS_TRANSPORT_INFORMATION_TYPE eType, const char* pcValue)=0;
       virtual const char* getTransportProperty(AXIS_TRANSPORT_INFORMATION_TYPE eType)=0;
       virtual void setTransportProperty(const char* pcKey, const char* pcValue)=0;
  
  
  
  1.17      +1 -0      ws-axis/c/include/axis/server/SoapDeSerializer.h
  
  Index: SoapDeSerializer.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/include/axis/server/SoapDeSerializer.h,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- SoapDeSerializer.h	18 May 2004 04:32:30 -0000	1.16
  +++ SoapDeSerializer.h	18 May 2004 11:09:08 -0000	1.17
  @@ -56,6 +56,7 @@
       /* Provider type of current service that uses this DeSerializer object */
       PROVIDERTYPE m_ProviderType;
       char* m_pcFaultDetail;
  +	SOAPTransport* m_pInputStream;
   
   private:
       int AXISCALL getArraySize(const AnyElement* pElement);
  
  
  
  1.12      +40 -8     ws-axis/c/include/axis/server/XMLParser.h
  
  Index: XMLParser.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/include/axis/server/XMLParser.h,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- XMLParser.h	12 May 2004 07:36:46 -0000	1.11
  +++ XMLParser.h	18 May 2004 11:09:08 -0000	1.12
  @@ -24,21 +24,53 @@
   /**
    * @class XMLParser
    * @brief Interface that any parser wrapper should implement in order to be use 
  - *        in Axis as a SOAP parser.
  + *        in Axis as a XML PULL parser. Its the responsibility of the implementation
  + *        class to free and memory allocated inside the class. The class should not 
  + *		  deallocate either the given input stream or any memory buffers that it gets
  + *		  from the stream.
    * @author Susantha Kumara (susantha@opensource.lk, skumara@virtusa.com)
    */
   class XMLParser
   {
   public:
       virtual ~XMLParser(){};
  -    virtual int setInputStream(SOAPTransport* pInputStream)=0;
  -    virtual SOAPTransport* getInputStream()=0;
  -    virtual int init()=0;
  -    virtual const XML_Ch* getNS4Prefix(const XML_Ch* prefix)=0;
  +	/**
  +	 * Sets the input stream. Here the parser object should also be initialized
  +	 * to its initial state. Axis will call this function first for each input 
  +	 * stream to be parsed.
  +	 *
  +	 * @param pInputStream Input stream from which the data to be parsed taken
  +	 *		  by calling its getBytes function. Function should not deallocate
  +	 *        either pInputStream or any memory buffers that it gets.
  +	 */
  +    virtual int setInputStream(AxisIOStream* pInputStream)=0;
  +	/**
  +	 * Used to get the corresponding namespace string for a given prefix.
  +	 *
  +	 * @param pcPrefix Prefix for which the namespace string is requested 
  +	 */
  +    virtual const XML_Ch* getNS4Prefix(const XML_Ch* pcPrefix)=0;
  +	/**
  +	 * Used to get the parser status. Should return AXIS_SUCCESS if nothing
  +	 * has gone wrong.
  +	 */
       virtual int getStatus()=0;
  -    virtual const AnyElement* next(bool isCharData=false)=0;
  -    virtual AXIS_TRANSPORT_STATUS getTransportStatus()=0;
  -    virtual void setTransportStatus(AXIS_TRANSPORT_STATUS nStatus)=0;
  +	/**
  +	 * Used to get the next XML event. The valid events are start element, end
  +	 * element and character data. If we think of SAX events the processing 
  +	 * instruction events, namespace prefix mapping events are not considered
  +	 * valid. If the implementation of this interface is wrapping up a SAX 
  +	 * parser it should follow the above rules.
  +	 *
  +	 * @param bIsCharData Indicates whether Axis is expecting a character data 
  +	 *		  event or not. If Axis is not expecting a character data event 
  +	 *		  (bIsCharData is false) the parser should not return a character 
  +	 *		  data event. Instead it should skip all character data events 
  +	 *	      until it finds a non-character data event and return it.
  +	 */
  +    virtual const AnyElement* next(bool bIsCharData=false)=0;
  +protected:
  +	AxisIOStream* m_pInputStream;
   
   };
   
  
  
  
  1.21      +2 -1      ws-axis/c/src/common/AxisTime.cpp
  
  Index: AxisTime.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/common/AxisTime.cpp,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- AxisTime.cpp	26 Apr 2004 04:04:36 -0000	1.20
  +++ AxisTime.cpp	18 May 2004 11:09:09 -0000	1.21
  @@ -175,7 +175,7 @@
       int intHours = 0;
       int intMins = 0;
       int intSecs = 0;
  -    unsigned int intPos, intPos1, intPos2, intPos3, intPos4, intPos5, intPos6;
  +    unsigned int intPos1, intPos2, intPos3, intPos4, intPos5, intPos6;
       time_t now;
       struct tm result1, result2;
       struct tm *pTm;
  @@ -472,6 +472,7 @@
   
           default:;
       }
  +	return AXIS_SUCCESS;
   }
   
   long AxisTime::getDuration ()
  
  
  
  1.53      +3 -14     ws-axis/c/src/engine/Axis.cpp
  
  Index: Axis.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/engine/Axis.cpp,v
  retrieving revision 1.52
  retrieving revision 1.53
  diff -u -r1.52 -r1.53
  --- Axis.cpp	18 May 2004 04:32:30 -0000	1.52
  +++ Axis.cpp	18 May 2004 11:09:09 -0000	1.53
  @@ -56,11 +56,8 @@
   #include <axis/server/AxisConfig.h>
   #include "../wsdd/WSDDKeywords.h"
   #include <axis/server/AxisTrace.h>
  -#include "../transport/SOAPTransportFactory.h"
  -
  -#ifdef USE_XERCES_PARSER
  -#include <xercesc/util/PlatformUtils.hpp>
  -#endif
  +#include "SOAPTransportFactory.h"
  +#include "XMLParserFactory.h"
   
   #define BYTESTOREAD 64
   // The relative location of the wsdl files hardcoded
  @@ -71,9 +68,6 @@
   unsigned char chEBuf[1024];
   #endif
   
  -#ifdef USE_XERCES_PARSER
  -XERCES_CPP_NAMESPACE_USE
  -#endif
   // Synchronized global variables.
   HandlerLoader* g_pHandlerLoader;
   AppScopeHandlerPool* g_pAppScopeHandlerPool;
  @@ -238,9 +232,6 @@
   {
       int status = 0;
       // order of these initialization method invocation should not be changed
  -#ifdef USE_XERCES_PARSER
  -    XMLPlatformUtils::Initialize ();
  -#endif
       AxisEngine::m_bServer = bServer;
       AxisUtils::initialize ();
       WSDDKeywords::initialize ();
  @@ -249,6 +240,7 @@
       URIMapping::initialize ();
       SoapFault::initialize ();
   	SOAPTransportFactory::initialize();
  +	XMLParserFactory::initialize();
   #ifdef AXIS_CLIENT_LIB
       CallBase::s_Initialize ();
   #endif
  @@ -320,9 +312,6 @@
   extern "C" int uninitialize_module ()
   {
   	SOAPTransportFactory::uninitialize();
  -#ifdef USE_XERCES_PARSER
  -    XMLPlatformUtils::Terminate ();
  -#endif
       ModuleUnInitialize ();
       SoapKeywordMapping::uninitialize ();
       return AXIS_SUCCESS;
  
  
  
  1.1                  ws-axis/c/src/engine/SOAPTransportFactory.cpp
  
  Index: SOAPTransportFactory.cpp
  ===================================================================
  /*
   *   Copyright 2003-2004 The Apache Software Foundation.
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *   limitations under the License.
   */
  
  /**
   * This class 
   *
   * @author Susantha Kumara (skumara@virtusa.com, susantha@opensource.lk)
   *
   */
  
  #include "SOAPTransportFactory.h"
  #include <axis/SOAPTransport.h>
  #include <stdio.h>
  
  const char* SOAPTransportFactory::m_pcLibraryPath = 0;
  DLHandler SOAPTransportFactory::m_LibHandler = 0;
  CREATE_OBJECT1 SOAPTransportFactory::m_Create = 0;
  DELETE_OBJECT1 SOAPTransportFactory::m_Delete = 0;
  
  SOAPTransportFactory::SOAPTransportFactory()
  {
  	m_LibHandler = 0;
  }
  
  SOAPTransportFactory::~SOAPTransportFactory()
  {
  
  }
  
  int SOAPTransportFactory::initialize()
  {
  #ifdef WIN32
  #ifdef _DEBUG
  	m_pcLibraryPath = "AxisTransport_D.dll"; //this will be taken from configuration file
  #else
  	m_pcLibraryPath = "AxisTransport.dll"; //this will be taken from configuration file
  #endif
  #else
  	m_pcLibraryPath = "libAxisTransport.so"; //this will be taken from configuration file
  #endif
  	if (!loadLib())
  	{
  #if defined(USE_LTDL)
          m_Create = (CREATE_OBJECT1) lt_dlsym(m_LibHandler, CREATE_FUNCTION1);
          m_Delete = (DELETE_OBJECT1) lt_dlsym(m_LibHandler, DELETE_FUNCTION1);
  #elif defined(WIN32)
          m_Create = (CREATE_OBJECT1) GetProcAddress(m_LibHandler, CREATE_FUNCTION1);
          m_Delete = (DELETE_OBJECT1) GetProcAddress(m_LibHandler, DELETE_FUNCTION1);
  #else
          m_Create = (CREATE_OBJECT1) dlsym(m_LibHandler, CREATE_FUNCTION1);
          m_Delete = (DELETE_OBJECT1) dlsym(m_LibHandler, DELETE_FUNCTION1);
  #endif
          if (!m_Create || !m_Delete)
          {
              unloadLib();
              printf("Transport library loading failed");
          }
          else
          {
              return AXIS_SUCCESS;
          }		
  	}
  	return AXIS_FAIL;
  }
  
  int SOAPTransportFactory::uninitialize()
  {
  	return unloadLib();
  }
  
  /**
   * Should create an instance of transport of type given by eProtocol
   */
  SOAPTransport* SOAPTransportFactory::getTransportObject(AXIS_PROTOCOL_TYPE eProtocol)
  {
  	SOAPTransport* pTpt;
  	m_Create(&pTpt);
  	return pTpt;
  }
  
  void SOAPTransportFactory::destroyTransportObject(SOAPTransport* pObject)
  {
  	m_Delete(pObject);
  }
  
  int SOAPTransportFactory::loadLib()
  {
  #if defined(USE_LTDL)
      m_LibHandler = lt_dlopen(m_pcLibraryPath);
      if (!m_LibHandler)
      {
          printf("DLOPEN FAILED in loading transport library: %s\n", lt_dlerror ());
      }
  #elif defined(WIN32)
      m_LibHandler = LoadLibrary(m_pcLibraryPath);
  #else 
      m_LibHandler = dlopen(m_pcLibraryPath, RTLD_LAZY);
      if (!m_LibHandler)
      {
          printf("DLOPEN FAILED in loading transport library: %s\n", dlerror());
      }
  #endif
      return (m_LibHandler != 0) ? AXIS_SUCCESS : AXIS_FAIL;
  }
  
  int SOAPTransportFactory::unloadLib()
  {
  #if defined(USE_LTDL)
      lt_dlclose(m_LibHandler);
  #elif defined(WIN32)
      FreeLibrary(m_LibHandler);
  #else 
      dlclose(m_LibHandler);
  #endif
      return AXIS_SUCCESS;
  }
  
  
  
  
  1.1                  ws-axis/c/src/engine/SOAPTransportFactory.h
  
  Index: SOAPTransportFactory.h
  ===================================================================
  /*
   *   Copyright 2003-2004 The Apache Software Foundation.
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *   limitations under the License.
   */
  
  /**
   * This class 
   *
   * @author Susantha Kumara (skumara@virtusa.com, susantha@opensource.lk)
   *
   */
  
  
  #if !defined(AXIS_SOAPTRANSPORTFACTORY_H__OF_AXIS_INCLUDED_)
  #define AXIS_SOAPTRANSPORTFACTORY_H__OF_AXIS_INCLUDED_
  
  #include <axis/server/GDefine.h>
  
  #define CREATE_FUNCTION1 "CreateInstance"
  #define DELETE_FUNCTION1 "DestroyInstance"
  
  #if defined(USE_LTDL)
  #include <ltdl.h>
  #define DLHandler lt_dlhandle
  #elif defined(WIN32)
  #include <windows.h>
  #define DLHandler HINSTANCE
  #define RTLD_LAZY 0
  #else /* Linux */
  #include <dlfcn.h>
  #define DLHandler void*
  #endif
  
  class SOAPTransport;
  
  typedef int (* CREATE_OBJECT1) (SOAPTransport** inst);
  typedef int (* DELETE_OBJECT1) (SOAPTransport* inst);
  
  class SOAPTransportFactory  
  {
  public:
  	SOAPTransportFactory();
  	virtual ~SOAPTransportFactory();
  	/**
       * Used to initialize the global object. Following tasks are done
       * 1. Get the transport library name(s) from the configuration file.
       * 2. Load those dynamic transport libraries.
       * 3. Get the function pointers of the exported functions
       * 4. Get any other information about the library. (ex: what protocols
       *    are supported etc)
       */
  	static int initialize();
  	/** 
  	 * Used to uninitialize the global object.
  	 * 1. Unloads all dynamic transport libraries.
  	 */
  	static int uninitialize();
  	/**
  	 * Used to create a transport object of given protocol 
  	 */
  	static SOAPTransport* getTransportObject(AXIS_PROTOCOL_TYPE eProtocol);
  	static void destroyTransportObject(SOAPTransport* pObject);
  
  	static int loadLib();
  	static int unloadLib();
  
  private:
  	static const char* m_pcLibraryPath; /* later this should be a list with libraries with thier other information */
  	static DLHandler m_LibHandler;
      static CREATE_OBJECT1 m_Create;
      static DELETE_OBJECT1 m_Delete;
  
  };
  
  #endif 
  
  
  1.1                  ws-axis/c/src/engine/XMLParserFactory.cpp
  
  Index: XMLParserFactory.cpp
  ===================================================================
  /*
   *   Copyright 2003-2004 The Apache Software Foundation.
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *   limitations under the License.
   */
  
  /**
   * This class 
   *
   * @author Susantha Kumara (skumara@virtusa.com, susantha@opensource.lk)
   *
   */
  
  #include "XMLParserFactory.h"
  #include <axis/server/XMLParser.h>
  #include <stdio.h>
  
  const char* XMLParserFactory::m_pcLibraryPath = 0;
  DLHandler XMLParserFactory::m_LibHandler = 0;
  CREATE_OBJECT2 XMLParserFactory::m_Create = 0;
  DELETE_OBJECT2 XMLParserFactory::m_Delete = 0;
  
  XMLParserFactory::XMLParserFactory()
  {
  	m_LibHandler = 0;
  }
  
  XMLParserFactory::~XMLParserFactory()
  {
  
  }
  
  int XMLParserFactory::initialize()
  {
  #ifdef WIN32
  #ifdef _DEBUG
  	m_pcLibraryPath = "AxisXMLParser_D.dll"; //this will be taken from configuration file
  #else
  	m_pcLibraryPath = "AxisXMLParser.dll"; //this will be taken from configuration file
  #endif
  #else
  	m_pcLibraryPath = "libAxisXMLParser.so"; //this will be taken from configuration file
  #endif
  	if (!loadLib())
  	{
  #if defined(USE_LTDL)
          m_Create = (CREATE_OBJECT2) lt_dlsym(m_LibHandler, CREATE_FUNCTION2);
          m_Delete = (DELETE_OBJECT2) lt_dlsym(m_LibHandler, DELETE_FUNCTION2);
  #elif defined(WIN32)
          m_Create = (CREATE_OBJECT2) GetProcAddress(m_LibHandler, CREATE_FUNCTION2);
          m_Delete = (DELETE_OBJECT2) GetProcAddress(m_LibHandler, DELETE_FUNCTION2);
  #else
          m_Create = (CREATE_OBJECT2) dlsym(m_LibHandler, CREATE_FUNCTION2);
          m_Delete = (DELETE_OBJECT2) dlsym(m_LibHandler, DELETE_FUNCTION2);
  #endif
          if (!m_Create || !m_Delete)
          {
              unloadLib();
              printf("Transport library loading failed");
          }
          else
          {
              return AXIS_SUCCESS;
          }		
  	}
  	return AXIS_FAIL;
  }
  
  int XMLParserFactory::uninitialize()
  {
  	return unloadLib();
  }
  
  /**
   * Should create an instance of transport of type given by eProtocol
   */
  XMLParser* XMLParserFactory::getParserObject()
  {
  	XMLParser* pTpt = 0;
  	if (m_Create) m_Create(&pTpt);
  	return pTpt;
  }
  
  void XMLParserFactory::destroyParserObject(XMLParser* pObject)
  {
  	m_Delete(pObject);
  }
  
  int XMLParserFactory::loadLib()
  {
  #if defined(USE_LTDL)
      m_LibHandler = lt_dlopen(m_pcLibraryPath);
      if (!m_LibHandler)
      {
          printf("DLOPEN FAILED in loading transport library: %s\n", lt_dlerror ());
      }
  #elif defined(WIN32)
      m_LibHandler = LoadLibrary(m_pcLibraryPath);
  #else 
      m_LibHandler = dlopen(m_pcLibraryPath, RTLD_LAZY);
      if (!m_LibHandler)
      {
          printf("DLOPEN FAILED in loading transport library: %s\n", dlerror());
      }
  #endif
      return (m_LibHandler != 0) ? AXIS_SUCCESS : AXIS_FAIL;
  }
  
  int XMLParserFactory::unloadLib()
  {
  #if defined(USE_LTDL)
      lt_dlclose(m_LibHandler);
  #elif defined(WIN32)
      FreeLibrary(m_LibHandler);
  #else 
      dlclose(m_LibHandler);
  #endif
      return AXIS_SUCCESS;
  }
  
  
  
  
  1.1                  ws-axis/c/src/engine/XMLParserFactory.h
  
  Index: XMLParserFactory.h
  ===================================================================
  /*
   *   Copyright 2003-2004 The Apache Software Foundation.
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *   limitations under the License.
   */
  
  /**
   * This class 
   *
   * @author Susantha Kumara (skumara@virtusa.com, susantha@opensource.lk)
   *
   */
  
  
  #if !defined(AXIS_XMLPARSERFACTORY_H__OF_AXIS_INCLUDED_)
  #define AXIS_XMLPARSERFACTORY_H__OF_AXIS_INCLUDED_
  
  #include <axis/server/GDefine.h>
  #include <axis/server/XMLParser.h>
  
  #define CREATE_FUNCTION2 "CreateInstance"
  #define DELETE_FUNCTION2 "DestroyInstance"
  
  #if defined(USE_LTDL)
  #include <ltdl.h>
  #define DLHandler lt_dlhandle
  #elif defined(WIN32)
  #include <windows.h>
  #define DLHandler HINSTANCE
  #define RTLD_LAZY 0
  #else /* Linux */
  #include <dlfcn.h>
  #define DLHandler void*
  #endif
  
  typedef int (* CREATE_OBJECT2) (XMLParser** inst);
  typedef int (* DELETE_OBJECT2) (XMLParser* inst);
  
  class XMLParserFactory  
  {
  public:
  	XMLParserFactory();
  	virtual ~XMLParserFactory();
  	/**
       * Used to initialize the global object. Following tasks are done
       * 1. Get the parser library name from the configuration file.
       * 2. Load that dynamic parser library.
       * 3. Get the function pointers of the exported functions
       * 4. Get any other information about the library.
       */
  	static int initialize();
  	/** 
  	 * Used to uninitialize the global object.
  	 * 1. Unloads dynamic parser library.
  	 */
  	static int uninitialize();
  	/**
  	 * Used to create a parser object 
  	 */
  	static XMLParser* getParserObject();
  	/**
  	 * Destroys the parser object 
  	 */
  	static void destroyParserObject(XMLParser* pObject);
  
  	static int loadLib();
  	static int unloadLib();
  
  private:
  	static const char* m_pcLibraryPath;
  	static DLHandler m_LibHandler;
      static CREATE_OBJECT2 m_Create;
      static DELETE_OBJECT2 m_Delete;
  
  };
  
  #endif 
  
  
  1.41      +1 -1      ws-axis/c/src/engine/client/Call.cpp
  
  Index: Call.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/engine/client/Call.cpp,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- Call.cpp	12 May 2004 07:36:46 -0000	1.40
  +++ Call.cpp	18 May 2004 11:09:09 -0000	1.41
  @@ -26,7 +26,7 @@
   #include "../../transport/axis/AxisTransport.h"
   #include "../../transport/axis/Channel.hpp"
   #include "ClientAxisEngine.h"
  -#include "../../transport/SOAPTransportFactory.h"
  +#include "../SOAPTransportFactory.h"
   #include <axis/SOAPTransport.h>
   
   extern "C" int initialize_module (int bServer);
  
  
  
  1.46      +41 -57    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.45
  retrieving revision 1.46
  diff -u -r1.45 -r1.46
  --- SoapDeSerializer.cpp	18 May 2004 04:32:31 -0000	1.45
  +++ SoapDeSerializer.cpp	18 May 2004 11:09:09 -0000	1.46
  @@ -37,15 +37,9 @@
   #include <axis/server/AxisTrace.h>
   #include "apr_base64.h"
   #include "HexCoder.h"
  -
  -
  -#ifdef USE_EXPAT_PARSER
  -#include "SoapParserExpat.h"
  -#elif USE_XERCES_PARSER
  -#include "SoapParserXerces.h"
  -#else
  -#include <axis/xml/SoapParser.h>
  -#endif
  +#include "../engine/XMLParserFactory.h"
  +#include <axis/server/XMLParser.h>
  +#include "../xml/QName.h"
   
   extern AxisTrace* g_pAT;
   
  @@ -55,21 +49,15 @@
   
   SoapDeSerializer::SoapDeSerializer()
   {
  -    #ifdef USE_EXPAT_PARSER
  -    m_pParser = new SoapParserExpat();
  -    #elif USE_XERCES_PARSER
  -    m_pParser = new SoapParserXerces();
  -    #else
  -    m_pParser = new SoapParser();
  -    #endif
  +	m_pParser = XMLParserFactory::getParserObject();
       m_pEnv = NULL;
       m_pHeader = NULL;
       m_pcFaultDetail = (char*) malloc(sizeof(char) * 100);
  +	m_pInputStream = 0;
   }
   
   SoapDeSerializer::~SoapDeSerializer()
   {
  -    m_pParser->init();
       if (m_pEnv)
   	 delete m_pEnv;
       if(m_pHeader)
  @@ -82,6 +70,7 @@
   {
       if (NULL == pInputStream)
           return AXIS_FAIL;
  +	m_pInputStream = pInputStream;
       return m_pParser->setInputStream(pInputStream);
   }
   
  @@ -347,7 +336,6 @@
   int SoapDeSerializer::init()
   {
       m_pNode = 0;
  -    m_nStatus = m_pParser->init();
       if (m_pEnv) 
       {
           delete m_pEnv;
  @@ -571,7 +559,7 @@
               (0 == strcmp(pElement->m_pchAttributes[i],
               SoapKeywordMapping::map(m_nSoapVersion).pchWords[SKW_ARRAYTYPE])))
           {
  -            ::QName qn;
  +            QName qn;
               qn.splitQNameString(pElement->m_pchAttributes[i+2], '[');
               nSize = strtol(qn.localname, &m_pEndptr, 10);
               qn.mergeQNameString('[');
  @@ -606,6 +594,10 @@
   #define CONV_STRTOBASE64BINARY(str) decodeFromBase64Binary(str)
   #define CONV_STRTOHEXBINARY(str) decodeFromHexBinary(str)
   
  +#define INIT_VALUE_DATETIME {0,0,0,0,0,0,0,0,0}
  +#define INIT_VALUE_NUMBER 0
  +#define INIT_VALUE_XSDBINARY {0,0}
  +
   #define DESERIALIZE_ENCODED_ARRAY_BLOCK(cpp_type, conv_func) \
   Array.m_Array = malloc(sizeof(cpp_type)*Array.m_Size);\
   if (!Array.m_Array)\
  @@ -1061,8 +1053,8 @@
       return m_nStatus;
   }
   
  -#define DESERIALIZE_GET_ATTRIBUTE_AS(cpp_type, conv_func) \
  -    cpp_type ret;\
  +#define DESERIALIZE_GET_ATTRIBUTE_AS(cpp_type, conv_func, init_value) \
  +    cpp_type ret = init_value;\
       if(!m_pCurrNode) \
       {\
           /**\
  @@ -1154,113 +1146,113 @@
                                                            const AxisChar* 
                                                            pNamespace)
   {
  -    DESERIALIZE_GET_ATTRIBUTE_AS(unsigned int,CONV_STRTOUL)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(unsigned int,CONV_STRTOUL,INIT_VALUE_NUMBER)
   }
   short SoapDeSerializer::getAttributeAsShort(const AxisChar* pName, 
                                               const AxisChar* pNamespace)
   {
  -    DESERIALIZE_GET_ATTRIBUTE_AS(short,CONV_STRTOL)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(short,CONV_STRTOL,INIT_VALUE_NUMBER)
   }
   unsigned short SoapDeSerializer::getAttributeAsUnsignedShort(const AxisChar* 
                                                                pName, 
                                                                const AxisChar* 
                                                                pNamespace)
   {
  -    DESERIALIZE_GET_ATTRIBUTE_AS(unsigned short,CONV_STRTOUL)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(unsigned short,CONV_STRTOUL,INIT_VALUE_NUMBER)
   }
   char SoapDeSerializer::getAttributeAsByte(const AxisChar* pName, const 
                                             AxisChar* pNamespace)
   {
  -    DESERIALIZE_GET_ATTRIBUTE_AS(char,CONV_STRTOL)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(char,CONV_STRTOL,INIT_VALUE_NUMBER)
   }
   unsigned char SoapDeSerializer::getAttributeAsUnsignedByte(const AxisChar* 
                                                              pName, const 
                                                              AxisChar* pNamespace)
   {
  -    DESERIALIZE_GET_ATTRIBUTE_AS(unsigned char,CONV_STRTOUL)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(unsigned char,CONV_STRTOUL,INIT_VALUE_NUMBER)
   }
   long SoapDeSerializer::getAttributeAsLong(const AxisChar* pName, const 
                                             AxisChar* pNamespace)
   {
  -    DESERIALIZE_GET_ATTRIBUTE_AS(long,CONV_STRTOL)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(long,CONV_STRTOL,INIT_VALUE_NUMBER)
   }
   long SoapDeSerializer::getAttributeAsInteger(const AxisChar* pName, const 
                                                AxisChar* pNamespace)
   {
  -    DESERIALIZE_GET_ATTRIBUTE_AS(long,CONV_STRTOL)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(long,CONV_STRTOL,INIT_VALUE_NUMBER)
   }
   unsigned long SoapDeSerializer::getAttributeAsUnsignedLong(const AxisChar* 
                                                              pName, const 
                                                              AxisChar* pNamespace)
   {
  -    DESERIALIZE_GET_ATTRIBUTE_AS(unsigned long,CONV_STRTOUL)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(unsigned long,CONV_STRTOUL,INIT_VALUE_NUMBER)
   }
   float SoapDeSerializer::getAttributeAsFloat(const AxisChar* pName, const 
                                               AxisChar* pNamespace)
   {
  -    DESERIALIZE_GET_ATTRIBUTE_AS(float,CONV_STRTOD)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(float,CONV_STRTOD,INIT_VALUE_NUMBER)
   }
   double SoapDeSerializer::getAttributeAsDouble(const AxisChar* pName, const 
                                                 AxisChar* pNamespace)
   {
  -    DESERIALIZE_GET_ATTRIBUTE_AS(double,CONV_STRTOD)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(double,CONV_STRTOD,INIT_VALUE_NUMBER)
   }
   double SoapDeSerializer::getAttributeAsDecimal(const AxisChar* pName, const 
                                                  AxisChar* pNamespace)
   {
  -    DESERIALIZE_GET_ATTRIBUTE_AS(double,CONV_STRTOD)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(double,CONV_STRTOD,INIT_VALUE_NUMBER)
   }
   AxisChar* SoapDeSerializer::getAttributeAsString(const AxisChar* pName, const 
                                                    AxisChar* pNamespace)
   {
  -    DESERIALIZE_GET_ATTRIBUTE_AS(AxisChar*,CONV_STRDUP)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(AxisChar*,CONV_STRDUP,INIT_VALUE_NUMBER)
   }
   AxisChar* SoapDeSerializer::getAttributeAsAnyURI(const AxisChar* pName, const 
                                                    AxisChar* pNamespace)
   {
  -    DESERIALIZE_GET_ATTRIBUTE_AS(AxisChar*,CONV_STRDUP)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(AxisChar*,CONV_STRDUP,INIT_VALUE_NUMBER)
   }
   AxisChar* SoapDeSerializer::getAttributeAsQName(const AxisChar* pName, const 
                                                   AxisChar* pNamespace)
   {
  -    DESERIALIZE_GET_ATTRIBUTE_AS(AxisChar*,CONV_STRDUP)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(AxisChar*,CONV_STRDUP,INIT_VALUE_NUMBER)
   }
   xsd__hexBinary SoapDeSerializer::getAttributeAsHexBinary(const AxisChar* pName,
                                                            const AxisChar* 
                                                            pNamespace)
   {
  -    DESERIALIZE_GET_ATTRIBUTE_AS(xsd__hexBinary,CONV_STRTOHEXBINARY)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(xsd__hexBinary,CONV_STRTOHEXBINARY, INIT_VALUE_XSDBINARY)
   }
   xsd__base64Binary SoapDeSerializer::getAttributeAsBase64Binary(const AxisChar* 
                                                                  pName, const 
                                                                  AxisChar* 
                                                                  pNamespace)
   {
  -    DESERIALIZE_GET_ATTRIBUTE_AS(xsd__base64Binary,CONV_STRTOBASE64BINARY)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(xsd__base64Binary,CONV_STRTOBASE64BINARY, INIT_VALUE_XSDBINARY)
   }
   struct tm SoapDeSerializer::getAttributeAsDateTime(const AxisChar* pName, 
                                                      const AxisChar* pNamespace)
   {
       XSDTYPE nType = XSD_DATETIME;
  -    DESERIALIZE_GET_ATTRIBUTE_AS(struct tm, CONV_STRTODATETIME)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(struct tm, CONV_STRTODATETIME, INIT_VALUE_DATETIME)
   }
   struct tm SoapDeSerializer::getAttributeAsDate(const AxisChar* pName, const 
                                                  AxisChar* pNamespace)
   {
       XSDTYPE nType = XSD_DATE;
  -    DESERIALIZE_GET_ATTRIBUTE_AS(struct tm, CONV_STRTODATETIME)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(struct tm, CONV_STRTODATETIME, INIT_VALUE_DATETIME)
   }
   struct tm SoapDeSerializer::getAttributeAsTime(const AxisChar* pName, const 
                                                  AxisChar* pNamespace)
   {
       XSDTYPE nType = XSD_DATE;
  -    DESERIALIZE_GET_ATTRIBUTE_AS(struct tm, CONV_STRTODATETIME)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(struct tm, CONV_STRTODATETIME, INIT_VALUE_DATETIME)
   }
   long SoapDeSerializer::getAttributeAsDuration(const AxisChar* pName, const 
                                                 AxisChar* pNamespace)
   {
       XSDTYPE nType = XSD_DURATION;
  -    DESERIALIZE_GET_ATTRIBUTE_AS(long, CONV_STRTODURATION)
  +    DESERIALIZE_GET_ATTRIBUTE_AS(long, CONV_STRTODURATION,INIT_VALUE_NUMBER)
   }
   
   /*
  @@ -2489,7 +2481,7 @@
   struct tm SoapDeSerializer::getElementAsDateTime(const AxisChar* pName, 
                                                    const AxisChar* pNamespace)
   {
  -    struct tm ret;
  +    struct tm ret = INIT_VALUE_DATETIME;
       if (AXIS_SUCCESS != m_nStatus) return ret;
       if (RPC_ENCODED == m_nStyle)
       {
  @@ -2561,7 +2553,7 @@
   struct tm SoapDeSerializer::getElementAsDate(const AxisChar* pName, 
                                                const AxisChar* pNamespace)
   {
  -    struct tm ret;
  +    struct tm ret = INIT_VALUE_DATETIME;
       if (AXIS_SUCCESS != m_nStatus) return ret;
       if (RPC_ENCODED == m_nStyle)
       {
  @@ -2634,7 +2626,7 @@
   struct tm SoapDeSerializer::getElementAsTime(const AxisChar* pName, 
                                                const AxisChar* pNamespace)
   {
  -    struct tm ret;
  +    struct tm ret = INIT_VALUE_DATETIME;
       if (AXIS_SUCCESS != m_nStatus) return ret;
       if (RPC_ENCODED == m_nStyle)
       {
  @@ -2914,14 +2906,14 @@
   xsd__hexBinary SoapDeSerializer::getBodyAsHexBinary()
   {
       /* TODO */
  -    xsd__hexBinary hb;
  +    xsd__hexBinary hb = {0,0};
       return hb;
   }
   
   xsd__base64Binary SoapDeSerializer::getBodyAsBase64Binary()
   {
       /* TODO */
  -    xsd__base64Binary bb;
  +    xsd__base64Binary bb = {0,0};
       return bb;
   }
   
  @@ -2941,15 +2933,7 @@
   {
       int nChars = 0;
       char pBuffer[100];
  -    if (TRANSPORT_IN_PROGRESS == m_pParser->getTransportStatus())
  -    {
  -        do
  -        {
  -            m_pParser->setTransportStatus(m_pParser->getInputStream()->getBytes
  -				(pBuffer, &nChars));
  -        }
  -        while (TRANSPORT_IN_PROGRESS == m_pParser->getTransportStatus());
  -    }
  -    return (TRANSPORT_FINISHED == m_pParser->
  -        getTransportStatus())? AXIS_SUCCESS : AXIS_FAIL;
  +	if (!m_pInputStream) return AXIS_FAIL;
  +	while (TRANSPORT_IN_PROGRESS == m_pInputStream->getBytes(pBuffer, &nChars));
  +	return AXIS_SUCCESS;
   }
  
  
  
  1.20      +0 -1      ws-axis/c/src/soap/SoapFault.cpp
  
  Index: SoapFault.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/SoapFault.cpp,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- SoapFault.cpp	18 May 2004 04:32:31 -0000	1.19
  +++ SoapFault.cpp	18 May 2004 11:09:09 -0000	1.20
  @@ -125,7 +125,6 @@
    */
   SoapFault* SoapFault::getSoapFault(int iFaultCode)
   {   
  -    const char* temp; 
       SoapFault* pSoapFault= NULL;
   
       /* fill the soap fault object */
  
  
  
  1.35      +3 -13     ws-axis/c/src/wsdd/WSDDDeployment.cpp
  
  Index: WSDDDeployment.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/wsdd/WSDDDeployment.cpp,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- WSDDDeployment.cpp	10 May 2004 12:02:59 -0000	1.34
  +++ WSDDDeployment.cpp	18 May 2004 11:09:10 -0000	1.35
  @@ -20,17 +20,7 @@
    */
   
   #include "WSDDDeployment.h"
  -
  -#ifdef USE_EXPAT_PARSER
  -#include "WSDDDocumentExpat.h"
  -#define WSDDDOCUMENTPARSER WSDDDocumentExpat
  -#elif USE_XERCES_PARSER
  -#include "WSDDDocumentXerces.h"
  -#define WSDDDOCUMENTPARSER WSDDDocumentXerces
  -#else
  -#include "WSDDDocumentTXPP.h"
  -#define WSDDDOCUMENTPARSER WSDDDocumentTXPP
  -#endif
  +#include "WSDDDocument.h"
   
   #include <axis/server/GDefine.h>
   #include <axis/server/AxisConfig.h>
  @@ -99,7 +89,7 @@
   
   int WSDDDeployment::updateWSDD(const AxisChar* sWSDD)
   {
  -    WSDDDocument* doc = new WSDDDOCUMENTPARSER(m_pLibNameIdMap);
  +    WSDDDocument* doc = new WSDDDocument(m_pLibNameIdMap);
       if (AXIS_SUCCESS != doc->updateDeployment(sWSDD, this))
       {
           delete doc;
  @@ -113,7 +103,7 @@
   int WSDDDeployment::loadWSDD(const AxisChar* sWSDD)
   {
       m_sWSDDPath = string(sWSDD);
  -    WSDDDocument* doc = new WSDDDOCUMENTPARSER(m_pLibNameIdMap);
  +    WSDDDocument* doc = new WSDDDocument(m_pLibNameIdMap);
       if (AXIS_SUCCESS != doc->getDeployment(sWSDD, this))
       {
               printf("wsdd loading failed\n");
  
  
  
  1.18      +1 -2      ws-axis/c/src/wsdd/WSDDDeployment.h
  
  Index: WSDDDeployment.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/wsdd/WSDDDeployment.h,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- WSDDDeployment.h	26 Apr 2004 04:04:39 -0000	1.17
  +++ WSDDDeployment.h	18 May 2004 11:09:10 -0000	1.18
  @@ -37,8 +37,7 @@
    */
   class WSDDDeployment
   {
  -    friend class WSDDDocumentExpat;
  -    friend class WSDDDocumentXerces;
  +    friend class WSDDDocument;
   public:
       int loadWSDD(const AxisChar* sWSDD);
       int updateWSDD(const AxisChar* sWSDD);
  
  
  
  1.17      +59 -12    ws-axis/c/src/wsdd/WSDDDocument.h
  
  Index: WSDDDocument.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/wsdd/WSDDDocument.h,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- WSDDDocument.h	26 Apr 2004 04:04:39 -0000	1.16
  +++ WSDDDocument.h	18 May 2004 11:09:10 -0000	1.17
  @@ -14,28 +14,81 @@
    *   limitations under the License.
    */
   
  +#ifdef WIN32
  +#pragma warning(disable : 4786)
  +#endif
  +
   #if !defined(__WSDDDOCUMENT_H_OF_AXIS_INCLUDED__)
   #define __WSDDDOCUMENT_H_OF_AXIS_INCLUDED__
   
  +#include "WSDDDocument.h"
  +#include <axis/SOAPTransport.h>
  +#include <axis/server/AnyElement.h>
   #include "WSDDDeployment.h"
   #include <axis/server/WSDDService.h>
   #include "../xml/QName.h"
   
  +#include <string>
  +#include <map>
  +
  +using namespace std;
  +
   enum WSDDLevels {WSDD_UNKNOWN=1, WSDD_DEPLOYMENT, WSDD_UNDEPLOYMENT,
                    WSDD_GLOBCONF, WSDD_SERVICE, WSDD_HANDLER, WSDD_CHAIN,
                    WSDD_TRANSPORT, WSDD_REQFLOW, WSDD_RESFLOW, WSDD_PARAM };
   
  -/* wsdd file related defines */
   #define METHODNAME_SEPARATOR ' '
   #define ROLENAME_SEPARATOR ','
   #define TRANSCODE_BUFFER_SIZE 1024
  +
   /*
  - *   @class WSDDDocument
  - *   @brief Interface for WSDD processor
  - *   @author Suasntha Kumara (skumara@virtusa.com, susantha@opensource.lk)
  + *  @class WSDDDocument
  + *  @brief
  + *  @author Sanjaya Sinharage(sanjaya@opensource.lk)
  + *  @author Suasntha Kumara (skumara@virtusa.com, susantha@opensource.lk)
    */
   class WSDDDocument
   {
  +
  +public:
  +    WSDDDocument(map<AxisString, int>* pLibNameIdMap);
  +    ~WSDDDocument();
  +    int getDeployment(const AxisChar* pcWSDDFileName, WSDDDeployment* pDeployment);
  +    int updateDeployment(const AxisChar* pcWSDDMemBuffer, WSDDDeployment* pDeployment);
  +    void startElement(const AnyElement* pEvent);
  +    void endElement(const AnyElement* pEvent);
  +
  +	/* inner class */
  +	class WSDDFileInputStream : public AxisIOStream
  +	{
  +	private:
  +		const char* m_pcWSDDFileName;
  +		FILE *m_pFile;
  +	public:
  +		WSDDFileInputStream(const char* pcWSDDFileName)
  +		{m_pcWSDDFileName = pcWSDDFileName; m_pFile = 0;};
  +		virtual ~WSDDFileInputStream(){};
  +		AXIS_TRANSPORT_STATUS sendBytes(const char* pcSendBuffer, const void* pBufferid);
  +		AXIS_TRANSPORT_STATUS getBytes(char* pcBuffer, int* piRetSize);
  +	};
  +
  +	class WSDDMemBufInputStream : public AxisIOStream
  +	{
  +	private:
  +		const char* m_pcWSDDMemBuffer;
  +	public:
  +		WSDDMemBufInputStream(const char* pcWSDDMemBuffer)
  +		{m_pcWSDDMemBuffer = pcWSDDMemBuffer;};
  +		virtual ~WSDDMemBufInputStream(){};
  +		AXIS_TRANSPORT_STATUS sendBytes(const char* pcSendBuffer, const void* pBufferid);
  +		AXIS_TRANSPORT_STATUS getBytes(char* pcBuffer, int* piRetSize);
  +	};
  +private:
  +    void processAttributes(WSDDLevels eElementType, const AnyElement* pEvent);
  +    void getParameters(WSDDLevels eElementType, const AnyElement* pEvent);
  +    void addAllowedRolesToService(const AxisXMLCh* pcValue);
  +    void addAllowedMethodsToService(const AxisXMLCh* pcValue);
  +    int parseDocument(const AxisChar* pcWSDDFileName);
   protected: 
       bool m_bFatalError;
       bool m_bError;
  @@ -54,13 +107,7 @@
       /* Current transport type of transport handlers */
       AxisChar m_Buffer[TRANSCODE_BUFFER_SIZE];   
       /* used to transcode 'XMLCh' to AxisChar */
  -public:
  -    virtual ~WSDDDocument(){};
  -    virtual int getDeployment(const AxisChar* sWSDD,
  -        WSDDDeployment* pDeployment)=0;
  -    virtual int updateDeployment(const AxisChar* sWSDD,
  -        WSDDDeployment* pDeployment)=0;
   };
   
  -#endif 
  -
  +#endif
  + 
  \ No newline at end of file
  
  
  
  1.31      +609 -515  ws-axis/c/src/wsdd/WSDDDocument.cpp
  
  
  
  
  1.1                  ws-axis/c/src/xml/expat/SoapParserExpat.cpp
  
  Index: SoapParserExpat.cpp
  ===================================================================
  /*
   *   Copyright 2003-2004 The Apache Software Foundation.
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *   limitations under the License.
   */
  
  /*
   * @author Susantha Kumara (skumara@virtusa.com)
   *
   */
  
  #ifdef WIN32
  #pragma warning (disable : 4786)
  #endif
  
  #include "../Event.h"
  #include "../SimpleAttribute.h"
  #include "../StartElement.h"
  
  #include "SoapParserExpat.h"
  
  #define EXPAT_BUFFER_SIZE 1024
  
  SoapParserExpat::SoapParserExpat()
  {
      m_pLastEvent = NULL;
      m_Parser = XML_ParserCreateNS(NULL, NAMESPACESEPARATOR);
  	m_pCurrentBuffer = 0;
  }
  
  SoapParserExpat::~SoapParserExpat()
  {
      if (m_pLastEvent) delete m_pLastEvent;
      while (!m_Events.empty())
      {
          m_pLastEvent = m_Events.front();
          m_Events.pop();
          delete m_pLastEvent;
      }
      XML_ParserFree(m_Parser);
  }
  
  void SoapParserExpat::startElement(const XML_Ch *qname,const XML_Ch **attrs)
  {
      QName qn;
      qn.splitQNameString(qname, NAMESPACESEPARATOR);
      StartElement *pSE = new StartElement();
      pSE->m_NameOrValue = qn.localname;
      pSE->m_Namespace  = qn.uri ? qn.uri : "";
      qn.mergeQNameString(NAMESPACESEPARATOR);
      SimpleAttribute *pAt = NULL;
      for (int i = 0; attrs[i]; i += 2) 
      {
          qn.splitQNameString(attrs[i], NAMESPACESEPARATOR);
          pAt = new SimpleAttribute();
          pAt->m_Name = qn.localname;
          pAt->m_Namespace = qn.uri ? qn.uri : "";
          qn.mergeQNameString(NAMESPACESEPARATOR);
          pAt->m_Value = attrs[i+1];
          pSE->m_Attributes.push_back(pAt);
      }
      m_Events.push(pSE);
  }
  
  void SoapParserExpat::endElement(const XML_Ch *qname)
  {
      QName qn;
      qn.splitQNameString(qname, NAMESPACESEPARATOR);
      EndElement *pEE = new EndElement();
      pEE->m_NameOrValue = qn.localname;
      pEE->m_Namespace  = qn.uri ? qn.uri : "";
      m_Events.push(pEE);
      qn.mergeQNameString(NAMESPACESEPARATOR);
  }
  
  void  SoapParserExpat::characters(const XML_Ch *chars, int length)
  {
  
      XML_Ch* pTemp = const_cast<XML_Ch*>(chars);
      XML_Ch replacedchar = pTemp[length];
      /* copy and keep existing char at length position */
      pTemp[length] = '\0';
      /* putting nul charactor so that chars can be used safely */
      Event* pLastEvent;
      if (!m_Events.empty()) 
      {
          pLastEvent = m_Events.back();
          if (CHARACTER_ELEMENT == pLastEvent->getType())
          /* continuing same character node */
          {
              pLastEvent->m_NameOrValue += pTemp;
              pTemp[length] = replacedchar;
              /* put back the character that was there before putting nul 
               * charactor 
               */
              return;
          }
      }
      pLastEvent = new CharElement();
      pLastEvent->m_NameOrValue = pTemp;
      m_Events.push(pLastEvent);
      pTemp[length] = replacedchar;
      /* put back the character that was there before putting nul charactor */
  }
  
  void SoapParserExpat::startPrefixMapping(const XML_Ch *prefix, 
                                           const XML_Ch *uri)
  {
      if (prefix && uri)
      {
          StartPrefix* pEvent = new StartPrefix();
          pEvent->m_NameOrValue = prefix;
          pEvent->m_Namespace = uri;
          m_Events.push(pEvent);
      }
  }
  
  void SoapParserExpat::endPrefixMapping(const XML_Ch *prefix)
  {
      if (!prefix) return;
      EndPrefix* pEvent = new EndPrefix();
      pEvent->m_NameOrValue = prefix;
      m_Events.push(pEvent);
  }
  
  const XML_Ch* SoapParserExpat::getNS4Prefix(const XML_Ch* prefix)
  {
      if (m_NsStack.find(prefix) != m_NsStack.end())
      {
          return m_NsStack[prefix].c_str();
      }
      return NULL;
  }
  
  /**
   * This method returning NULL means that there is something wrong with the
   * stream and hence parsing should be finished or aborted.
   * @param isCharData - say that Deserializer is expecting a character data event.
   */
  const AnyElement* SoapParserExpat::next(bool isCharData)
  {
      int nStatus = TRANSPORT_IN_PROGRESS;
      if (m_pLastEvent)
      {
          delete m_pLastEvent;
          m_pLastEvent = NULL;
      }
      do
      {
          if (m_Events.empty())
          {
              nStatus = parseNext();
              if (TRANSPORT_FAILED == nStatus) return NULL;
              if ((TRANSPORT_FINISHED == nStatus) && m_Events.empty())
                  return NULL;
              if (AXIS_FAIL == m_nStatus) return NULL;
          }
  
          if (!m_Events.empty())
          {
              m_pLastEvent = m_Events.front();
              XML_NODE_TYPE type = m_pLastEvent->getType();
              m_Events.pop();
              if ((CHARACTER_ELEMENT == type) && m_Events.empty())
              /* current character element may not be parsed completly */
              {
                  m_Events.push(m_pLastEvent);
                  nStatus = parseNext();
                  if (TRANSPORT_FAILED == nStatus) return NULL;
                  if ((TRANSPORT_FINISHED == nStatus) && m_Events.empty()) 
                      return NULL;
              }
              else
              {
                  int i = 0;
                  switch(type)
                  {
                  case START_ELEMENT:
                      {
                          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] = 
                                  (*it)->m_Name.c_str();
                              m_Element.m_pchAttributes[i+1] = 
                                  (*it)->m_Namespace.c_str();
                              m_Element.m_pchAttributes[i+2] = 
                                  (*it)->m_Value.c_str();
                              i+=3;
                          }
                          m_Element.m_pchAttributes[i+0] = NULL;
                          m_Element.m_pchAttributes[i+1] = NULL;
                          m_Element.m_pchAttributes[i+2] = NULL;
                      }
                      /* no break */
                  case END_ELEMENT:
                      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;						
  					}
                      return &m_Element;
                  case START_PREFIX:
                      m_NsStack[m_pLastEvent->m_NameOrValue] = 
                          ((StartPrefix*)m_pLastEvent)->m_Namespace;
                      /* I think the same prifix cannot repeat ??? */
                      delete m_pLastEvent;
                      m_pLastEvent = NULL;
                      break;
                  case END_PREFIX:
                      m_NsStack.erase(m_pLastEvent->m_NameOrValue);
                      /* I think the same prifix cannot repeat ??? */
                      delete m_pLastEvent;
                      m_pLastEvent = NULL;
                      break;
                  }
              }
          }
      } while (TRANSPORT_FAILED != nStatus);
      return NULL;
  }
  
  int SoapParserExpat::parseNext()
  {
      int nChars = EXPAT_BUFFER_SIZE;
      AXIS_TRANSPORT_STATUS iTransportStatus;
  	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);
  	}
      /* end of parsing */
      return iTransportStatus;
  }
  
  int SoapParserExpat::getStatus()
  {
      return m_nStatus;
  }
  
  /**
   * Sets the new input stream and resets SoapParserExpat object state to 
   * initial state
   */
  int SoapParserExpat::setInputStream(AxisIOStream* pInputStream)
  {
      m_pInputStream = pInputStream;
      XML_ParserReset(m_Parser, NULL);
      XML_SetUserData(m_Parser, this);
      XML_SetNamespaceDeclHandler(m_Parser, s_startPrefixMapping, 
          s_endPrefixMapping);
      XML_SetElementHandler(m_Parser, s_startElement, s_endElement);
      XML_SetCharacterDataHandler(m_Parser, s_characters);
      m_nStatus = AXIS_SUCCESS; /*TODO:Check if an error occured in expat */
      m_NsStack.clear(); /* this will also delete any strings there */
      if (m_pLastEvent) delete m_pLastEvent;
      while (!m_Events.empty())
      {
          m_pLastEvent = m_Events.front();
          m_Events.pop();
          delete m_pLastEvent;
      }
      m_pLastEvent = NULL;
      return m_nStatus;
  }
  
  #ifdef WIN32
  #define STORAGE_CLASS_INFO __declspec(dllexport)
  #else
  #define STORAGE_CLASS_INFO 
  #endif
  
  extern "C" {
  STORAGE_CLASS_INFO
  int CreateInstance(XMLParser **inst)
  {
  	*inst = new SoapParserExpat();
  	if (*inst)
  	{
  		return AXIS_SUCCESS;
  	}
  	return AXIS_FAIL;
  }
  STORAGE_CLASS_INFO 
  int DestroyInstance(XMLParser *inst)
  {
  	if (inst)
  	{
  		delete inst;
  		return AXIS_SUCCESS;
  	}
  	return AXIS_FAIL;
  }
  }
  
  
  
  1.1                  ws-axis/c/src/xml/expat/SoapParserExpat.h
  
  Index: SoapParserExpat.h
  ===================================================================
  /*
   *   Copyright 2003-2004 The Apache Software Foundation.
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *   limitations under the License.
   */
  
  /*
   * @author Susantha Kumara (skumara@virtusa.com)
   *
   */
  #ifdef WIN32
  #pragma warning (disable : 4786)
  #endif
  
  #if !defined(__SoapParserExpat_H_OF_AXIS_INCLUDED__)
  #define __SoapParserExpat_H_OF_AXIS_INCLUDED__
  
  #include <expat/expat.h>
  #include <axis/server/Packet.h>
  
  #include "../QName.h"
  #include <axis/server/AnyElement.h>
  #include "../Event.h"
  #include <axis/server/XMLParser.h>
  
  #include <queue>
  #include <map>
  #include <string>
  
  using namespace std;
  
  class SoapParserExpat: public XMLParser
  {
  public:
      SoapParserExpat();
      ~SoapParserExpat();
      int setInputStream(AxisIOStream* pInputStream);
      const XML_Ch* getNS4Prefix(const XML_Ch* prefix);
      int getStatus();
      const AnyElement* next(bool isCharData=false);
  
  private:
      XML_Parser m_Parser;
      char* m_pCurrentBuffer;
      Event* m_pLastEvent;
      AnyElement m_Element;
      queue<Event*> m_Events;
      map<AxisXMLString, AxisXMLString> m_NsStack;
      int m_nStatus;
      void startElement(const XML_Ch *qname,const XML_Ch **attrs);
      void endElement(const XML_Ch *qname);
      void characters(const XML_Ch *chars,int length);
      void startPrefixMapping(const XML_Ch *prefix, const XML_Ch *uri);
      void endPrefixMapping(const XML_Ch *prefix);
      int parseNext();
  
      inline static void XMLCALL s_startElement(void* p, const XML_Ch *qname,
          const XML_Ch **attrs)
      {((SoapParserExpat*)p)->startElement(qname,attrs);};
      inline static void XMLCALL s_endElement(void* p, const XML_Ch *qname)
      {((SoapParserExpat*)p)->endElement(qname);};
      inline static void XMLCALL s_characters(void* p, const XML_Ch *chars,
          int length)
      {((SoapParserExpat*)p)->characters(chars,length);};
      inline static void XMLCALL s_startPrefixMapping(void* p,
          const XML_Ch *prefix, const XML_Ch *uri)
      {((SoapParserExpat*)p)->startPrefixMapping(prefix, uri);};
      inline static void XMLCALL s_endPrefixMapping(void* p,
          const XML_Ch *prefix)
      {((SoapParserExpat*)p)->endPrefixMapping(prefix);};
  };
  
  #endif
  
  
  
  1.1                  ws-axis/c/src/xml/xerces/SoapBinInputStream.cpp
  
  Index: SoapBinInputStream.cpp
  ===================================================================
  /*
   *   Copyright 2003-2004 The Apache Software Foundation.
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *   limitations under the License.
   */
  
  /* SoapBinInputStream.cpp: implementation of the SoapBinInputStream class. */
  
  
  #include "SoapBinInputStream.h"
  
  SoapBinInputStream::SoapBinInputStream(AxisIOStream* pInputStream)
  {
      m_pInputStream = pInputStream;
      m_nByteCount = 0;
  }
  
  SoapBinInputStream::~SoapBinInputStream()
  {
  
  }
  
  /*
   * I dont really understand the use of this function
   */
  unsigned int SoapBinInputStream::curPos() const
  {
      return m_nByteCount;
  }
  
  unsigned int SoapBinInputStream::readBytes(XMLByte* const pcToFill,
                                             const unsigned int iMaxToRead)
  {
      int iRead = iMaxToRead;
  	m_pInputStream->getBytes((char*)pcToFill, &iRead);
      return iRead;
  }
  
  
  
  1.1                  ws-axis/c/src/xml/xerces/SoapBinInputStream.h
  
  Index: SoapBinInputStream.h
  ===================================================================
  /*
   *   Copyright 2003-2004 The Apache Software Foundation.
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *   limitations under the License.
   */
  
  /* SoapBinInputStream.h: interface for the SoapBinInputStream class. */
  
  #if !defined(AXIS_SOAPBININPUTSTREAM_H__OF_AXIS_INCLUDED_)
  #define AXIS_SOAPBININPUTSTREAM_H__OF_AXIS_INCLUDED_
  
  #include <xercesc/util/BinInputStream.hpp>
  #include <axis/server/Packet.h>
  #include <axis/SOAPTransport.h>
  
  XERCES_CPP_NAMESPACE_USE
  
  class SoapBinInputStream : public BinInputStream
  {
  public:
      SoapBinInputStream(AxisIOStream* pInputStream);
      virtual ~SoapBinInputStream();
      unsigned int curPos() const;
      unsigned int readBytes(XMLByte* const pcToFill, const unsigned int iMaxToRead);
  private:
      unsigned int m_nByteCount;
      AxisIOStream* m_pInputStream;
  };
  
  #endif
  
  
  
  1.1                  ws-axis/c/src/xml/xerces/SoapInputSource.cpp
  
  Index: SoapInputSource.cpp
  ===================================================================
  /*
   *   Copyright 2003-2004 The Apache Software Foundation.
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *   limitations under the License.
   */
  
  /* SoapInputSource.cpp: implementation of the SoapInputSource class. */
  
  #include "SoapInputSource.h"
  
  SoapInputSource::SoapInputSource(AxisIOStream* pInputStream)
  {
      m_pInputStream = new SoapBinInputStream(pInputStream);
  }
  
  SoapInputSource::~SoapInputSource()
  {
  
  }
  
  BinInputStream* SoapInputSource::makeStream() const
  {
      return m_pInputStream;
  }
  
  
  
  1.1                  ws-axis/c/src/xml/xerces/SoapInputSource.h
  
  Index: SoapInputSource.h
  ===================================================================
  /*
   *   Copyright 2003-2004 The Apache Software Foundation.
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *   limitations under the License.
   */
  
  /*
   *    @author sanjaya singharage (sanjayas@opensource.lk)
   */
  
  #if !defined(AXIS_SOAPINPUTSOURCE_H__OF_AXIS_INCLUDED_)
  #define AXIS_SOAPINPUTSOURCE_H__OF_AXIS_INCLUDED_
  
  #include <xercesc/sax/InputSource.hpp>
  #include "SoapBinInputStream.h"
  
  XERCES_CPP_NAMESPACE_USE
  
  class SoapInputSource : public InputSource  
  {
  private:
      SoapBinInputStream* m_pInputStream;
  public:
      SoapInputSource(AxisIOStream* pInputStream);
      virtual ~SoapInputSource();
      BinInputStream* makeStream() const;
  };
  
  #endif
  
  
  
  1.1                  ws-axis/c/src/xml/xerces/SoapParserXerces.cpp
  
  Index: SoapParserXerces.cpp
  ===================================================================
  /*
   *   Copyright 2003-2004 The Apache Software Foundation.
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *   limitations under the License.
   */
  
  /*
   * @author sanjaya singharage (sanjayas@opensource.lk)
   */
  
  
  #ifdef WIN32
  #pragma warning (disable : 4786)
  #endif
  
  #include "SoapParserXerces.h"
  #include <xercesc/sax2/XMLReaderFactory.hpp>
  #include <xercesc/util/PlatformUtils.hpp>
  
  XERCES_CPP_NAMESPACE_USE
  
  SoapParserXerces::SoapParserXerces()
  {
      m_bFirstParsed = false;
      m_pParser = XMLReaderFactory::createXMLReader();
      m_pInputSource = NULL;
  }
  
  SoapParserXerces::~SoapParserXerces()
  {
      if(m_pInputSource)
          delete m_pInputSource;
      delete m_pParser;
      
  }
  
  int SoapParserXerces::setInputStream(AxisIOStream* pInputStream)
  {
      m_pInputStream = pInputStream;
      //check if memeory is already allocated for is
      if(m_pInputSource)
          delete m_pInputSource;
      
      m_pInputSource = new SoapInputSource(pInputStream);
      /* SoapInputSource is(m_pInputStream->transport.pGetFunct, 
      m_pInputStream->str.ip_stream); */
      m_pParser->setContentHandler(&m_Xhandler);
       if (m_bFirstParsed)
      {
          m_pParser->parseReset(m_ScanToken);
          m_bFirstParsed = false;
      }
     /* return m_pHandler->Success(); */
      return AXIS_SUCCESS;
  }
  
  const XML_Ch* SoapParserXerces::getNS4Prefix(const XML_Ch* prefix)
  {
      return m_Xhandler.ns4Prefix(prefix);
  }
  
  int SoapParserXerces::getStatus()
  {
  	return m_Xhandler.getStatus();
  }
  
  const AnyElement* SoapParserXerces::next(bool isCharData)
  {
  	bool bCanParseMore = false;
      if(!m_bFirstParsed)
      {
          m_pParser->parseFirst(*m_pInputSource, m_ScanToken);
          m_bFirstParsed = true;
      }
  
      m_Xhandler.freeElement();
      while (true)
      {
          bCanParseMore = m_pParser->parseNext(m_ScanToken);
          AnyElement* 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;
      }
  }
  
  #ifdef WIN32
  #define STORAGE_CLASS_INFO __declspec(dllexport)
  #else
  #define STORAGE_CLASS_INFO 
  #endif
  
  extern "C" {
  STORAGE_CLASS_INFO
  int CreateInstance(XMLParser **inst)
  {
  	/* TODO : Following initialization should be done within a function
  	          called by the library loader at loading time */
      XMLPlatformUtils::Initialize();
  	*inst = new SoapParserXerces();
  	if (*inst)
  	{
  		return AXIS_SUCCESS;
  	}
  	return AXIS_FAIL;
  }
  STORAGE_CLASS_INFO 
  int DestroyInstance(XMLParser *inst)
  {
  	if (inst)
  	{
  		delete inst;
  	/* TODO : Following uninitialization should be done within a function
  	          called by the library loader at unloading time */
  		XMLPlatformUtils::Terminate ();
  		return AXIS_SUCCESS;
  	}
  	return AXIS_FAIL;
  }
  }
  
  
  1.1                  ws-axis/c/src/xml/xerces/SoapParserXerces.h
  
  Index: SoapParserXerces.h
  ===================================================================
  /*
   *   Copyright 2003-2004 The Apache Software Foundation.
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *   limitations under the License.
   */
  
  /*
   *    @author sanjaya singharage (sanjayas@opensource.lk)
   */
  
  
  #ifdef WIN32
  #pragma warning (disable : 4786)
  #endif
  
  #if !defined(__SOAPPARSERXERCES_H_OF_AXIS_INCLUDED__)
  #define __SOAPPARSERXERCES_H_OF_AXIS_INCLUDED__
  
  #include <axis/server/Packet.h>
  #include "../QName.h"
  #include "../Event.h"
  #include <axis/server/AnyElement.h>
  #include <axis/server/XMLParser.h>
  #include "XercesHandler.h"
  
  #include <xercesc/sax2/SAX2XMLReader.hpp>
  #include <xercesc/parsers/SAXParser.hpp>
  #include <xercesc/framework/XMLPScanToken.hpp>
  #include "SoapInputSource.h"
  
  XERCES_CPP_NAMESPACE_USE
  
  class SoapParserXerces: public XMLParser
  {
  
  public:
      SoapParserXerces();
      ~SoapParserXerces();
  
      int setInputStream(AxisIOStream* pInputStream);
      const XML_Ch* getNS4Prefix(const XML_Ch* pcPrefix);
      int getStatus();
      const AnyElement* next(bool bIsCharData=false);
  private:
      SAX2XMLReader* m_pParser;
      XMLPScanToken m_ScanToken;
      XercesHandler m_Xhandler;
      bool m_bFirstParsed;
      SoapInputSource* m_pInputSource;
  
  
  };
  
  #endif
  
  
  1.1                  ws-axis/c/src/xml/xerces/XercesHandler.cpp
  
  Index: XercesHandler.cpp
  ===================================================================
  /*
   *   Copyright 2003-2004 The Apache Software Foundation.
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *   limitations under the License.
   */
  
  /*
   *    @author sanjaya singharage (sanjayas@opensource.lk)
   */
  #ifdef WIN32
  #pragma warning (disable : 4786)
  #endif
  
  #include "XercesHandler.h"
  #include <xercesc/sax2/Attributes.hpp>
  #include <stdio.h>
  
  
  XercesHandler::XercesHandler()
  {
      m_nStatus = AXIS_SUCCESS;
      Nelement = (AnyElement*)malloc(sizeof (AnyElement));
  }
  
  XercesHandler::~XercesHandler()
  {
  }
  
  void XercesHandler::startElement(const XMLCh *const uri,const XMLCh *const 
                                   localname,const XMLCh *const qname,
                                   const Attributes &attrs)
  {
      m_pCurrElement = Nelement;
      Nelement->m_type = START_ELEMENT;
      Nelement->m_pchNameOrValue = XMLString::transcode(localname);
      Nelement->m_pchNamespace = XMLString::transcode(uri);
      
      unsigned int len = attrs.getLength();
      unsigned int index;
  	unsigned int i = 0;
      for (index = 0; index < len*3; index+=3)
      {    
          Nelement->m_pchAttributes[index] = 
              XMLString::transcode(attrs.getLocalName(i));
          Nelement->m_pchAttributes[index+1] = 
              XMLString::transcode(attrs.getURI(i));
          Nelement->m_pchAttributes[index+2] = 
              XMLString::transcode(attrs.getValue(i));
  		i++;
      }
      Nelement->m_pchAttributes[len*3]=NULL;
  }
  
  const XML_Ch* XercesHandler::ns4Prefix(const XML_Ch* prefix)
  {
      if (m_NsStack.find(prefix) != m_NsStack.end())
      {
          return m_NsStack[prefix].c_str();
      }
      return NULL;
  }
  
  void XercesHandler::characters(const XMLCh* const chars, 
                                 const unsigned int length)
  {
      m_pCurrElement = Nelement;
      Nelement->m_type = CHARACTER_ELEMENT;
      Nelement->m_pchNameOrValue = XMLString::transcode(chars);
  }
  void XercesHandler::ignorableWhitespace(const XMLCh* const chars, 
                                          const unsigned int length)
  {}
  void XercesHandler::resetDocument()
  {}
  
  
  void XercesHandler::warning(const SAXParseException& exception)
  {}
  void XercesHandler::error(const SAXParseException& exception)
  {
      m_nStatus = AXIS_FAIL;
  }
  void XercesHandler::fatalError(const SAXParseException& exception)
  {
      m_nStatus = AXIS_FAIL;
  }
  
  void XercesHandler::endElement (const XMLCh *const uri,
                                  const XMLCh *const localname,
                                  const XMLCh *const qname)
  {
      m_pCurrElement = Nelement;
      Nelement->m_type = END_ELEMENT;
      Nelement->m_pchNameOrValue = XMLString::transcode(localname);
      Nelement->m_pchNamespace = XMLString::transcode(uri);
      Nelement->m_pchAttributes[0] = NULL;
  }
  
  void XercesHandler::startPrefixMapping(const XMLCh* const prefix, 
                                         const XMLCh* const uri)
  {
      Nelement->m_type = START_PREFIX;
      Nelement->m_pchNameOrValue = XMLString::transcode(prefix);
      Nelement->m_pchNamespace = XMLString::transcode(uri);
      m_NsStack[XMLString::transcode(prefix)] = XMLString::transcode(uri);
  }
  
  void XercesHandler::endPrefixMapping(const XMLCh* const prefix)
  {
      Nelement->m_type = END_PREFIX;
      Nelement->m_pchNameOrValue = XMLString::transcode(prefix);
      m_NsStack.erase(XMLString::transcode(prefix));
  }
  
  void XercesHandler::freeElement()
  {
      if (m_pCurrElement)
      {
          /* free inner variables */
          m_pCurrElement = 0;
      }
  }
  
  
  
  1.1                  ws-axis/c/src/xml/xerces/XercesHandler.h
  
  Index: XercesHandler.h
  ===================================================================
  /*
   *   Copyright 2003-2004 The Apache Software Foundation.
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *   limitations under the License.
   */
  
  /*
   *    @author sanjaya singharage (sanjayas@opensource.lk)
   */
  
  #include    <xercesc/sax/HandlerBase.hpp>
  #include    <xercesc/sax2/DefaultHandler.hpp>
  #include <axis/server/AnyElement.h>
  #include <stdlib.h>
  #include <map>
  #include <string>
  #include <axis/server/GDefine.h>
  
  XERCES_CPP_NAMESPACE_USE
  
  using namespace std;
  
  class XercesHandler : public XERCES_CPP_NAMESPACE::DefaultHandler
  {
  public :
      void freeElement();
      int getStatus(){return m_nStatus;};
      /* -----------------------------------------------------------------------
       *  Constructors
       * -----------------------------------------------------------------------
       */
      XercesHandler();
      ~XercesHandler();
  
  
  
      const XML_Ch* XercesHandler::ns4Prefix(const XML_Ch* prefix);
  
      AnyElement* getAnyElement()
      {
          return m_pCurrElement;
      }
  
  private:
      /* -----------------------------------------------------------------------
       *  Handlers for the SAX DocumentHandler interface
       * -----------------------------------------------------------------------
       */
      void startElement(const XMLCh *const uri,const XMLCh *const localname,
          const XMLCh *const qname,const Attributes &attrs);
      void endElement (const XMLCh *const uri,const XMLCh *const localname,
          const XMLCh *const qname);
      void characters(const XMLCh* const chars, const unsigned int length);
      void startPrefixMapping(const XMLCh* const prefix, const XMLCh* const uri);
      void endPrefixMapping(const XMLCh* const prefix);
      void ignorableWhitespace(const XMLCh* const chars, 
          const unsigned int length);
      void resetDocument();
  
  
      /* -----------------------------------------------------------------------
       *  Implementations of the SAX ErrorHandler interface
       * -----------------------------------------------------------------------
       */
      void warning(const SAXParseException& exception);
      void error(const SAXParseException& exception);
      void fatalError(const SAXParseException& exception);
  
      int m_nStatus;
      AnyElement * Nelement;
      AnyElement * m_pCurrElement;
  
      map<AxisXMLString, AxisXMLString> m_NsStack;
      void initAnyElement()
      {
          Nelement->m_pchNameOrValue = NULL;
          Nelement->m_pchNamespace = NULL;
      }
  
  };
  
  
  1.10      +7 -7      ws-axis/c/vc/AxisClientDLL.dsp
  
  Index: AxisClientDLL.dsp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/vc/AxisClientDLL.dsp,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- AxisClientDLL.dsp	12 May 2004 07:36:47 -0000	1.9
  +++ AxisClientDLL.dsp	18 May 2004 11:09:11 -0000	1.10
  @@ -43,7 +43,7 @@
   # PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
   # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXISCLIENTDLL_EXPORTS" /YX /FD /c
  -# ADD CPP /nologo /MD /W3 /GX /Od /I "../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXISCLIENTDLL_EXPORTS" /D "USE_EXPAT_PARSER" /D "AXIS_CLIENT_LIB" /FD /c
  +# ADD CPP /nologo /MD /W3 /GX /Od /I "../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXISCLIENTDLL_EXPORTS" /D "AXIS_CLIENT_LIB" /D "ENABLE_AXIS_EXCEPTION" /FD /c
   # SUBTRACT CPP /YX
   # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
   # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
  @@ -70,7 +70,7 @@
   # PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
   # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXISCLIENTDLL_EXPORTS" /YX /FD /GZ /c
  -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXISCLIENTDLL_EXPORTS" /D "USE_EXPAT_PARSER" /D "AXIS_CLIENT_LIB" /FD /GZ /c
  +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXISCLIENTDLL_EXPORTS" /D "AXIS_CLIENT_LIB" /D "ENABLE_AXIS_EXCEPTION" /FD /GZ /c
   # SUBTRACT CPP /YX
   # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
   # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
  @@ -262,10 +262,6 @@
   # End Source File
   # Begin Source File
   
  -SOURCE=..\src\soap\SoapParserExpat.cpp
  -# End Source File
  -# Begin Source File
  -
   SOURCE=..\src\soap\SoapSerializer.cpp
   # End Source File
   # Begin Source File
  @@ -290,7 +286,7 @@
   # End Source File
   # Begin Source File
   
  -SOURCE=..\src\wsdd\WSDDDocumentExpat.cpp
  +SOURCE=..\src\wsdd\WSDDDocument.cpp
   # End Source File
   # Begin Source File
   
  @@ -307,6 +303,10 @@
   # Begin Source File
   
   SOURCE=..\src\wsdd\WSDDTransport.cpp
  +# End Source File
  +# Begin Source File
  +
  +SOURCE=..\src\engine\XMLParserFactory.cpp
   # End Source File
   # End Group
   # Begin Group "Header Files"
  
  
  
  1.10      +8 -8      ws-axis/c/vc/AxisServerDLL.dsp
  
  Index: AxisServerDLL.dsp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/vc/AxisServerDLL.dsp,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- AxisServerDLL.dsp	12 May 2004 07:36:47 -0000	1.9
  +++ AxisServerDLL.dsp	18 May 2004 11:09:11 -0000	1.10
  @@ -43,7 +43,7 @@
   # PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
   # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DYNALIB_EXPORTS" /YX /FD /c
  -# ADD CPP /nologo /MD /W3 /GX /Od /I "../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DYNALIB_EXPORTS" /D "USE_EXPAT_PARSER" /FD /c
  +# ADD CPP /nologo /MD /W3 /GX /Od /I "../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DYNALIB_EXPORTS" /D "ENABLE_AXIS_EXCEPTION" /FD /c
   # SUBTRACT CPP /YX
   # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
   # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
  @@ -74,7 +74,7 @@
   # PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
   # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DYNALIB_EXPORTS" /YX /FD /GZ /c
  -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DYNALIB_EXPORTS" /D "USE_EXPAT_PARSER" /FD /GZ /c
  +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DYNALIB_EXPORTS" /D "ENABLE_AXIS_EXCEPTION" /FD /GZ /c
   # SUBTRACT CPP /YX
   # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
   # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
  @@ -85,7 +85,7 @@
   # ADD BSC32 /nologo
   LINK32=link.exe
   # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
  -# ADD LINK32 libexpat.lib /nologo /dll /pdb:none /debug /machine:I386 /out:"../bin/AxisServer_D.dll" /libpath:"../lib/expat"
  +# ADD LINK32 /nologo /dll /pdb:none /debug /machine:I386 /out:"../bin/AxisServer_D.dll"
   # Begin Special Build Tool
   SOURCE="$(InputPath)"
   PostBuild_Cmds=copy ..\bin\AxisServer_D.dll "%AXIS_HOME%\libs\."
  @@ -266,10 +266,6 @@
   # End Source File
   # Begin Source File
   
  -SOURCE=..\src\soap\SoapParserExpat.cpp
  -# End Source File
  -# Begin Source File
  -
   SOURCE=..\src\soap\SoapSerializer.cpp
   # End Source File
   # Begin Source File
  @@ -294,7 +290,7 @@
   # End Source File
   # Begin Source File
   
  -SOURCE=..\src\wsdd\WSDDDocumentExpat.cpp
  +SOURCE=..\src\wsdd\WSDDDocument.cpp
   # End Source File
   # Begin Source File
   
  @@ -311,6 +307,10 @@
   # Begin Source File
   
   SOURCE=..\src\wsdd\WSDDTransport.cpp
  +# End Source File
  +# Begin Source File
  +
  +SOURCE=..\src\engine\XMLParserFactory.cpp
   # End Source File
   # End Group
   # Begin Group "Header Files"
  
  
  
  1.5       +24 -0     ws-axis/c/vc/Distribution.dsw
  
  Index: Distribution.dsw
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/vc/Distribution.dsw,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Distribution.dsw	12 May 2004 07:36:47 -0000	1.4
  +++ Distribution.dsw	18 May 2004 11:09:11 -0000	1.5
  @@ -75,6 +75,30 @@
   
   ###############################################################################
   
  +Project: "AxisXMLParserExpat"=".\xml\expat\AxisXMLParserExpat.dsp" - Package Owner=<4>
  +
  +Package=<5>
  +{{{
  +}}}
  +
  +Package=<4>
  +{{{
  +}}}
  +
  +###############################################################################
  +
  +Project: "AxisXMLParserXerces"=".\xml\xerces\AxisXMLParserXerces.dsp" - Package Owner=<4>
  +
  +Package=<5>
  +{{{
  +}}}
  +
  +Package=<4>
  +{{{
  +}}}
  +
  +###############################################################################
  +
   Project: "SimpleAxisServer"=".\server\simple_axis_server\SimpleAxisServer.dsp" - Package Owner=<4>
   
   Package=<5>
  
  
  
  1.7       +2 -2      ws-axis/c/vc/server/apache1_3/Apache1_3Module.dsp
  
  Index: Apache1_3Module.dsp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/vc/server/apache1_3/Apache1_3Module.dsp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Apache1_3Module.dsp	12 May 2004 07:36:48 -0000	1.6
  +++ Apache1_3Module.dsp	18 May 2004 11:09:11 -0000	1.7
  @@ -43,7 +43,7 @@
   # PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
   # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHE1_3_EXPORTS" /YX /FD /c
  -# ADD CPP /nologo /MD /W3 /Od /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHE1_3_EXPORTS" /D "AXIS_APACHE1_3" /D "USE_EXPAT_PARSER" /FD /c
  +# ADD CPP /nologo /MD /W3 /Od /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHE1_3_EXPORTS" /D "AXIS_APACHE1_3" /D "ENABLE_AXIS_EXCEPTION" /FD /c
   # SUBTRACT CPP /YX /Yc /Yu
   # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
   # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
  @@ -75,7 +75,7 @@
   # PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
   # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHE1_3_EXPORTS" /YX /FD /GZ /c
  -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHE1_3_EXPORTS" /D "AXIS_APACHE1_3" /D "USE_EXPAT_PARSER" /FR /YX /FD /I /GZ "../../../include" /c
  +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHE1_3_EXPORTS" /D "AXIS_APACHE1_3" /D "ENABLE_AXIS_EXCEPTION" /FR /YX /FD /I /GZ "../../../include" /c
   # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
   # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
   # ADD BASE RSC /l 0x409 /d "_DEBUG"
  
  
  
  1.7       +2 -2      ws-axis/c/vc/server/apache2_0/Apache2_0Module.dsp
  
  Index: Apache2_0Module.dsp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/vc/server/apache2_0/Apache2_0Module.dsp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Apache2_0Module.dsp	29 Mar 2004 06:22:25 -0000	1.6
  +++ Apache2_0Module.dsp	18 May 2004 11:09:11 -0000	1.7
  @@ -43,7 +43,7 @@
   # PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
   # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHE2_0_EXPORTS" /YX /FD /c
  -# ADD CPP /nologo /MD /W3 /Od /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHE2_0_EXPORTS" /D "AXIS_APACHE1_3" /D "USE_EXPAT_PARSER" /YX /FD /c
  +# ADD CPP /nologo /MD /W3 /Od /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHE2_0_EXPORTS" /D "AXIS_APACHE1_3" /D "ENABLE_AXIS_EXCEPTION" /YX /FD /c
   # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
   # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
   # ADD BASE RSC /l 0x409 /d "NDEBUG"
  @@ -69,7 +69,7 @@
   # PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
   # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHE2_0_EXPORTS" /YX /FD /GZ /c
  -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /FR /YX /FD /I /GZ "../../../include" /c
  +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ENABLE_AXIS_EXCEPTION" /FR /YX /FD /I /GZ "../../../include" /c
   # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
   # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
   # ADD BASE RSC /l 0x409 /d "_DEBUG"
  
  
  
  1.21      +2 -2      ws-axis/c/vc/server/simple_axis_server/SimpleAxisServer.dsp
  
  Index: SimpleAxisServer.dsp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/vc/server/simple_axis_server/SimpleAxisServer.dsp,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- SimpleAxisServer.dsp	9 Apr 2004 13:45:31 -0000	1.20
  +++ SimpleAxisServer.dsp	18 May 2004 11:09:11 -0000	1.21
  @@ -42,7 +42,7 @@
   # PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
   # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
  -# ADD CPP /nologo /MT /W3 /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "USE_EXPAT_PARSER" /FR /FD /c
  +# ADD CPP /nologo /MT /W3 /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "ENABLE_AXIS_EXCEPTION" /FR /FD /c
   # SUBTRACT CPP /YX
   # ADD BASE RSC /l 0x409 /d "NDEBUG"
   # ADD RSC /l 0x409 /d "NDEBUG"
  @@ -68,7 +68,7 @@
   # PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
   # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
  -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "USE_EXPAT_PARSER" /FR /YX /FD /GZ /c
  +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "ENABLE_AXIS_EXCEPTION" /FR /YX /FD /GZ /c
   # ADD BASE RSC /l 0x409 /d "_DEBUG"
   # ADD RSC /l 0x409 /d "_DEBUG"
   BSC32=bscmake.exe
  
  
  
  1.5       +23 -3     ws-axis/c/vc/soap/SoapLibrary.dsp
  
  Index: SoapLibrary.dsp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/vc/soap/SoapLibrary.dsp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- SoapLibrary.dsp	31 Mar 2004 14:25:28 -0000	1.4
  +++ SoapLibrary.dsp	18 May 2004 11:09:12 -0000	1.5
  @@ -114,7 +114,7 @@
   # End Source File
   # Begin Source File
   
  -SOURCE=..\..\src\soap\SoapBinInputStream.cpp
  +SOURCE=..\..\src\xml\xerces\SoapBinInputStream.cpp
   # End Source File
   # Begin Source File
   
  @@ -142,6 +142,10 @@
   # End Source File
   # Begin Source File
   
  +SOURCE=..\..\src\xml\xerces\SoapInputSource.cpp
  +# End Source File
  +# Begin Source File
  +
   SOURCE=..\..\src\soap\SoapKeywordMapping.cpp
   # End Source File
   # Begin Source File
  @@ -158,6 +162,10 @@
   # End Source File
   # Begin Source File
   
  +SOURCE=..\..\src\xml\xerces\SoapParserXerces.cpp
  +# End Source File
  +# Begin Source File
  +
   SOURCE=..\..\src\soap\SoapSerializer.cpp
   # End Source File
   # Begin Source File
  @@ -168,6 +176,10 @@
   
   SOURCE=..\..\src\soap\XercesHandler.cpp
   # End Source File
  +# Begin Source File
  +
  +SOURCE=..\..\src\xml\xerces\XercesHandler.cpp
  +# End Source File
   # End Group
   # Begin Group "Header Files"
   
  @@ -202,7 +214,7 @@
   # End Source File
   # Begin Source File
   
  -SOURCE=..\..\src\soap\SoapBinInputStream.h
  +SOURCE=..\..\src\xml\xerces\SoapBinInputStream.h
   # End Source File
   # Begin Source File
   
  @@ -226,7 +238,7 @@
   # End Source File
   # Begin Source File
   
  -SOURCE=..\..\src\soap\SoapInputSource.h
  +SOURCE=..\..\src\xml\xerces\SoapInputSource.h
   # End Source File
   # Begin Source File
   
  @@ -246,6 +258,10 @@
   # End Source File
   # Begin Source File
   
  +SOURCE=..\..\src\xml\xerces\SoapParserXerces.h
  +# End Source File
  +# Begin Source File
  +
   SOURCE=..\..\include\axis\server\SoapSerializer.h
   # End Source File
   # Begin Source File
  @@ -255,6 +271,10 @@
   # Begin Source File
   
   SOURCE=..\..\src\soap\XercesHandler.h
  +# End Source File
  +# Begin Source File
  +
  +SOURCE=..\..\src\xml\xerces\XercesHandler.h
   # End Source File
   # End Group
   # End Target
  
  
  
  1.3       +2 -2      ws-axis/c/vc/transport/axis/AxisTransport.dsp
  
  Index: AxisTransport.dsp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/vc/transport/axis/AxisTransport.dsp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AxisTransport.dsp	12 May 2004 10:46:07 -0000	1.2
  +++ AxisTransport.dsp	18 May 2004 11:09:12 -0000	1.3
  @@ -43,7 +43,7 @@
   # PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
   # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXISTRANSPORT_EXPORTS" /YX /FD /c
  -# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXISTRANSPORT_EXPORTS" /YX /FD /c
  +# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXISTRANSPORT_EXPORTS" /D "ENABLE_AXIS_EXCEPTION" /YX /FD /c
   # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
   # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
   # ADD BASE RSC /l 0x409 /d "NDEBUG"
  @@ -69,7 +69,7 @@
   # PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
   # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXISTRANSPORT_EXPORTS" /YX /FD /GZ /c
  -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXISTRANSPORT_EXPORTS" /YX /FD /GZ /c
  +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AXISTRANSPORT_EXPORTS" /D "ENABLE_AXIS_EXCEPTION" /YX /FD /GZ /c
   # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
   # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
   # ADD BASE RSC /l 0x409 /d "_DEBUG"
  
  
  
  1.3       +2 -14     ws-axis/c/vc/wsdd/WSDDLibrary.dsp
  
  Index: WSDDLibrary.dsp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/vc/wsdd/WSDDLibrary.dsp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- WSDDLibrary.dsp	30 Mar 2004 10:47:49 -0000	1.2
  +++ WSDDLibrary.dsp	18 May 2004 11:09:12 -0000	1.3
  @@ -90,11 +90,11 @@
   # End Source File
   # Begin Source File
   
  -SOURCE=..\..\src\wsdd\WSDDDocumentExpat.cpp
  +SOURCE=..\..\src\wsdd\WSDDDocument.cpp
   # End Source File
   # Begin Source File
   
  -SOURCE=..\..\src\wsdd\WSDDDocumentXerces.cpp
  +SOURCE=..\..\src\wsdd\WSDDDocument.h
   # End Source File
   # Begin Source File
   
  @@ -123,18 +123,6 @@
   # Begin Source File
   
   SOURCE=..\..\src\wsdd\WSDDDeployment.h
  -# End Source File
  -# Begin Source File
  -
  -SOURCE=..\..\src\wsdd\WSDDDocument.h
  -# End Source File
  -# Begin Source File
  -
  -SOURCE=..\..\src\wsdd\WSDDDocumentExpat.h
  -# End Source File
  -# Begin Source File
  -
  -SOURCE=..\..\src\wsdd\WSDDDocumentXerces.h
   # End Source File
   # Begin Source File