summaryrefslogtreecommitdiff
path: root/qpid/java/client
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/client')
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java15
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java2
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_8.java2
3 files changed, 15 insertions, 4 deletions
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 3529cfa6ad..a40295a9b7 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
@@ -944,7 +944,7 @@ public abstract class AMQSession<C extends BasicMessageConsumer, P extends Basic
throws JMSException
{
checkNotClosed();
- checkValidTopic(topic);
+ checkValidTopic(topic, true);
if (_subscriptions.containsKey(name))
{
_subscriptions.get(name).close();
@@ -2063,7 +2063,7 @@ public abstract class AMQSession<C extends BasicMessageConsumer, P extends Basic
/*
* I could have combined the last 3 methods, but this way it improves readability
*/
- protected AMQTopic checkValidTopic(Topic topic) throws JMSException
+ protected AMQTopic checkValidTopic(Topic topic, boolean durable) throws JMSException
{
if (topic == null)
{
@@ -2076,6 +2076,12 @@ public abstract class AMQSession<C extends BasicMessageConsumer, P extends Basic
"Cannot create a subscription on a temporary topic created in another session");
}
+ if ((topic instanceof TemporaryDestination) && durable)
+ {
+ throw new javax.jms.InvalidDestinationException
+ ("Cannot create a durable subscription with a temporary topic: " + topic);
+ }
+
if (!(topic instanceof AMQTopic))
{
throw new javax.jms.InvalidDestinationException(
@@ -2086,6 +2092,11 @@ public abstract class AMQSession<C extends BasicMessageConsumer, P extends Basic
return (AMQTopic) topic;
}
+ protected AMQTopic checkValidTopic(Topic topic) throws JMSException
+ {
+ return checkValidTopic(topic, false);
+ }
+
/**
* Called to close message consumers cleanly. This may or may <b>not</b> be as a result of an error.
*
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
index 1515a07507..7ce51c8918 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
@@ -788,7 +788,7 @@ public class AMQSession_0_10 extends AMQSession<BasicMessageConsumer_0_10, Basic
{
checkNotClosed();
- AMQTopic origTopic=checkValidTopic(topic);
+ AMQTopic origTopic=checkValidTopic(topic, true);
AMQTopic dest=AMQTopic.createDurable010Topic(origTopic, name, _connection);
TopicSubscriberAdaptor<BasicMessageConsumer_0_10> subscriber=_subscriptions.get(name);
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_8.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_8.java
index ff8631c12e..fa4e08f62b 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_8.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_8.java
@@ -427,7 +427,7 @@ public final class AMQSession_0_8 extends AMQSession<BasicMessageConsumer_0_8, B
{
checkNotClosed();
- AMQTopic origTopic = checkValidTopic(topic);
+ AMQTopic origTopic = checkValidTopic(topic, true);
AMQTopic dest = AMQTopic.createDurableTopic(origTopic, name, _connection);
TopicSubscriberAdaptor<BasicMessageConsumer_0_8> subscriber = _subscriptions.get(name);
if (subscriber != null)