Reducing header overuse, non-inlining selected methods (CPPOST-35).
[shibboleth/cpp-opensaml.git] / saml / saml2 / metadata / impl / DynamicMetadataProvider.cpp
index 47106ec..4659100 100644 (file)
@@ -28,6 +28,8 @@
 #include <xercesc/framework/Wrapper4InputSource.hpp>
 #include <xercesc/util/XMLUniDefs.hpp>
 #include <xmltooling/logging.h>
+#include <xmltooling/XMLToolingConfig.h>
+#include <xmltooling/util/Threads.h>
 #include <xmltooling/util/XMLHelper.h>
 #include <xmltooling/validation/ValidatorSuite.h>
 
@@ -72,6 +74,26 @@ DynamicMetadataProvider::~DynamicMetadataProvider()
     delete m_lock;
 }
 
+const XMLObject* DynamicMetadataProvider::getMetadata() const
+{
+    throw MetadataException("getMetadata operation not implemented on this provider.");
+}
+
+Lockable* DynamicMetadataProvider::lock()
+{
+    m_lock->rdlock();
+    return this;
+}
+
+void DynamicMetadataProvider::unlock()
+{
+    m_lock->unlock();
+}
+
+void DynamicMetadataProvider::init()
+{
+}
+
 pair<const EntityDescriptor*,const RoleDescriptor*> DynamicMetadataProvider::getEntityDescriptor(const Criteria& criteria) const
 {
     // Check cache while holding the read lock.
@@ -112,14 +134,13 @@ pair<const EntityDescriptor*,const RoleDescriptor*> DynamicMetadataProvider::get
             }
         }
 
-        if (!m_validate) {
-            try {
-                SchemaValidators.validate(entity2.get());
-            }
-            catch (exception& ex) {
-                log.error("metadata intance failed manual schema validation checking: %s", ex.what());
-                throw MetadataException("Metadata instance failed manual schema validation checking.");
-            }
+        // Preprocess the metadata (even if we schema-validated).
+        try {
+            SchemaValidators.validate(entity2.get());
+        }
+        catch (exception& ex) {
+            log.error("metadata intance failed manual validation checking: %s", ex.what());
+            throw MetadataException("Metadata instance failed manual validation checking.");
         }
 
         // Filter it, which may throw.