summaryrefslogtreecommitdiff
path: root/cpp/src/qpid
diff options
context:
space:
mode:
authorCarl C. Trieloff <cctrieloff@apache.org>2008-10-15 17:05:31 +0000
committerCarl C. Trieloff <cctrieloff@apache.org>2008-10-15 17:05:31 +0000
commitca2c15b9121db502807221936bc146a4b5520234 (patch)
treeaa1be37782166521f8a772f18d2047927506aaa5 /cpp/src/qpid
parent207dbcb73d225bdd21e797706a6ea2f235790f98 (diff)
downloadqpid-python-ca2c15b9121db502807221936bc146a4b5520234.tar.gz
QPID-1341 from Jonathan
- Patch applied for Jonathan - Made the following changes - added PreRoute for route() for sequencing - changed xmlexchange form struct to class - added xml.so to verify script - removed two unsed files. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@704962 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid')
-rw-r--r--cpp/src/qpid/broker/Broker.h1
-rw-r--r--cpp/src/qpid/broker/ExchangeRegistry.cpp8
-rw-r--r--cpp/src/qpid/xml/XmlBinding.h37
-rw-r--r--cpp/src/qpid/xml/XmlExchange.cpp (renamed from cpp/src/qpid/broker/XmlExchange.cpp)8
-rw-r--r--cpp/src/qpid/xml/XmlExchange.h (renamed from cpp/src/qpid/broker/XmlExchange.h)4
-rw-r--r--cpp/src/qpid/xml/XmlExchangePlugin.cpp67
6 files changed, 112 insertions, 13 deletions
diff --git a/cpp/src/qpid/broker/Broker.h b/cpp/src/qpid/broker/Broker.h
index 97a4a36eca..a7496f1510 100644
--- a/cpp/src/qpid/broker/Broker.h
+++ b/cpp/src/qpid/broker/Broker.h
@@ -129,7 +129,6 @@ class Broker : public sys::Runnable, public Plugin::Target,
std::vector<Url> knownBrokers;
std::vector<Url> getKnownBrokersImpl();
-
public:
diff --git a/cpp/src/qpid/broker/ExchangeRegistry.cpp b/cpp/src/qpid/broker/ExchangeRegistry.cpp
index 309e88e8be..7abb2ad443 100644
--- a/cpp/src/qpid/broker/ExchangeRegistry.cpp
+++ b/cpp/src/qpid/broker/ExchangeRegistry.cpp
@@ -25,9 +25,6 @@
#include "FanOutExchange.h"
#include "HeadersExchange.h"
#include "TopicExchange.h"
-#ifdef HAVE_XML
-#include "XmlExchange.h"
-#endif
#include "qpid/management/ManagementExchange.h"
#include "qpid/framing/reply_exceptions.h"
@@ -61,11 +58,6 @@ pair<Exchange::shared_ptr, bool> ExchangeRegistry::declare(const string& name, c
}else if (type == ManagementExchange::typeName) {
exchange = Exchange::shared_ptr(new ManagementExchange(name, durable, args, parent));
}
-#ifdef HAVE_XML
- else if (type == XmlExchange::typeName) {
- exchange = Exchange::shared_ptr(new XmlExchange(name, durable, args, parent));
- }
-#endif
else{
FunctionMap::iterator i = factory.find(type);
if (i == factory.end()) {
diff --git a/cpp/src/qpid/xml/XmlBinding.h b/cpp/src/qpid/xml/XmlBinding.h
new file mode 100644
index 0000000000..cc6b4dca5d
--- /dev/null
+++ b/cpp/src/qpid/xml/XmlBinding.h
@@ -0,0 +1,37 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+#include <qpid/framing/FieldTable>
+#include <string>
+
+#ifndef _XmlBinding_
+#define _XmlBinding_
+
+namespace qpid {
+namespace client {
+
+class XmlBinding : public framing::FieldTable {
+ public:
+ setQuery(string query) { setString("xquery", query); }
+};
+
+}
+}
+#endif
diff --git a/cpp/src/qpid/broker/XmlExchange.cpp b/cpp/src/qpid/xml/XmlExchange.cpp
index 0ff5b2fdbf..53eb0f20b8 100644
--- a/cpp/src/qpid/broker/XmlExchange.cpp
+++ b/cpp/src/qpid/xml/XmlExchange.cpp
@@ -20,17 +20,19 @@
*/
#include "config.h"
+
#include "XmlExchange.h"
-#include "DeliverableMessage.h"
+#include "qpid/broker/DeliverableMessage.h"
#include "qpid/log/Statement.h"
#include "qpid/framing/FieldTable.h"
#include "qpid/framing/FieldValue.h"
#include "qpid/framing/reply_exceptions.h"
-#include <xercesc/framework/MemBufInputSource.hpp>
+#include "qpid/Plugin.h"
+#include <xercesc/framework/MemBufInputSource.hpp>
#include <xqilla/context/ItemFactory.hpp>
#include <xqilla/xqilla-simple.hpp>
@@ -45,6 +47,7 @@ namespace _qmf = qmf::org::apache::qpid::broker;
namespace qpid {
namespace broker {
+
XmlExchange::XmlExchange(const string& _name, Manageable* _parent) : Exchange(_name, _parent)
{
if (mgmtExchange != 0)
@@ -176,6 +179,7 @@ bool XmlExchange::matches(Query& query, Deliverable& msg, const qpid::framing::F
void XmlExchange::route(Deliverable& msg, const string& routingKey, const FieldTable* args)
{
+ PreRoute pr(msg, this);
try {
XmlBinding::vector::ConstPtr p;
{
diff --git a/cpp/src/qpid/broker/XmlExchange.h b/cpp/src/qpid/xml/XmlExchange.h
index 57d6c26e0d..066a26489d 100644
--- a/cpp/src/qpid/broker/XmlExchange.h
+++ b/cpp/src/qpid/xml/XmlExchange.h
@@ -21,11 +21,11 @@
#ifndef _XmlExchange_
#define _XmlExchange_
-#include "Exchange.h"
+#include "qpid/broker/Exchange.h"
#include "qpid/framing/FieldTable.h"
#include "qpid/sys/CopyOnWriteArray.h"
#include "qpid/sys/Monitor.h"
-#include "Queue.h"
+#include "qpid/broker/Queue.h"
#include <xqilla/xqilla-simple.hpp>
diff --git a/cpp/src/qpid/xml/XmlExchangePlugin.cpp b/cpp/src/qpid/xml/XmlExchangePlugin.cpp
new file mode 100644
index 0000000000..97e221589d
--- /dev/null
+++ b/cpp/src/qpid/xml/XmlExchangePlugin.cpp
@@ -0,0 +1,67 @@
+/*
+ *
+ * Copyright (c) 2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <sstream>
+#include "qpid/acl/Acl.h"
+#include "qpid/broker/Broker.h"
+#include "qpid/Plugin.h"
+#include "qpid/shared_ptr.h"
+#include "qpid/log/Statement.h"
+
+#include <boost/utility/in_place_factory.hpp>
+
+#include "XmlExchange.h"
+
+namespace qpid {
+namespace broker { // ACL uses the acl namespace here - should I?
+
+using namespace std;
+
+Exchange::shared_ptr create(const std::string& name, bool durable,
+ const framing::FieldTable& args,
+ management::Manageable* parent)
+{
+ Exchange::shared_ptr e(new XmlExchange(name, durable, args, parent));
+ return e;
+}
+
+
+class XmlExchangePlugin : public Plugin
+{
+public:
+ void earlyInitialize(Plugin::Target& target);
+ void initialize(Plugin::Target& target);
+};
+
+
+void XmlExchangePlugin::initialize(Plugin::Target& target)
+{
+ Broker* broker = dynamic_cast<broker::Broker*>(&target);
+ if (broker) {
+ broker->getExchanges().registerType(XmlExchange::typeName, &create);
+ QPID_LOG(info, "Registered xml exchange");
+ }
+}
+
+void XmlExchangePlugin::earlyInitialize(Target&) {}
+
+
+static XmlExchangePlugin matchingPlugin;
+
+
+}} // namespace qpid::acl