diff options
| author | Robert Godfrey <rgodfrey@apache.org> | 2014-04-25 00:01:33 +0000 |
|---|---|---|
| committer | Robert Godfrey <rgodfrey@apache.org> | 2014-04-25 00:01:33 +0000 |
| commit | 4eddea8954ba9342ab2bc35e495baa673a6015db (patch) | |
| tree | 32c82a8c8529db6c3f01b5123abce4e35b961c04 /qpid/java | |
| parent | 6c082f6883922e98e627394c3fa951680a7729b2 (diff) | |
| download | qpid-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')
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); |
