Skip to content
Snippets Groups Projects
XMLScanner.cpp 78.4 KiB
Newer Older
PeiYong Zhang's avatar
PeiYong Zhang committed
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.
PeiYong Zhang's avatar
PeiYong Zhang committed
 */

/*
Khaled Noaman's avatar
Khaled Noaman committed
 * $Id$
PeiYong Zhang's avatar
PeiYong Zhang committed
 */


// ---------------------------------------------------------------------------
//  Includes
// ---------------------------------------------------------------------------
Khaled Noaman's avatar
Khaled Noaman committed
#include <xercesc/internal/XMLScanner.hpp>
#include <xercesc/internal/ValidationContextImpl.hpp>
PeiYong Zhang's avatar
PeiYong Zhang committed
#include <xercesc/util/Janitor.hpp>
#include <xercesc/util/Mutexes.hpp>
#include <xercesc/util/RuntimeException.hpp>
#include <xercesc/util/UnexpectedEOFException.hpp>
#include <xercesc/util/XMLMsgLoader.hpp>
#include <xercesc/util/XMLInitializer.hpp>
PeiYong Zhang's avatar
PeiYong Zhang committed
#include <xercesc/framework/LocalFileInputSource.hpp>
#include <xercesc/framework/URLInputSource.hpp>
#include <xercesc/framework/XMLDocumentHandler.hpp>
#include <xercesc/framework/XMLEntityHandler.hpp>
#include <xercesc/framework/XMLPScanToken.hpp>
#include <xercesc/framework/XMLValidator.hpp>
#include <xercesc/internal/EndOfEntityException.hpp>
#include <xercesc/validators/DTD/DocTypeHandler.hpp>
Khaled Noaman's avatar
Khaled Noaman committed
#include <xercesc/validators/common/GrammarResolver.hpp>
#include <xercesc/util/OutOfMemoryException.hpp>
#include <xercesc/util/XMLResourceIdentifier.hpp>
PeiYong Zhang's avatar
PeiYong Zhang committed

Tinny Ng's avatar
Tinny Ng committed
XERCES_CPP_NAMESPACE_BEGIN

PeiYong Zhang's avatar
PeiYong Zhang committed
// ---------------------------------------------------------------------------
//  Local static data
// ---------------------------------------------------------------------------
PeiYong Zhang's avatar
PeiYong Zhang committed
static XMLMutex*       sScannerMutex = 0;
static XMLMsgLoader*   gMsgLoader = 0;

void XMLInitializer::initializeXMLScanner()
{
    gMsgLoader = XMLPlatformUtils::loadMsgSet(XMLUni::fgXMLErrDomain);
PeiYong Zhang's avatar
PeiYong Zhang committed

    if (!gMsgLoader)
      XMLPlatformUtils::panic(PanicHandler::Panic_CantLoadMsgDomain);
PeiYong Zhang's avatar
PeiYong Zhang committed

    sScannerMutex = new XMLMutex(XMLPlatformUtils::fgMemoryManager);
PeiYong Zhang's avatar
PeiYong Zhang committed
}

void XMLInitializer::terminateXMLScanner()
PeiYong Zhang's avatar
PeiYong Zhang committed
{
PeiYong Zhang's avatar
PeiYong Zhang committed
    delete sScannerMutex;
    sScannerMutex = 0;
}

//
//
typedef JanitorMemFunCall<XMLScanner>   CleanupType;
typedef JanitorMemFunCall<ReaderMgr>    ReaderMgrResetType;


PeiYong Zhang's avatar
PeiYong Zhang committed
// ---------------------------------------------------------------------------
//  XMLScanner: Constructors and Destructor
// ---------------------------------------------------------------------------
XMLScanner::XMLScanner(XMLValidator* const valToAdopt,
                       GrammarResolver* const grammarResolver,
    : fBufferSize(1024 * 1024)
    , fStandardUriConformant(false)
Khaled Noaman's avatar
Khaled Noaman committed
    , fDoNamespaces(false)
PeiYong Zhang's avatar
PeiYong Zhang committed
    , fExitOnFirstFatal(true)
    , fValidationConstraintFatal(false)
    , fInException(false)
    , fStandalone(false)
    , fHasNoDTD(true)
    , fValidate(false)
    , fValidatorFromUser(false)
    , fDoSchema(false)
    , fSchemaFullChecking(false)
PeiYong Zhang's avatar
PeiYong Zhang committed
    , fIdentityConstraintChecking(true)
    , fToCacheGrammar(false)
    , fUseCachedGrammar(false)
Khaled Noaman's avatar
Khaled Noaman committed
    , fLoadExternalDTD(true)
Khaled Noaman's avatar
Khaled Noaman committed
    , fNormalizeData(true)
    , fValidateAnnotations(false)
    , fIgnoreAnnotations(false)
    , fDisableDefaultEntityResolution(false)
    , fSkipDTDValidation(false)
PeiYong Zhang's avatar
PeiYong Zhang committed
    , fErrorCount(0)
    , fEntityExpansionLimit(0)
    , fEntityExpansionCount(0)
PeiYong Zhang's avatar
PeiYong Zhang committed
    , fEmptyNamespaceId(0)
    , fUnknownNamespaceId(0)
    , fXMLNamespaceId(0)
    , fXMLNSNamespaceId(0)
    , fSchemaNamespaceId(0)
    , fUIntPool(0)
    , fUIntPoolRow(0)
    , fUIntPoolCol(0)
    , fUIntPoolRowTotal(2)
PeiYong Zhang's avatar
PeiYong Zhang committed
    , fScannerId(0)
    , fSequenceId(0)
    , fAttrList(0)
PeiYong Zhang's avatar
PeiYong Zhang committed
    , fDocHandler(0)
    , fDocTypeHandler(0)
    , fEntityHandler(0)
    , fErrorReporter(0)
    , fErrorHandler(0)
    , fValidationContext(0)
    , fEntityDeclPoolRetrieved(false)
PeiYong Zhang's avatar
PeiYong Zhang committed
    , fValidator(valToAdopt)
    , fValScheme(Val_Never)
    , fGrammarResolver(grammarResolver)
    , fGrammarPoolMemoryManager(grammarResolver->getGrammarPoolMemoryManager())
PeiYong Zhang's avatar
PeiYong Zhang committed
    , fGrammar(0)
PeiYong Zhang's avatar
PeiYong Zhang committed
    , fURIStringPool(0)
    , fRootElemName(0)
    , fExternalSchemaLocation(0)
    , fExternalNoNamespaceSchemaLocation(0)
    , fSecurityManager(0)
Tinny Ng's avatar
Tinny Ng committed
    , fXMLVersion(XMLReader::XMLV1_0)
    , fMemoryManager(manager)
    , fBufMgr(manager)
    , fAttNameBuf(1023, manager)
    , fAttValueBuf(1023, manager)
    , fCDataBuf(1023, manager)
    , fQNameBuf(1023, manager)
    , fPrefixBuf(1023, manager)
    , fURIBuf(1023, manager)
PeiYong Zhang's avatar
PeiYong Zhang committed
{
    CleanupType cleanup(this, &XMLScanner::cleanUp);
PeiYong Zhang's avatar
PeiYong Zhang committed

    try
    {
        commonInit();
    }
    catch(const OutOfMemoryException&)
    {
        // Don't cleanup when out of memory, since executing the
        // code can cause problems.
        cleanup.release();

        throw;
    }

    cleanup.release();
PeiYong Zhang's avatar
PeiYong Zhang committed
}

XMLScanner::XMLScanner( XMLDocumentHandler* const  docHandler
Khaled Noaman's avatar
Khaled Noaman committed
                          , DocTypeHandler* const    docTypeHandler
                          , XMLEntityHandler* const  entityHandler
                          , XMLErrorReporter* const  errHandler
                          , XMLValidator* const      valToAdopt
                          , GrammarResolver* const   grammarResolver
PeiYong Zhang's avatar
PeiYong Zhang committed

    : fBufferSize(1024 * 1024)
    , fStandardUriConformant(false)
Khaled Noaman's avatar
Khaled Noaman committed
    , fDoNamespaces(false)
PeiYong Zhang's avatar
PeiYong Zhang committed
    , fExitOnFirstFatal(true)
    , fValidationConstraintFatal(false)
    , fInException(false)
    , fStandalone(false)
    , fHasNoDTD(true)
    , fValidate(false)
    , fValidatorFromUser(false)
    , fDoSchema(false)
    , fSchemaFullChecking(false)
PeiYong Zhang's avatar
PeiYong Zhang committed
    , fIdentityConstraintChecking(true)
    , fToCacheGrammar(false)
Loading
Loading full blame...