diff options
| author | Gordon Sim <gsim@apache.org> | 2014-11-07 16:26:30 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2014-11-07 16:26:30 +0000 |
| commit | 3a8431a106b88149e545c426bc104548ec28a2ed (patch) | |
| tree | 105d260fb85d447d173739f855419697e3a74dd9 /qpid/cpp | |
| parent | a4df5c92b5ce482c08d06d1f18e1ee8acce72ffe (diff) | |
| download | qpid-python-3a8431a106b88149e545c426bc104548ec28a2ed.tar.gz | |
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
Diffstat (limited to 'qpid/cpp')
| -rw-r--r-- | qpid/cpp/src/qpid/xml/XmlExchange.cpp | 21 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/xml/XmlExchange.h | 3 |
2 files changed, 23 insertions, 1 deletions
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 <xercesc/framework/MemBufInputSource.hpp> +#include <xercesc/util/XMLEntityResolver.hpp> #ifdef XQ_EFFECTIVE_BOOLEAN_VALUE_HPP #include <xqilla/ast/XQEffectiveBooleanValue.hpp> @@ -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<std::string, XmlBinding::vector> XmlBindingsMap; XmlBindingsMap bindingsMap; qpid::sys::RWlock lock; + boost::shared_ptr<XmlNullResolver> resolver; bool matches(Query& query, Deliverable& msg, bool parse_message_content); |
