summaryrefslogtreecommitdiff
path: root/qpid/java
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2010-09-12 13:03:00 +0000
committerRobert Godfrey <rgodfrey@apache.org>2010-09-12 13:03:00 +0000
commit8a4c51f79be29149fa30a01e7fab6f36301f24bb (patch)
tree138b306d8b118a97e340da7aeb46615b6c2e9599 /qpid/java
parentf18aee9ca723fe5e5820123999b7f76f30f18acd (diff)
downloadqpid-python-8a4c51f79be29149fa30a01e7fab6f36301f24bb.tar.gz
QPID-2856 : Attempting deltion of a default exchange should cause 530 not-allowed
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@996308 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java22
1 files changed, 21 insertions, 1 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java
index b4bb6eb0b4..117be3e3b7 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java
@@ -569,10 +569,18 @@ public class ServerSessionDelegate extends SessionDelegate
{
Exchange exchange = getExchange(session, method.getExchange());
- if(exchange != null && exchange.hasReferrers())
+ if(exchange == null)
+ {
+ exception(session, method, ExecutionErrorCode.NOT_FOUND, "No such exchange '" + method.getExchange() + "'");
+ }
+ else if(exchange.hasReferrers())
{
exception(session, method, ExecutionErrorCode.NOT_ALLOWED, "Exchange in use as an alternate exchange");
}
+ else if(isStandardExchange(exchange, virtualHost.getExchangeFactory().getRegisteredTypes()))
+ {
+ exception(session, method, ExecutionErrorCode.NOT_ALLOWED, "Exchange '"+method.getExchange()+"' cannot be deleted");
+ }
else
{
exchangeRegistry.unregisterExchange(method.getExchange(), method.getIfUnused());
@@ -594,6 +602,18 @@ public class ServerSessionDelegate extends SessionDelegate
}
}
+ private boolean isStandardExchange(Exchange exchange, Collection<ExchangeType<? extends Exchange>> registeredTypes)
+ {
+ for(ExchangeType type : registeredTypes)
+ {
+ if(type.getDefaultExchangeName().toString().equals( exchange.getName() ))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
@Override
public void exchangeQuery(Session session, ExchangeQuery method)
{