#include "exceptions.h"
#include "saml2/metadata/ChainingMetadataProvider.h"
-#include <log4cpp/Category.hh>
-#include <xmltooling/util/XMLHelper.h>
#include <xercesc/util/XMLUniDefs.hpp>
+#include <xmltooling/logging.h>
+#include <xmltooling/util/XMLHelper.h>
+
using namespace opensaml::saml2md;
using namespace opensaml;
using namespace xmlsignature;
+using namespace xmltooling::logging;
using namespace xmltooling;
-using namespace log4cpp;
using namespace std;
namespace opensaml {
ChainingMetadataProvider::ChainingMetadataProvider(const DOMElement* e) : ObservableMetadataProvider(e), m_tlsKey(NULL)
{
Category& log=Category::getInstance(SAML_LOGCAT".Metadata");
- try {
- e = e ? XMLHelper::getFirstChildElement(e, _MetadataProvider) : NULL;
- while (e) {
- auto_ptr_char temp(e->getAttributeNS(NULL,type));
- if (temp.get() && *temp.get()) {
+ e = e ? XMLHelper::getFirstChildElement(e, _MetadataProvider) : NULL;
+ while (e) {
+ auto_ptr_char temp(e->getAttributeNS(NULL,type));
+ if (temp.get() && *temp.get()) {
+ try {
log.info("building MetadataProvider of type %s", temp.get());
auto_ptr<MetadataProvider> provider(
SAMLConfig::getConfig().MetadataProviderManager.newPlugin(temp.get(), e)
m_providers.push_back(provider.get());
provider.release();
}
- e = XMLHelper::getNextSiblingElement(e, _MetadataProvider);
+ catch (exception& ex) {
+ log.error("error building MetadataProvider: %s", ex.what());
+ }
}
- }
- catch (exception&) {
- for_each(m_providers.begin(), m_providers.end(), xmltooling::cleanup<MetadataProvider>());
- throw;
+ e = XMLHelper::getNextSiblingElement(e, _MetadataProvider);
}
m_tlsKey = ThreadKey::create(NULL);
}
for_each(m_providers.begin(), m_providers.end(), xmltooling::cleanup<MetadataProvider>());
}
-void ChainingMetadataProvider::onEvent(MetadataProvider& provider)
+void ChainingMetadataProvider::onEvent(const ObservableMetadataProvider& provider) const
{
emitChangeEvent();
}
void ChainingMetadataProvider::init()
{
- for_each(m_providers.begin(), m_providers.end(), mem_fun(&MetadataProvider::init));
+ for (vector<MetadataProvider*>::const_iterator i=m_providers.begin(); i!=m_providers.end(); ++i) {
+ try {
+ (*i)->init();
+ }
+ catch (exception& ex) {
+ Category::getInstance(SAML_LOGCAT".Metadata").error("failure initializing MetadataProvider: %s", ex.what());
+ }
+ }
}
Lockable* ChainingMetadataProvider::lock()