int initialize_module()

in src/engine/Axis.cpp [331:452]


int initialize_module (int bServer)
{
    start_initializing();
    
    int status = AXIS_SUCCESS;

    try
    {
        if (g_uModuleInitialize == 0)
        {
            // Read config file and enable trace....this should be first thing that is done!!!
            // Read from the configuration file
            if( g_pConfig != NULL)
                g_pConfig = new AxisConfig( g_pConfig);
            else
                g_pConfig = new AxisConfig();
            
            status = g_pConfig->readConfFile (); 
            if (status == AXIS_SUCCESS)
            {
                // One can also start trace via Axis::startTrace().  If that has been done, 
                // ignore the config file. 
                if (!AxisTrace::isLoggingEnabled())
                {
                    AxisTrace::setLogFilter(g_pConfig->getAxisConfProperty(AXCONF_LOGFILTER));
                    
                    if (bServer)
                        AxisTrace::startTrace(g_pConfig->getAxisConfProperty(AXCONF_LOGPATH));
                    else
                        AxisTrace::startTrace(g_pConfig->getAxisConfProperty(AXCONF_CLIENTLOGPATH));
                }
                
                string configProperties = g_pConfig->toString();
                AxisTrace::writeTrace(configProperties.c_str(), configProperties.length());
            }
            
            // The entry log must start here - may revisit so as to start earlier. 
            logEntryEngine("initialize_module")
            
            // order of these initialization method invocation should not be changed
            AxisEngine::m_bServer = bServer;
            AxisUtils::initialize ();
            WSDDKeywords::initialize ();
            SoapKeywordMapping::initialize ();
            TypeMapping::initialize ();
            URIMapping::initialize ();
            SoapFault::initialize ();
            ModuleInitialize ();
            
            if (bServer) // no client side wsdd processing at the moment
            {
                if (status == AXIS_SUCCESS)
                {                 
                    try
                    {            
                        XMLParserFactory::initialize();
                    }
                    catch (AxisException& e)
                    {
                        logRethrowException()
                        
                        throw AxisEngineException(e.getExceptionCode(), e.what());
                    }

                    char *pWsddPath = g_pConfig->getAxisConfProperty(AXCONF_WSDDFILEPATH);

                    try
                    {            
                        if (AXIS_SUCCESS != g_pWSDDDeployment->loadWSDD (pWsddPath))
                            status = AXIS_FAIL;
                    }
                    catch (AxisException& e)
                    {
                        logRethrowException()
                        
                        throw AxisEngineException(e.getExceptionCode(), e.what());
                    }
                }
                else
                    status = AXIS_FAIL;
           }
           else if (bServer == 0)      // client side module initialization
           {
                if (status == AXIS_SUCCESS)
                {                    
                   XMLParserFactory::initialize();
                   SOAPTransportFactory::initialize();

                   char *    pClientWsddPath = g_pConfig->getAxisConfProperty(AXCONF_CLIENTWSDDFILEPATH);
    
                   // May be there is no client side handlers configured. So may not have CLIENTWSDDFILEPATH entry in axiscpp.conf 
                   if (pClientWsddPath)
                       if (AXIS_SUCCESS != g_pWSDDDeployment->loadWSDD (pClientWsddPath))
                           status = AXIS_FAIL;
                }
           }
           else
           {
               /* Ok if we can't read config file */
               status = AXIS_SUCCESS;
           }
            
           g_isRunning = true;
           
           logExitWithReturnCode(status)
       }
       else if (AxisEngine::m_bServer != bServer)
       {           
           throw AxisEngineException(SERVER_ENGINE_EXCEPTION);
       }
    }
    catch (...)
    {
        done_initializing();        
        throw;
    }

    ++g_uModuleInitialize;
    done_initializing();

    return status;
}