Rename exception macros to avoid conflicts, correct some of the decls.
[shibboleth/cpp-xmltooling.git] / xmltooling / XMLToolingConfig.cpp
index a7cbc42..55bcfd5 100644 (file)
 #include "internal.h"
 #include "exceptions.h"
 #include "XMLToolingConfig.h"
-#include "encryption/Encryption.h"
+#include "encryption/Encrypter.h"
 #include "impl/UnknownElement.h"
 #include "security/TrustEngine.h"
 #include "security/OpenSSLCryptoX509CRL.h"
 #include "signature/CredentialResolver.h"
 #include "soap/SOAP.h"
+#include "soap/SOAPTransport.h"
 #include "util/NDC.h"
+#include "util/ReplayCache.h"
+#include "util/StorageService.h"
+#include "util/TemplateEngine.h"
 #include "util/XMLConstants.h"
-#include "validation/Validator.h"
+#include "validation/ValidatorSuite.h"
 
 #ifdef HAVE_DLFCN_H
 # include <dlfcn.h>
@@ -54,17 +58,20 @@ using namespace xmltooling;
 using namespace log4cpp;
 using namespace std;
 
-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);
+DECL_XMLTOOLING_EXCEPTION_FACTORY(XMLParserException,xmltooling);
+DECL_XMLTOOLING_EXCEPTION_FACTORY(XMLObjectException,xmltooling);
+DECL_XMLTOOLING_EXCEPTION_FACTORY(MarshallingException,xmltooling);
+DECL_XMLTOOLING_EXCEPTION_FACTORY(UnmarshallingException,xmltooling);
+DECL_XMLTOOLING_EXCEPTION_FACTORY(UnknownElementException,xmltooling);
+DECL_XMLTOOLING_EXCEPTION_FACTORY(UnknownAttributeException,xmltooling);
+DECL_XMLTOOLING_EXCEPTION_FACTORY(UnknownExtensionException,xmltooling);
+DECL_XMLTOOLING_EXCEPTION_FACTORY(ValidationException,xmltooling);
+DECL_XMLTOOLING_EXCEPTION_FACTORY(IOException,xmltooling);
 
 #ifndef XMLTOOLING_NO_XMLSEC
-    DECL_EXCEPTION_FACTORY(SignatureException,xmlsignature);
+    DECL_XMLTOOLING_EXCEPTION_FACTORY(XMLSecurityException,xmltooling);
+    DECL_XMLTOOLING_EXCEPTION_FACTORY(SignatureException,xmlsignature);
+    DECL_XMLTOOLING_EXCEPTION_FACTORY(EncryptionException,xmlencryption);
 #endif
 
 namespace xmltooling {
@@ -140,6 +147,18 @@ bool XMLToolingInternalConfig::log_config(const char* config)
     return true;
 }
 
+void XMLToolingConfig::setReplayCache(ReplayCache* replayCache)
+{
+    delete m_replayCache;
+    m_replayCache = replayCache;
+}
+
+void XMLToolingConfig::setTemplateEngine(TemplateEngine* templateEngine)
+{
+    delete m_templateEngine;
+    m_templateEngine = templateEngine;
+}
+
 bool XMLToolingInternalConfig::init()
 {
 #ifdef _DEBUG
@@ -185,25 +204,31 @@ bool XMLToolingInternalConfig::init()
         registerEncryptionClasses();
         registerSOAPClasses();
         
-        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);
+        REGISTER_XMLTOOLING_EXCEPTION_FACTORY(XMLParserException,xmltooling);
+        REGISTER_XMLTOOLING_EXCEPTION_FACTORY(XMLObjectException,xmltooling);
+        REGISTER_XMLTOOLING_EXCEPTION_FACTORY(MarshallingException,xmltooling);
+        REGISTER_XMLTOOLING_EXCEPTION_FACTORY(UnmarshallingException,xmltooling);
+        REGISTER_XMLTOOLING_EXCEPTION_FACTORY(UnknownElementException,xmltooling);
+        REGISTER_XMLTOOLING_EXCEPTION_FACTORY(UnknownAttributeException,xmltooling);
+        REGISTER_XMLTOOLING_EXCEPTION_FACTORY(ValidationException,xmltooling);
+        REGISTER_XMLTOOLING_EXCEPTION_FACTORY(IOException,xmltooling);
         
 #ifndef XMLTOOLING_NO_XMLSEC
-        XMLObjectBuilder::registerBuilder(QName(XMLConstants::XMLSIG_NS,Signature::LOCAL_NAME),new SignatureBuilder());
-        REGISTER_EXCEPTION_FACTORY(SignatureException,xmlsignature);
+        XMLObjectBuilder::registerBuilder(QName(xmlconstants::XMLSIG_NS,Signature::LOCAL_NAME),new SignatureBuilder());
+        REGISTER_XMLTOOLING_EXCEPTION_FACTORY(XMLSecurityException,xmltooling);
+        REGISTER_XMLTOOLING_EXCEPTION_FACTORY(SignatureException,xmlsignature);
+        REGISTER_XMLTOOLING_EXCEPTION_FACTORY(EncryptionException,xmlencryption);
         registerKeyResolvers();
         registerCredentialResolvers();
         registerTrustEngines();
 #endif
+        registerSOAPTransports();
+        initSOAPTransports();
+        registerStorageServices();
 
         // Register xml:id as an ID attribute.        
         static const XMLCh xmlid[] = UNICODE_LITERAL_2(i,d);
-        AttributeExtensibleXMLObject::registerIDAttribute(QName(XMLConstants::XML_NS, xmlid)); 
+        AttributeExtensibleXMLObject::registerIDAttribute(QName(xmlconstants::XML_NS, xmlid)); 
     }
     catch (const xercesc::XMLException&) {
         log.fatal("caught exception while initializing Xerces");
@@ -216,18 +241,26 @@ bool XMLToolingInternalConfig::init()
 
 void XMLToolingInternalConfig::term()
 {
+    SchemaValidators.destroyValidators();
     XMLObjectBuilder::destroyBuilders();
-    KeyInfoSchemaValidators.destroyValidators();
-    EncryptionSchemaValidators.destroyValidators();
     XMLToolingException::deregisterFactories();
     AttributeExtensibleXMLObject::deregisterIDAttributes();
 
+    StorageServiceManager.deregisterFactories();
+    termSOAPTransports();
+    SOAPTransportManager.deregisterFactories();
 #ifndef XMLTOOLING_NO_XMLSEC
     TrustEngineManager.deregisterFactories();
     CredentialResolverManager.deregisterFactories();
     KeyResolverManager.deregisterFactories();
 #endif
 
+    delete m_replayCache;
+    m_replayCache = NULL;
+    
+    delete m_templateEngine;
+    m_templateEngine = NULL;
+
     for (vector<void*>::reverse_iterator i=m_libhandles.rbegin(); i!=m_libhandles.rend(); i++) {
 #if defined(WIN32)
         FARPROC fn=GetProcAddress(static_cast<HMODULE>(*i),"xmltooling_extension_term");