From 8a4c51f79be29149fa30a01e7fab6f36301f24bb Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Sun, 12 Sep 2010 13:03:00 +0000 Subject: 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 --- .../server/transport/ServerSessionDelegate.java | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'qpid/java') 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> registeredTypes) + { + for(ExchangeType type : registeredTypes) + { + if(type.getDefaultExchangeName().toString().equals( exchange.getName() )) + { + return true; + } + } + return false; + } + @Override public void exchangeQuery(Session session, ExchangeQuery method) { -- cgit v1.2.1