summaryrefslogtreecommitdiff
path: root/qpid/cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2014-11-07 16:26:30 +0000
committerGordon Sim <gsim@apache.org>2014-11-07 16:26:30 +0000
commit3a8431a106b88149e545c426bc104548ec28a2ed (patch)
tree105d260fb85d447d173739f855419697e3a74dd9 /qpid/cpp
parenta4df5c92b5ce482c08d06d1f18e1ee8acce72ffe (diff)
downloadqpid-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.cpp21
-rw-r--r--qpid/cpp/src/qpid/xml/XmlExchange.h3
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);