You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by an...@apache.org on 2017/09/08 11:45:28 UTC
[3/3] activemq-artemis git commit: ARTEMIS-1392 Fix NPE when FQQN
queue does not exist during multicast subscribe
ARTEMIS-1392 Fix NPE when FQQN queue does not exist during multicast subscribe
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/32ac370e
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/32ac370e
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/32ac370e
Branch: refs/heads/master
Commit: 32ac370edce4b5232c8d0e3aa7c9df2fd8795766
Parents: d414a19
Author: Martyn Taylor <mt...@redhat.com>
Authored: Wed Sep 6 13:01:42 2017 +0100
Committer: Andy Taylor <an...@gmail.com>
Committed: Fri Sep 8 12:41:36 2017 +0100
----------------------------------------------------------------------
.../amqp/proton/ProtonServerSenderContext.java | 12 +++++-----
.../amqp/AmqpFullyQualifiedNameTest.java | 23 +++++++++++++++++++-
2 files changed, 29 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/32ac370e/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContext.java
----------------------------------------------------------------------
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContext.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContext.java
index 50d2ef4..d2a097c 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContext.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContext.java
@@ -22,6 +22,8 @@ import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.PooledByteBufAllocator;
import org.apache.activemq.artemis.api.core.ActiveMQExceptionType;
import org.apache.activemq.artemis.api.core.ActiveMQQueueExistsException;
import org.apache.activemq.artemis.api.core.ActiveMQSecurityException;
@@ -73,9 +75,6 @@ import org.apache.qpid.proton.engine.Link;
import org.apache.qpid.proton.engine.Sender;
import org.jboss.logging.Logger;
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.PooledByteBufAllocator;
-
/**
* TODO: Merge {@link ProtonServerSenderContext} and {@link org.apache.activemq.artemis.protocol.amqp.client.ProtonClientSenderContext} once we support 'global' link names. The split is a workaround for outgoing links
*/
@@ -334,8 +333,11 @@ public class ProtonServerSenderContext extends ProtonInitializable implements Pr
}
if (queueNameToUse != null) {
- SimpleString matchingAnycastQueue = sessionSPI.getMatchingQueue(addressToUse, queueNameToUse, RoutingType.MULTICAST);
- queue = matchingAnycastQueue.toString();
+ SimpleString matchingQueue = sessionSPI.getMatchingQueue(addressToUse, queueNameToUse, RoutingType.MULTICAST);
+ if (matchingQueue == null) {
+ throw new ActiveMQAMQPNotFoundException("Queue: '" + queueNameToUse + "' does not exist");
+ }
+ queue = matchingQueue.toString();
}
//if the address specifies a broker configured queue then we always use this, treat it as a queue
if (queue != null) {
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/32ac370e/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpFullyQualifiedNameTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpFullyQualifiedNameTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpFullyQualifiedNameTest.java
index 65b0f7f..eaca868 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpFullyQualifiedNameTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpFullyQualifiedNameTest.java
@@ -68,6 +68,27 @@ public class AmqpFullyQualifiedNameTest extends JMSClientTestSupport {
server.getConfiguration().addAcceptorConfiguration(new TransportConfiguration(NETTY_ACCEPTOR_FACTORY, new HashMap<String, Object>(), "netty", new HashMap<String, Object>()));
}
+ @Test
+ public void testFQQNTopicWhenQueueDoesNotExist() throws Exception {
+ Exception e = null;
+ String queueName = "testQueue";
+
+ Connection connection = createConnection(false);
+ try {
+ connection.setClientID("FQQNconn");
+ connection.start();
+ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ Topic topic = session.createTopic(multicastAddress.toString() + "::" + queueName);
+ session.createConsumer(topic);
+ } catch (InvalidDestinationException ide) {
+ e = ide;
+ } finally {
+ connection.close();
+ }
+ assertNotNull(e);
+ assertTrue(e.getMessage().contains("Queue: '" + queueName + "' does not exist"));
+ }
+
@Test(timeout = 60000)
//there isn't much use of FQQN for topics
//however we can test query functionality
@@ -78,7 +99,7 @@ public class AmqpFullyQualifiedNameTest extends JMSClientTestSupport {
connection.setClientID("FQQNconn");
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
- Topic topic = session.createTopic(multicastAddress.toString());
+ Topic topic = session.createTopic(multicastAddress.toString() + "::someaddress");
MessageConsumer consumer1 = session.createConsumer(topic);
MessageConsumer consumer2 = session.createConsumer(topic);