diff options
-rw-r--r-- | qpid/cpp/src/qpid/broker/ObjectFactory.cpp | 7 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/broker/amqp/Topic.cpp | 1 |
2 files changed, 7 insertions, 1 deletions
diff --git a/qpid/cpp/src/qpid/broker/ObjectFactory.cpp b/qpid/cpp/src/qpid/broker/ObjectFactory.cpp index 2dd182c428..39edaa9fab 100644 --- a/qpid/cpp/src/qpid/broker/ObjectFactory.cpp +++ b/qpid/cpp/src/qpid/broker/ObjectFactory.cpp @@ -20,6 +20,7 @@ */ #include "ObjectFactory.h" #include "Broker.h" +#include "qpid/log/Statement.h" namespace qpid { namespace broker { @@ -49,7 +50,11 @@ bool ObjectFactoryRegistry::recoverObject(Broker& broker, const std::string& typ { for (Factories::iterator i = factories.begin(); i != factories.end(); ++i) { - if ((*i)->recoverObject(broker, type, name, properties, persistenceId)) return true; + try { + if ((*i)->recoverObject(broker, type, name, properties, persistenceId)) return true; + } catch (const std::exception& e) { + QPID_LOG(warning, "Error while recovering object " << name << " of type " << type << ": " << e.what()); + } } return false; } diff --git a/qpid/cpp/src/qpid/broker/amqp/Topic.cpp b/qpid/cpp/src/qpid/broker/amqp/Topic.cpp index ec0fc617b6..93f4b83f08 100644 --- a/qpid/cpp/src/qpid/broker/amqp/Topic.cpp +++ b/qpid/cpp/src/qpid/broker/amqp/Topic.cpp @@ -63,6 +63,7 @@ Topic::Topic(Broker& broker, const std::string& n, boost::shared_ptr<Exchange> e alternateExchange(getProperty(ALTERNATE_EXCHANGE, properties)) { if (exchange->getName().empty()) throw qpid::Exception("Exchange must be specified."); + if (durable && !exchange->isDurable()) throw qpid::Exception("Durable topic must be backed by durable exchange"); qpid::types::Variant::Map unused; qpid::types::Variant::Map filtered = filter(properties, true); |