src/engine/XMLParserFactory.cpp (107 lines of code) (raw):

/* * Copyright 2003-2004 The Apache Software Foundation. // (c) Copyright IBM Corp. 2004, 2005 All Rights Reserved * * 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 include file must be first thing in file !!! #include "../platforms/PlatformAutoSense.hpp" #include <stdio.h> #include "XMLParserFactory.h" #include "../xml/XMLParser.h" #include "../common/AxisConfig.h" #include "AxisEngineException.h" #include "../common/AxisTrace.h" extern AXIS_CPP_NAMESPACE_PREFIX AxisConfig* g_pConfig; AXIS_CPP_NAMESPACE_START 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() { logEntryEngine("XMLParserFactory::~XMLParserFactory") logExit() } int XMLParserFactory:: initialize() { logEntryEngine("XMLParserFactory::initialize") m_pcLibraryPath = g_pConfig->getAxisConfProperty(AXCONF_XMLPARSER); if (!loadLib()) { m_Create = (CREATE_OBJECT2) PLATFORM_GETPROCADDR(m_LibHandler, CREATE_FUNCTION2); if (m_Create) m_Delete = (DELETE_OBJECT2) PLATFORM_GETPROCADDR(m_LibHandler, DELETE_FUNCTION2); if (!m_Create || !m_Delete) { // get load lib error information string sFullMessage = "Failed to resolve to XML Parser procedures in library " + string(m_pcLibraryPath) + ". " + PLATFORM_LOADLIB_ERROR; logThrowExceptionWithData("AxisEngineException - SERVER_ENGINE_LOADING_PARSER_FAILED", sFullMessage.c_str()) // Unload library - this must be done after obtaining error info above unloadLib(); throw AxisEngineException(SERVER_ENGINE_LOADING_PARSER_FAILED, sFullMessage.c_str()); } } else { // dead code - will never be reached, need to remove. logThrowException("AxisEngineException - SERVER_ENGINE_LOADING_PARSER_FAILED") throw AxisEngineException(SERVER_ENGINE_LOADING_PARSER_FAILED); } logExitWithReturnCode(AXIS_SUCCESS) return AXIS_SUCCESS; } int XMLParserFactory:: uninitialize() { logEntryEngine("XMLParserFactory::uninitialize") int Status = unloadLib(); logExitWithReturnCode(Status) return Status; } /** * Should create an instance of transport of type given by eProtocol */ XMLParser* XMLParserFactory:: getParserObject() { logEntryEngine("XMLParserFactory::getParserObject") XMLParser* pTpt = 0; if (m_Create) m_Create(&pTpt); if (pTpt) { if (AxisTrace::isLoggingEnabled() && AxisTrace::isParserLoggingEnabled()) pTpt->enableTrace(AxisTrace::getLogFilePath().c_str(), AxisTrace::getLogFilter().c_str()); } logExitWithPointer(pTpt) return pTpt; } void XMLParserFactory:: destroyParserObject(XMLParser* pObject) { logEntryEngine("XMLParserFactory::destroyParserObject") m_Delete(pObject); logExit() } int XMLParserFactory:: loadLib() { logEntryEngine("XMLParserFactory::loadLib") logDebugArg1("Loading parser %s", m_pcLibraryPath) m_LibHandler = PLATFORM_LOADLIB(m_pcLibraryPath); if (!m_LibHandler) { // get load lib error information string sFullMessage = "Failed to load XML Parser library " + string(m_pcLibraryPath) + ". " + PLATFORM_LOADLIB_ERROR; logThrowExceptionWithData("AxisEngineException - SERVER_ENGINE_LOADING_PARSER_FAILED", sFullMessage.c_str()) throw AxisEngineException(SERVER_ENGINE_LOADING_PARSER_FAILED, sFullMessage.c_str()); } logExitWithReturnCode(AXIS_SUCCESS) return AXIS_SUCCESS; } int XMLParserFactory:: unloadLib() { logEntryEngine("XMLParserFactory::unloadLib") logDebugArg1("Unloading parser %s", m_pcLibraryPath) PLATFORM_UNLOADLIB(m_LibHandler); logExitWithReturnCode(AXIS_SUCCESS) return AXIS_SUCCESS; } AXIS_CPP_NAMESPACE_END