summaryrefslogtreecommitdiff
path: root/qpid/java
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2014-04-25 00:01:33 +0000
committerRobert Godfrey <rgodfrey@apache.org>2014-04-25 00:01:33 +0000
commit4eddea8954ba9342ab2bc35e495baa673a6015db (patch)
tree32c82a8c8529db6c3f01b5123abce4e35b961c04 /qpid/java
parent6c082f6883922e98e627394c3fa951680a7729b2 (diff)
downloadqpid-python-4eddea8954ba9342ab2bc35e495baa673a6015db.tar.gz
QPID-5578 : Ensure correct error code is returned when a queue is declared with an unknown alternate exchange
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1589912 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java3
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchange.java3
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchangeType.java3
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java3
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchangeType.java2
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java3
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchangeType.java2
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java5
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchangeType.java2
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java4
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/UnknownConfiguredObjectException.java59
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/ExchangeType.java3
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java37
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/UnknownExchangeException.java37
-rwxr-xr-xqpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java2
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/FanoutExchangeTest.java3
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerFactoryTest.java6
-rw-r--r--qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java6
-rw-r--r--qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeDeclareHandler.java14
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java57
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java19
21 files changed, 138 insertions, 135 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java
index e42c3db0b1..5bf1c112cb 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java
@@ -66,7 +66,6 @@ import org.apache.qpid.server.util.StateChangeListener;
import org.apache.qpid.server.virtualhost.ExchangeIsAlternateException;
import org.apache.qpid.server.virtualhost.RequiredExchangeException;
import org.apache.qpid.server.virtualhost.ReservedExchangeNameException;
-import org.apache.qpid.server.virtualhost.UnknownExchangeException;
import org.apache.qpid.server.virtualhost.VirtualHostImpl;
public abstract class AbstractExchange<T extends AbstractExchange<T>>
@@ -107,7 +106,7 @@ public abstract class AbstractExchange<T extends AbstractExchange<T>>
private StateChangeListener<BindingImpl, State> _bindingListener;
- public AbstractExchange(Map<String, Object> attributes, VirtualHostImpl vhost) throws UnknownExchangeException
+ public AbstractExchange(Map<String, Object> attributes, VirtualHostImpl vhost)
{
super(parentsMap(vhost), attributes, vhost.getTaskExecutor());
_virtualHost = vhost;
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchange.java
index 7e408bd1c2..bcec720cea 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchange.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchange.java
@@ -43,7 +43,6 @@ import org.apache.qpid.server.model.ManagedObject;
import org.apache.qpid.server.plugin.ExchangeType;
import org.apache.qpid.server.queue.AMQQueue;
import org.apache.qpid.server.queue.BaseQueue;
-import org.apache.qpid.server.virtualhost.UnknownExchangeException;
import org.apache.qpid.server.virtualhost.VirtualHostImpl;
@ManagedObject( category = false, type = "direct" )
@@ -138,7 +137,7 @@ public class DirectExchange extends AbstractExchange<DirectExchange>
public static final ExchangeType<DirectExchange> TYPE = new DirectExchangeType();
- public DirectExchange(final Map<String, Object> attributes, final VirtualHostImpl vhost) throws UnknownExchangeException
+ public DirectExchange(final Map<String, Object> attributes, final VirtualHostImpl vhost)
{
super(attributes, vhost);
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchangeType.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchangeType.java
index 887a5ec28e..547261f5aa 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchangeType.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DirectExchangeType.java
@@ -24,7 +24,6 @@ import java.util.Map;
import org.apache.qpid.exchange.ExchangeDefaults;
import org.apache.qpid.server.plugin.ExchangeType;
-import org.apache.qpid.server.virtualhost.UnknownExchangeException;
import org.apache.qpid.server.virtualhost.VirtualHostImpl;
public class DirectExchangeType implements ExchangeType<DirectExchange>
@@ -37,7 +36,7 @@ public class DirectExchangeType implements ExchangeType<DirectExchange>
@Override
public DirectExchange newInstance(final VirtualHostImpl virtualHost,
- final Map<String, Object> attributes) throws UnknownExchangeException
+ final Map<String, Object> attributes)
{
return new DirectExchange(attributes, virtualHost);
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java
index fd6eb8e410..b9461df0be 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java
@@ -40,7 +40,6 @@ import org.apache.qpid.server.model.ManagedObject;
import org.apache.qpid.server.plugin.ExchangeType;
import org.apache.qpid.server.queue.AMQQueue;
import org.apache.qpid.server.queue.BaseQueue;
-import org.apache.qpid.server.virtualhost.UnknownExchangeException;
import org.apache.qpid.server.virtualhost.VirtualHostImpl;
@ManagedObject( category = false, type = "fanout" )
@@ -68,7 +67,7 @@ public class FanoutExchange extends AbstractExchange<FanoutExchange>
public static final ExchangeType<FanoutExchange> TYPE = new FanoutExchangeType();
- public FanoutExchange(final Map<String, Object> attributes, final VirtualHostImpl vhost) throws UnknownExchangeException
+ public FanoutExchange(final Map<String, Object> attributes, final VirtualHostImpl vhost)
{
super(attributes, vhost);
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchangeType.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchangeType.java
index d513c25e9f..af64c74473 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchangeType.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/FanoutExchangeType.java
@@ -24,7 +24,6 @@ import java.util.Map;
import org.apache.qpid.exchange.ExchangeDefaults;
import org.apache.qpid.server.plugin.ExchangeType;
-import org.apache.qpid.server.virtualhost.UnknownExchangeException;
import org.apache.qpid.server.virtualhost.VirtualHostImpl;
public class FanoutExchangeType implements ExchangeType<FanoutExchange>
@@ -37,7 +36,6 @@ public class FanoutExchangeType implements ExchangeType<FanoutExchange>
@Override
public FanoutExchange newInstance(final VirtualHostImpl virtualHost, final Map<String, Object> attributes)
- throws UnknownExchangeException
{
return new FanoutExchange(attributes, virtualHost);
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java
index 45c484690e..e2146b3111 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java
@@ -38,7 +38,6 @@ import org.apache.qpid.server.model.ManagedObject;
import org.apache.qpid.server.plugin.ExchangeType;
import org.apache.qpid.server.queue.AMQQueue;
import org.apache.qpid.server.queue.BaseQueue;
-import org.apache.qpid.server.virtualhost.UnknownExchangeException;
import org.apache.qpid.server.virtualhost.VirtualHostImpl;
/**
@@ -83,7 +82,7 @@ public class HeadersExchange extends AbstractExchange<HeadersExchange>
public static final ExchangeType<HeadersExchange> TYPE = new HeadersExchangeType();
- public HeadersExchange(final Map<String, Object> attributes, final VirtualHostImpl vhost) throws UnknownExchangeException
+ public HeadersExchange(final Map<String, Object> attributes, final VirtualHostImpl vhost)
{
super(attributes, vhost);
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchangeType.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchangeType.java
index b401132ade..e58628ce39 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchangeType.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/HeadersExchangeType.java
@@ -24,7 +24,6 @@ import java.util.Map;
import org.apache.qpid.exchange.ExchangeDefaults;
import org.apache.qpid.server.plugin.ExchangeType;
-import org.apache.qpid.server.virtualhost.UnknownExchangeException;
import org.apache.qpid.server.virtualhost.VirtualHostImpl;
public class HeadersExchangeType implements ExchangeType<HeadersExchange>
@@ -37,7 +36,6 @@ public class HeadersExchangeType implements ExchangeType<HeadersExchange>
@Override
public HeadersExchange newInstance(final VirtualHostImpl virtualHost, final Map<String, Object> attributes)
- throws UnknownExchangeException
{
return new HeadersExchange(attributes, virtualHost);
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java
index 0c0311903b..6506bfc0a6 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java
@@ -27,7 +27,9 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+
import org.apache.log4j.Logger;
+
import org.apache.qpid.server.binding.BindingImpl;
import org.apache.qpid.server.exchange.topic.TopicExchangeResult;
import org.apache.qpid.server.exchange.topic.TopicMatcherResult;
@@ -43,7 +45,6 @@ import org.apache.qpid.server.plugin.ExchangeType;
import org.apache.qpid.server.queue.AMQQueue;
import org.apache.qpid.server.queue.BaseQueue;
import org.apache.qpid.server.util.ConnectionScopedRuntimeException;
-import org.apache.qpid.server.virtualhost.UnknownExchangeException;
import org.apache.qpid.server.virtualhost.VirtualHostImpl;
@ManagedObject( category = false, type = "topic" )
@@ -61,7 +62,7 @@ public class TopicExchange extends AbstractExchange<TopicExchange>
private final Map<BindingImpl, Map<String,Object>> _bindings = new HashMap<BindingImpl, Map<String,Object>>();
- public TopicExchange(final Map<String,Object> attributes, final VirtualHostImpl vhost) throws UnknownExchangeException
+ public TopicExchange(final Map<String,Object> attributes, final VirtualHostImpl vhost)
{
super(attributes, vhost);
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchangeType.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchangeType.java
index a7de341430..8bf0435b02 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchangeType.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/TopicExchangeType.java
@@ -24,7 +24,6 @@ import java.util.Map;
import org.apache.qpid.exchange.ExchangeDefaults;
import org.apache.qpid.server.plugin.ExchangeType;
-import org.apache.qpid.server.virtualhost.UnknownExchangeException;
import org.apache.qpid.server.virtualhost.VirtualHostImpl;
public class TopicExchangeType implements ExchangeType<TopicExchange>
@@ -37,7 +36,6 @@ public class TopicExchangeType implements ExchangeType<TopicExchange>
@Override
public TopicExchange newInstance(final VirtualHostImpl virtualHost, final Map<String, Object> attributes)
- throws UnknownExchangeException
{
return new TopicExchange(attributes, virtualHost);
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java
index da0c93c5dd..a169aed0fe 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java
@@ -690,7 +690,7 @@ abstract class AttributeValueConverter<T>
return candidate;
}
}
- throw new IllegalArgumentException("Cannot find a " + _klazz.getName() + " with id " + value);
+ throw new UnknownConfiguredObjectException(_klazz, (UUID)value);
}
else if(value instanceof String)
{
@@ -710,7 +710,7 @@ abstract class AttributeValueConverter<T>
}
catch (IllegalArgumentException e)
{
- throw new IllegalArgumentException("Cannot find a " + _klazz.getSimpleName() + " with name '" + valueStr + "'");
+ throw new UnknownConfiguredObjectException(_klazz, valueStr);
}
}
else
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/UnknownConfiguredObjectException.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/UnknownConfiguredObjectException.java
new file mode 100644
index 0000000000..f35a68a49c
--- /dev/null
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/UnknownConfiguredObjectException.java
@@ -0,0 +1,59 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.server.model;
+
+import java.util.UUID;
+
+public class UnknownConfiguredObjectException extends IllegalArgumentException
+{
+ private final Class<? extends ConfiguredObject> _category;
+ private String _name;
+ private UUID _id;
+
+ public UnknownConfiguredObjectException(final Class<? extends ConfiguredObject> category, final String name)
+ {
+ super("Could not find object of category " + category.getSimpleName() + " with name '" + name + "'");
+ _category = category;
+ _name = name;
+ }
+
+ public UnknownConfiguredObjectException(final Class<? extends ConfiguredObject> category, final UUID id)
+ {
+ super("Could not find object of category " + category.getSimpleName() + " with id " + id);
+ _category = category;
+ _id = id;
+ }
+
+ public Class<? extends ConfiguredObject> getCategory()
+ {
+ return _category;
+ }
+
+ public String getName()
+ {
+ return _name;
+ }
+
+ public UUID getId()
+ {
+ return _id;
+ }
+}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/ExchangeType.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/ExchangeType.java
index 841dc3aacb..f82aaff42b 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/ExchangeType.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/ExchangeType.java
@@ -23,14 +23,13 @@ package org.apache.qpid.server.plugin;
import java.util.Map;
import org.apache.qpid.server.exchange.ExchangeImpl;
-import org.apache.qpid.server.virtualhost.UnknownExchangeException;
import org.apache.qpid.server.virtualhost.VirtualHostImpl;
public interface ExchangeType<T extends ExchangeImpl<T>> extends Pluggable
{
public String getType();
- public T newInstance(final VirtualHostImpl virtualHost, Map<String, Object> attributes) throws UnknownExchangeException;
+ public T newInstance(final VirtualHostImpl virtualHost, Map<String, Object> attributes);
public String getDefaultExchangeName();
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
index 18f728fdf6..35d7bd4793 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
@@ -58,24 +58,7 @@ import org.apache.qpid.server.message.MessageInstance;
import org.apache.qpid.server.message.MessageNode;
import org.apache.qpid.server.message.MessageSource;
import org.apache.qpid.server.message.ServerMessage;
-import org.apache.qpid.server.model.AbstractConfiguredObject;
-import org.apache.qpid.server.model.Broker;
-import org.apache.qpid.server.model.BrokerModel;
-import org.apache.qpid.server.model.ConfiguredObject;
-import org.apache.qpid.server.model.Connection;
-import org.apache.qpid.server.model.Exchange;
-import org.apache.qpid.server.model.IntegrityViolationException;
-import org.apache.qpid.server.model.LifetimePolicy;
-import org.apache.qpid.server.model.ManagedAttributeField;
-import org.apache.qpid.server.model.Port;
-import org.apache.qpid.server.model.Protocol;
-import org.apache.qpid.server.model.Queue;
-import org.apache.qpid.server.model.State;
-import org.apache.qpid.server.model.SystemContext;
-import org.apache.qpid.server.model.UUIDGenerator;
-import org.apache.qpid.server.model.VirtualHost;
-import org.apache.qpid.server.model.VirtualHostAlias;
-import org.apache.qpid.server.model.VirtualHostNode;
+import org.apache.qpid.server.model.*;
import org.apache.qpid.server.model.adapter.ConnectionAdapter;
import org.apache.qpid.server.model.adapter.VirtualHostAliasAdapter;
import org.apache.qpid.server.plugin.MessageStoreFactory;
@@ -797,10 +780,6 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte
{
throw new UnsupportedOperationException("'" + name + "' is a reserved exchange name");
}
- catch(UnknownExchangeException e)
- {
- throw new IllegalArgumentException("Alternate Exchange with name '" + e.getExchangeName() + "' does not exist");
- }
catch(AMQUnknownExchangeType e)
{
throw new IllegalArgumentException(e);
@@ -811,7 +790,7 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte
@Override
public ExchangeImpl createExchange(Map<String,Object> attributes)
throws ExchangeExistsException, ReservedExchangeNameException,
- UnknownExchangeException, AMQUnknownExchangeType
+ AMQUnknownExchangeType
{
checkVHostStateIsActive();
ExchangeImpl child = addExchange(attributes);
@@ -822,7 +801,7 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte
private ExchangeImpl addExchange(Map<String,Object> attributes)
throws ExchangeExistsException, ReservedExchangeNameException,
- UnknownExchangeException, AMQUnknownExchangeType
+ AMQUnknownExchangeType
{
try
{
@@ -1484,15 +1463,7 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte
// We're ok if the exchange already exists
dlExchange = e.getExistingExchange();
}
- catch (ReservedExchangeNameException e)
- {
- throw new ConnectionScopedRuntimeException("Attempt to create an alternate exchange for a queue failed",e);
- }
- catch (AMQUnknownExchangeType e)
- {
- throw new ConnectionScopedRuntimeException("Attempt to create an alternate exchange for a queue failed",e);
- }
- catch (UnknownExchangeException e)
+ catch (ReservedExchangeNameException | AMQUnknownExchangeType | UnknownConfiguredObjectException e)
{
throw new ConnectionScopedRuntimeException("Attempt to create an alternate exchange for a queue failed",e);
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/UnknownExchangeException.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/UnknownExchangeException.java
deleted file mode 100644
index c34cf51955..0000000000
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/UnknownExchangeException.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *
- * 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.
- *
- */
-package org.apache.qpid.server.virtualhost;
-
-public class UnknownExchangeException extends RuntimeException
-{
- private final String _exchangeName;
-
- public UnknownExchangeException(String exchangeName)
- {
- super(exchangeName);
- _exchangeName = exchangeName;
- }
-
- public String getExchangeName()
- {
- return _exchangeName;
- }
-}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java
index 1408034e97..a29534cff7 100755
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java
@@ -67,7 +67,7 @@ public interface VirtualHostImpl< X extends VirtualHostImpl<X,Q,E>, Q extends AM
E createExchange(Map<String,Object> attributes)
throws ExchangeExistsException, ReservedExchangeNameException,
- UnknownExchangeException, AMQUnknownExchangeType;
+ AMQUnknownExchangeType;
void removeExchange(E exchange, boolean force) throws ExchangeIsAlternateException,
RequiredExchangeException;
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/FanoutExchangeTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/FanoutExchangeTest.java
index 77f594f7a1..8ccd7af799 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/FanoutExchangeTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/FanoutExchangeTest.java
@@ -48,7 +48,6 @@ import org.apache.qpid.server.model.Queue;
import org.apache.qpid.server.queue.AMQQueue;
import org.apache.qpid.server.queue.BaseQueue;
import org.apache.qpid.server.security.SecurityManager;
-import org.apache.qpid.server.virtualhost.UnknownExchangeException;
import org.apache.qpid.server.virtualhost.VirtualHostImpl;
public class FanoutExchangeTest extends TestCase
@@ -58,7 +57,7 @@ public class FanoutExchangeTest extends TestCase
private TaskExecutor _taskExecutor;
private ConfiguredObjectFactoryImpl _objectFactory;
- public void setUp() throws UnknownExchangeException
+ public void setUp()
{
Map<String,Object> attributes = new HashMap<String, Object>();
attributes.put(Exchange.ID, UUID.randomUUID());
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerFactoryTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerFactoryTest.java
index 9aed584c41..6fc28ac136 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerFactoryTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerFactoryTest.java
@@ -35,6 +35,7 @@ import org.apache.qpid.server.model.AuthenticationProvider;
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.SystemContext;
import org.apache.qpid.server.model.TrustStore;
+import org.apache.qpid.server.model.UnknownConfiguredObjectException;
import org.apache.qpid.server.util.BrokerTestHelper;
public class SimpleLDAPAuthenticationManagerFactoryTest extends TestCase
@@ -107,9 +108,10 @@ public class SimpleLDAPAuthenticationManagerFactoryTest extends TestCase
_factory.create(null, _configuration, _broker);
fail("Exception not thrown");
}
- catch(IllegalArgumentException e)
+ catch(UnknownConfiguredObjectException e)
{
- assertEquals("Cannot find a TrustStore with name 'notfound'", e.getMessage());
+ assertEquals(e.getCategory(), TrustStore.class);
+ assertEquals(e.getName(), "notfound");
}
}
diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java
index 200519a285..ff57e6a33c 100644
--- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java
+++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java
@@ -48,6 +48,7 @@ import org.apache.qpid.server.message.MessageSource;
import org.apache.qpid.server.model.ExclusivityPolicy;
import org.apache.qpid.server.model.LifetimePolicy;
import org.apache.qpid.server.model.Queue;
+import org.apache.qpid.server.model.UnknownConfiguredObjectException;
import org.apache.qpid.server.plugin.ExchangeType;
import org.apache.qpid.server.queue.AMQQueue;
import org.apache.qpid.server.queue.QueueArgumentsConverter;
@@ -72,7 +73,6 @@ import org.apache.qpid.server.virtualhost.ExchangeIsAlternateException;
import org.apache.qpid.server.virtualhost.QueueExistsException;
import org.apache.qpid.server.virtualhost.RequiredExchangeException;
import org.apache.qpid.server.virtualhost.ReservedExchangeNameException;
-import org.apache.qpid.server.virtualhost.UnknownExchangeException;
import org.apache.qpid.server.virtualhost.VirtualHostImpl;
import org.apache.qpid.transport.*;
@@ -750,10 +750,10 @@ public class ServerSessionDelegate extends SessionDelegate
exception(session, method, ExecutionErrorCode.NOT_ALLOWED, "Attempt to declare exchange: "
+ exchangeName + " which begins with reserved name or prefix.");
}
- catch(UnknownExchangeException e)
+ catch(UnknownConfiguredObjectException e)
{
exception(session, method, ExecutionErrorCode.NOT_FOUND,
- "Unknown alternate exchange " + e.getExchangeName());
+ "Unknown alternate exchange " + e.getName());
}
catch(AMQUnknownExchangeType e)
{
diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeDeclareHandler.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeDeclareHandler.java
index 3e1c2ad987..efd50e5595 100644
--- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeDeclareHandler.java
+++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeDeclareHandler.java
@@ -20,32 +20,32 @@
*/
package org.apache.qpid.server.protocol.v0_8.handler;
+import java.security.AccessControlException;
+import java.util.HashMap;
+import java.util.Map;
+
import org.apache.log4j.Logger;
import org.apache.qpid.AMQConnectionException;
import org.apache.qpid.AMQException;
-import org.apache.qpid.server.exchange.AMQUnknownExchangeType;
import org.apache.qpid.framing.AMQMethodBody;
import org.apache.qpid.framing.AMQShortString;
import org.apache.qpid.framing.ExchangeDeclareBody;
import org.apache.qpid.framing.MethodRegistry;
import org.apache.qpid.protocol.AMQConstant;
+import org.apache.qpid.server.exchange.AMQUnknownExchangeType;
import org.apache.qpid.server.exchange.DirectExchange;
import org.apache.qpid.server.exchange.ExchangeImpl;
import org.apache.qpid.server.model.LifetimePolicy;
+import org.apache.qpid.server.model.UnknownConfiguredObjectException;
import org.apache.qpid.server.protocol.v0_8.AMQChannel;
import org.apache.qpid.server.protocol.v0_8.AMQProtocolSession;
import org.apache.qpid.server.protocol.v0_8.state.AMQStateManager;
import org.apache.qpid.server.protocol.v0_8.state.StateAwareMethodListener;
import org.apache.qpid.server.virtualhost.ExchangeExistsException;
import org.apache.qpid.server.virtualhost.ReservedExchangeNameException;
-import org.apache.qpid.server.virtualhost.UnknownExchangeException;
import org.apache.qpid.server.virtualhost.VirtualHostImpl;
-import java.security.AccessControlException;
-import java.util.HashMap;
-import java.util.Map;
-
public class ExchangeDeclareHandler implements StateAwareMethodListener<ExchangeDeclareBody>
{
private static final Logger _logger = Logger.getLogger(ExchangeDeclareHandler.class);
@@ -155,7 +155,7 @@ public class ExchangeDeclareHandler implements StateAwareMethodListener<Exchange
{
throw body.getConnectionException(AMQConstant.ACCESS_REFUSED, e.getMessage());
}
- catch (UnknownExchangeException e)
+ catch (UnknownConfiguredObjectException e)
{
// note - since 0-8/9/9-1 can't set the alt. exchange this exception should never occur
throw body.getConnectionException(AMQConstant.NOT_FOUND, "Unknown alternate exchange",e);
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
index 29c2a3b279..f738a9e8aa 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
@@ -20,6 +20,28 @@
*/
package org.apache.qpid.client;
+import java.io.Serializable;
+import java.net.URISyntaxException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+import javax.jms.*;
+import javax.jms.IllegalStateException;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -34,8 +56,8 @@ import org.apache.qpid.client.failover.FailoverNoopSupport;
import org.apache.qpid.client.failover.FailoverProtectedOperation;
import org.apache.qpid.client.failover.FailoverRetrySupport;
import org.apache.qpid.client.message.AMQMessageDelegateFactory;
-import org.apache.qpid.client.message.AMQPEncodedMapMessage;
import org.apache.qpid.client.message.AMQPEncodedListMessage;
+import org.apache.qpid.client.message.AMQPEncodedMapMessage;
import org.apache.qpid.client.message.AbstractJMSMessage;
import org.apache.qpid.client.message.CloseConsumerMessage;
import org.apache.qpid.client.message.JMSBytesMessage;
@@ -50,35 +72,13 @@ import org.apache.qpid.common.AMQPFilterTypes;
import org.apache.qpid.configuration.ClientProperties;
import org.apache.qpid.framing.AMQShortString;
import org.apache.qpid.framing.FieldTable;
-import org.apache.qpid.jms.Session;
import org.apache.qpid.jms.ListMessage;
+import org.apache.qpid.jms.Session;
import org.apache.qpid.protocol.AMQConstant;
import org.apache.qpid.thread.Threading;
import org.apache.qpid.transport.SessionException;
import org.apache.qpid.transport.TransportException;
-import javax.jms.*;
-import javax.jms.IllegalStateException;
-
-import java.io.Serializable;
-import java.net.URISyntaxException;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
/**
* <p/><table id="crc"><caption>CRC Card</caption>
* <tr><th> Responsibilities <th> Collaborations
@@ -3491,15 +3491,18 @@ public abstract class AMQSession<C extends BasicMessageConsumer, P extends Basic
JMSException toJMSException(String message, AMQException e)
{
JMSException ex;
- if (e.getErrorCode() == AMQConstant.ACCESS_REFUSED)
+
+ AMQConstant errorCode = e.getErrorCode();
+ if (errorCode == AMQConstant.ACCESS_REFUSED)
{
- ex = new JMSSecurityException(message);
+ ex = new JMSSecurityException(message, String.valueOf(errorCode.getCode()));
}
else
{
- ex = new JMSException(message);
+ ex = new JMSException(message, errorCode == null ? null : String.valueOf(errorCode.getCode()));
}
ex.initCause(e);
+
ex.setLinkedException(e);
return ex;
}
diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java
index 3436b06db0..88f8142f94 100644
--- a/qpid/java/systests/src/main/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java
+++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java
@@ -20,7 +20,6 @@
*/
package org.apache.qpid.test.client.destination;
-import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
@@ -48,6 +47,7 @@ import javax.naming.InitialContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+
import org.apache.qpid.client.AMQAnyDestination;
import org.apache.qpid.client.AMQConnection;
import org.apache.qpid.client.AMQDestination;
@@ -1226,6 +1226,23 @@ public class AddressBasedDestinationTest extends QpidBrokerTestCase
cons.close();
}
+ public void testUnknownAltExchange() throws Exception
+ {
+ Session session = _connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ String altQueueAddr = "ADDR:my-alt-queue;{create: always, delete: receiver,node:{x-bindings:[{exchange:'doesnotexist'}] }}";
+ try
+ {
+ session.createConsumer(session.createQueue(altQueueAddr));
+ fail("Attempt to create a queue with an unknown alternate exchange should fail");
+ }
+ catch(JMSException e)
+ {
+ assertEquals("Failure code is not as expected", "404", e.getErrorCode());
+ }
+
+
+ }
+
public void testQueueBrowserWithSelectorAutoAcknowledgement() throws Exception
{
assertQueueBrowserWithSelector(Session.AUTO_ACKNOWLEDGE);