From 3a8431a106b88149e545c426bc104548ec28a2ed Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Fri, 7 Nov 2014 16:26:30 +0000 Subject: QPID-6218: no need to retreieve external resources git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1637402 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/qpid/xml/XmlExchange.cpp | 21 ++++++++++++++++++++- qpid/cpp/src/qpid/xml/XmlExchange.h | 3 +++ 2 files changed, 23 insertions(+), 1 deletion(-) (limited to 'qpid/cpp') diff --git a/qpid/cpp/src/qpid/xml/XmlExchange.cpp b/qpid/cpp/src/qpid/xml/XmlExchange.cpp index 837693f53f..ffe9a66656 100644 --- a/qpid/cpp/src/qpid/xml/XmlExchange.cpp +++ b/qpid/cpp/src/qpid/xml/XmlExchange.cpp @@ -36,6 +36,7 @@ #include "qpid/Plugin.h" #include +#include #ifdef XQ_EFFECTIVE_BOOLEAN_VALUE_HPP #include @@ -59,6 +60,23 @@ namespace _qmf = qmf::org::apache::qpid::broker; namespace qpid { namespace broker { + +namespace { +const char* DUMMY("dummy"); +} +class XmlNullResolver : public XERCES_CPP_NAMESPACE::XMLEntityResolver +{ + public: + XERCES_CPP_NAMESPACE::InputSource* resolveEntity(XERCES_CPP_NAMESPACE::XMLResourceIdentifier* xmlri) + { + if (xmlri->getResourceIdentifierType() == XERCES_CPP_NAMESPACE::XMLResourceIdentifier::ExternalEntity) { + return new XERCES_CPP_NAMESPACE::MemBufInputSource(0, 0, DUMMY); + } else { + return 0; + } + } +}; + XQilla XmlBinding::xqilla; @@ -111,7 +129,7 @@ XmlExchange::XmlExchange(const std::string& _name, Manageable* _parent, Broker* XmlExchange::XmlExchange(const std::string& _name, bool _durable, bool autodelete, const FieldTable& _args, Manageable* _parent, Broker* b) : - Exchange(_name, _durable, autodelete, _args, _parent, b) + Exchange(_name, _durable, autodelete, _args, _parent, b), resolver(new XmlNullResolver) { if (mgmtExchange != 0) mgmtExchange->set_type (typeName); @@ -269,6 +287,7 @@ bool XmlExchange::matches(Query& query, Deliverable& msg, bool parse_message_con if (parse_message_content) { + if (resolver) context->setXMLEntityResolver(resolver.get()); msgContent = msg.getMessage().getContent(); QPID_LOG(trace, "matches: message content is [" << msgContent << "]"); diff --git a/qpid/cpp/src/qpid/xml/XmlExchange.h b/qpid/cpp/src/qpid/xml/XmlExchange.h index f9e92d60f9..4115f3d530 100644 --- a/qpid/cpp/src/qpid/xml/XmlExchange.h +++ b/qpid/cpp/src/qpid/xml/XmlExchange.h @@ -58,12 +58,15 @@ struct XmlBinding : public Exchange::Binding { }; +class XmlNullResolver; + class XmlExchange : public virtual Exchange { typedef std::map XmlBindingsMap; XmlBindingsMap bindingsMap; qpid::sys::RWlock lock; + boost::shared_ptr resolver; bool matches(Query& query, Deliverable& msg, bool parse_message_content); -- cgit v1.2.1