You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2014/11/07 17:26:31 UTC

svn commit: r1637402 - in /qpid/trunk/qpid/cpp/src/qpid/xml: XmlExchange.cpp XmlExchange.h

Author: gsim
Date: Fri Nov  7 16:26:30 2014
New Revision: 1637402

URL: http://svn.apache.org/r1637402
Log:
QPID-6218: no need to retreieve external resources

Modified:
    qpid/trunk/qpid/cpp/src/qpid/xml/XmlExchange.cpp
    qpid/trunk/qpid/cpp/src/qpid/xml/XmlExchange.h

Modified: qpid/trunk/qpid/cpp/src/qpid/xml/XmlExchange.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/xml/XmlExchange.cpp?rev=1637402&r1=1637401&r2=1637402&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/xml/XmlExchange.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/xml/XmlExchange.cpp Fri Nov  7 16:26:30 2014
@@ -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:
 
 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::stri
 
 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, 
 
         if (parse_message_content) {
 
+            if (resolver) context->setXMLEntityResolver(resolver.get());
             msgContent = msg.getMessage().getContent();
 
             QPID_LOG(trace, "matches: message content is [" << msgContent << "]");

Modified: qpid/trunk/qpid/cpp/src/qpid/xml/XmlExchange.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/xml/XmlExchange.h?rev=1637402&r1=1637401&r2=1637402&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/xml/XmlExchange.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/xml/XmlExchange.h Fri Nov  7 16:26:30 2014
@@ -58,12 +58,15 @@ struct XmlBinding : public Exchange::Bin
         
 };
 
+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);
 



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org