X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=xmltooling%2FXMLToolingConfig.cpp;h=e5b1768ff47ab9ae32201b3febd88f3aee651b49;hb=5abd16757f109ccf2b6a7c3b40b98ae858bddae8;hp=23c4146540fb807e9c47a30e707f016b8f156d15;hpb=c5183613326e3d36a544b2941654d0667a29b836;p=shibboleth%2Fcpp-xmltooling.git diff --git a/xmltooling/XMLToolingConfig.cpp b/xmltooling/XMLToolingConfig.cpp index 23c4146..e5b1768 100644 --- a/xmltooling/XMLToolingConfig.cpp +++ b/xmltooling/XMLToolingConfig.cpp @@ -20,11 +20,17 @@ * Library configuration */ +#define XMLTOOLING_DECLARE_VALIDATORS + #include "internal.h" +#include "exceptions.h" #include "XMLToolingConfig.h" #include "impl/UnknownElement.h" -#include "signature/impl/XMLSecSignature.h" +#include "signature/KeyInfo.h" +#include "signature/Signature.h" #include "util/NDC.h" +#include "util/XMLConstants.h" +#include "validation/Validator.h" #ifdef HAVE_DLFCN_H # include @@ -40,11 +46,36 @@ #include -using namespace log4cpp; +using namespace xmlsignature; using namespace xmltooling; +using namespace log4cpp; using namespace std; -namespace { +#define REGISTER_ELEMENT(namespaceURI,cname) \ + q=QName(namespaceURI,cname::LOCAL_NAME); \ + XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \ + Validator::registerValidator(q,new cname##SchemaValidator()) + +#define REGISTER_TYPE(namespaceURI,cname) \ + q=QName(namespaceURI,cname::TYPE_NAME); \ + XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \ + Validator::registerValidator(q,new cname##SchemaValidator()) + + +DECL_EXCEPTION_FACTORY(XMLParserException,xmltooling); +DECL_EXCEPTION_FACTORY(XMLObjectException,xmltooling); +DECL_EXCEPTION_FACTORY(MarshallingException,xmltooling); +DECL_EXCEPTION_FACTORY(UnmarshallingException,xmltooling); +DECL_EXCEPTION_FACTORY(UnknownElementException,xmltooling); +DECL_EXCEPTION_FACTORY(UnknownAttributeException,xmltooling); +DECL_EXCEPTION_FACTORY(UnknownExtensionException,xmltooling); +DECL_EXCEPTION_FACTORY(ValidationException,xmltooling); + +#ifndef XMLTOOLING_NO_XMLSEC + DECL_EXCEPTION_FACTORY(SignatureException,xmlsignature); +#endif + +namespace xmltooling { XMLToolingInternalConfig g_config; } @@ -136,12 +167,68 @@ bool XMLToolingInternalConfig::init() #endif m_parserPool=new ParserPool(); + m_validatingPool=new ParserPool(true,true); m_lock=xercesc::XMLPlatformUtils::makeMutex(); // default registrations XMLObjectBuilder::registerDefaultBuilder(new UnknownElementBuilder()); + + QName q; + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,KeyInfo); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,KeyName); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,KeyValue); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,MgmtData); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,DSAKeyValue); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,RSAKeyValue); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,Exponent); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,Modulus); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,P); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,Q); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,G); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,Y); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,J); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,Seed); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,PgenCounter); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,XPath); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,Transform); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,Transforms); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,RetrievalMethod); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,X509IssuerSerial); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,X509IssuerName); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,X509SerialNumber); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,X509SKI); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,X509SubjectName); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,X509Certificate); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,X509CRL); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,X509Data); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,SPKISexp); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,SPKIData); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,PGPKeyID); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,PGPKeyPacket); + REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,PGPData); + REGISTER_TYPE(XMLConstants::XMLSIG_NS,KeyInfo); + REGISTER_TYPE(XMLConstants::XMLSIG_NS,KeyValue); + REGISTER_TYPE(XMLConstants::XMLSIG_NS,DSAKeyValue); + REGISTER_TYPE(XMLConstants::XMLSIG_NS,RSAKeyValue); + REGISTER_TYPE(XMLConstants::XMLSIG_NS,Transform); + REGISTER_TYPE(XMLConstants::XMLSIG_NS,Transforms); + REGISTER_TYPE(XMLConstants::XMLSIG_NS,RetrievalMethod); + REGISTER_TYPE(XMLConstants::XMLSIG_NS,X509IssuerSerial); + REGISTER_TYPE(XMLConstants::XMLSIG_NS,X509Data); + REGISTER_TYPE(XMLConstants::XMLSIG_NS,SPKIData); + REGISTER_TYPE(XMLConstants::XMLSIG_NS,PGPData); + + REGISTER_EXCEPTION_FACTORY(XMLParserException,xmltooling); + REGISTER_EXCEPTION_FACTORY(XMLObjectException,xmltooling); + REGISTER_EXCEPTION_FACTORY(MarshallingException,xmltooling); + REGISTER_EXCEPTION_FACTORY(UnmarshallingException,xmltooling); + REGISTER_EXCEPTION_FACTORY(UnknownElementException,xmltooling); + REGISTER_EXCEPTION_FACTORY(UnknownAttributeException,xmltooling); + REGISTER_EXCEPTION_FACTORY(ValidationException,xmltooling); + #ifndef XMLTOOLING_NO_XMLSEC - XMLObjectBuilder::registerBuilder(QName(XMLConstants::XMLSIG_NS,Signature::LOCAL_NAME),new XMLSecSignatureBuilder()); + XMLObjectBuilder::registerBuilder(QName(XMLConstants::XMLSIG_NS,Signature::LOCAL_NAME),new SignatureBuilder()); + REGISTER_EXCEPTION_FACTORY(SignatureException,xmlsignature); #endif } catch (const xercesc::XMLException&) { @@ -156,6 +243,8 @@ bool XMLToolingInternalConfig::init() void XMLToolingInternalConfig::term() { XMLObjectBuilder::destroyBuilders(); + Validator::destroyValidators(); + XMLToolingException::deregisterFactories(); for (vector::reverse_iterator i=m_libhandles.rbegin(); i!=m_libhandles.rend(); i++) { #if defined(WIN32) @@ -176,6 +265,8 @@ void XMLToolingInternalConfig::term() delete m_parserPool; m_parserPool=NULL; + delete m_validatingPool; + m_validatingPool=NULL; #ifndef XMLTOOLING_NO_XMLSEC delete m_xsecProvider; @@ -193,7 +284,7 @@ void XMLToolingInternalConfig::term() Category::getInstance(XMLTOOLING_LOGCAT".XMLToolingConfig").info("library shutdown complete"); } -ILockable& XMLToolingInternalConfig::lock() +Lockable& XMLToolingInternalConfig::lock() { xercesc::XMLPlatformUtils::lockMutex(m_lock); return *this;