summaryrefslogtreecommitdiff
path: root/java/client/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'java/client/src/main')
-rw-r--r--java/client/src/main/java/org/apache/qpid/client/AMQAnyDestination.java10
-rw-r--r--java/client/src/main/java/org/apache/qpid/client/AMQDestination.java60
-rw-r--r--java/client/src/main/java/org/apache/qpid/client/AMQSession.java77
3 files changed, 100 insertions, 47 deletions
diff --git a/java/client/src/main/java/org/apache/qpid/client/AMQAnyDestination.java b/java/client/src/main/java/org/apache/qpid/client/AMQAnyDestination.java
index b6e433f532..a201f7d61e 100644
--- a/java/client/src/main/java/org/apache/qpid/client/AMQAnyDestination.java
+++ b/java/client/src/main/java/org/apache/qpid/client/AMQAnyDestination.java
@@ -22,6 +22,10 @@ package org.apache.qpid.client;
import java.net.URISyntaxException;
+import javax.jms.JMSException;
+import javax.jms.Queue;
+import javax.jms.Topic;
+
import org.apache.qpid.framing.AMQShortString;
import org.apache.qpid.messaging.Address;
import org.apache.qpid.url.BindingURL;
@@ -35,7 +39,7 @@ import org.apache.qpid.url.BindingURL;
* The abstract class AMQDestination has most of the functionality
* to support any destination defined in AMQP 0-10 spec.
*/
-public class AMQAnyDestination extends AMQDestination
+public class AMQAnyDestination extends AMQDestination implements Queue, Topic
{
public AMQAnyDestination(BindingURL binding)
{
@@ -66,4 +70,8 @@ public class AMQAnyDestination extends AMQDestination
return getAMQQueueName() == null;
}
+ public String getTopicName() throws JMSException
+ {
+ return super.getRoutingKey().toString();
+ }
}
diff --git a/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java b/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java
index 55812f8e01..4e8c5836e0 100644
--- a/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java
+++ b/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java
@@ -151,6 +151,11 @@ public abstract class AMQDestination implements Destination, Referenceable
}
+ public static DestSyntax getDefaultDestSyntax()
+ {
+ return defaultDestSyntax;
+ }
+
protected AMQDestination(Address address) throws Exception
{
this._address = address;
@@ -159,21 +164,41 @@ public abstract class AMQDestination implements Destination, Referenceable
_logger.debug("Based on " + address + " the selected destination syntax is " + _destSyntax);
}
- protected AMQDestination(String str) throws URISyntaxException
+ public static DestSyntax getDestType(String str)
{
if (str.startsWith("BURL:") ||
- (!str.startsWith("ADDR:") && defaultDestSyntax == DestSyntax.BURL))
+ (!str.startsWith("ADDR:") && defaultDestSyntax == DestSyntax.BURL))
+ {
+ return DestSyntax.BURL;
+ }
+ else
+ {
+ return DestSyntax.ADDR;
+ }
+ }
+
+ public static String stripSyntaxPrefix(String str)
+ {
+ if (str.startsWith("BURL:") || str.startsWith("ADDR:"))
+ {
+ return str.substring(5,str.length());
+ }
+ else
+ {
+ return str;
+ }
+ }
+
+ protected AMQDestination(String str) throws URISyntaxException
+ {
+ _destSyntax = getDestType(str);
+ str = stripSyntaxPrefix(str);
+ if (_destSyntax == DestSyntax.BURL)
{
- if (str.startsWith("BURL:"))
- {
- str = str.substring(5,str.length());
- }
- _destSyntax = DestSyntax.BURL;
getInfoFromBindingURL(new AMQBindingURL(str));
}
else
{
- _destSyntax = DestSyntax.ADDR;
this._address = createAddressFromString(str);
try
{
@@ -654,13 +679,10 @@ public abstract class AMQDestination implements Destination, Referenceable
public static Destination createDestination(String str) throws Exception
{
- if (str.startsWith("BURL:") ||
- (!str.startsWith("ADDR:") && defaultDestSyntax == DestSyntax.BURL))
+ DestSyntax syntax = getDestType(str);
+ str = stripSyntaxPrefix(str);
+ if (syntax == DestSyntax.BURL)
{
- if (str.startsWith("BURL:"))
- {
- str = str.substring(5,str.length());
- }
return createDestination(new AMQBindingURL(str));
}
else
@@ -738,6 +760,10 @@ public abstract class AMQDestination implements Destination, Referenceable
public AddressOption getCreate() {
return _create;
}
+
+ public void setCreate(AddressOption option) {
+ _create = option;
+ }
public AddressOption getAssert() {
return _assert;
@@ -794,11 +820,7 @@ public abstract class AMQDestination implements Destination, Referenceable
private static Address createAddressFromString(String str)
{
- if (str.startsWith("ADDR:"))
- {
- str = str.substring(5,str.length());
- }
- return Address.parse(str);
+ return Address.parse(str);
}
private void getInfoFromAddress() throws Exception
diff --git a/java/client/src/main/java/org/apache/qpid/client/AMQSession.java b/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
index 10ee8a8a0d..55b56444de 100644
--- a/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
+++ b/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
@@ -1081,26 +1081,38 @@ public abstract class AMQSession<C extends BasicMessageConsumer, P extends Basic
public Queue createQueue(String queueName) throws JMSException
{
checkNotClosed();
-
- if (queueName.indexOf('/') == -1)
- {
- return new AMQQueue(getDefaultQueueExchangeName(), new AMQShortString(queueName));
- }
- else
+ try
{
- try
+ if (queueName.indexOf('/') == -1 && queueName.indexOf(';') == -1)
{
- return new AMQQueue(queueName);
+ DestSyntax syntax = AMQDestination.getDestType(queueName);
+ if (syntax == AMQDestination.DestSyntax.BURL)
+ {
+ // For testing we may want to use the prefix
+ return new AMQQueue(getDefaultQueueExchangeName(),
+ new AMQShortString(AMQDestination.stripSyntaxPrefix(queueName)));
+ }
+ else
+ {
+ AMQQueue queue = new AMQQueue(queueName);
+ queue.setCreate(AddressOption.ALWAYS);
+ return queue;
+
+ }
}
- catch (URISyntaxException urlse)
+ else
{
- _logger.error("", urlse);
- JMSException jmse = new JMSException(urlse.getReason());
- jmse.setLinkedException(urlse);
- jmse.initCause(urlse);
- throw jmse;
+ return new AMQQueue(queueName);
}
}
+ catch (URISyntaxException urlse)
+ {
+ _logger.error("", urlse);
+ JMSException jmse = new JMSException(urlse.getReason());
+ jmse.setLinkedException(urlse);
+ jmse.initCause(urlse);
+ throw jmse;
+ }
}
@@ -1352,24 +1364,35 @@ public abstract class AMQSession<C extends BasicMessageConsumer, P extends Basic
public Topic createTopic(String topicName) throws JMSException
{
checkNotClosed();
-
- if (topicName.indexOf('/') == -1)
- {
- return new AMQTopic(getDefaultTopicExchangeName(), new AMQShortString(topicName));
- }
- else
+ try
{
- try
+ if (topicName.indexOf('/') == -1 && topicName.indexOf(';') == -1)
{
- return new AMQTopic(topicName);
+ DestSyntax syntax = AMQDestination.getDestType(topicName);
+ // for testing we may want to use the prefix to indicate our choice.
+ topicName = AMQDestination.stripSyntaxPrefix(topicName);
+ if (syntax == AMQDestination.DestSyntax.BURL)
+ {
+ return new AMQTopic(getDefaultTopicExchangeName(), new AMQShortString(topicName));
+ }
+ else
+ {
+ return new AMQTopic("ADDR:" + getDefaultTopicExchangeName() + "/" + topicName);
+ }
}
- catch (URISyntaxException urlse)
+ else
{
- JMSException jmse = new JMSException(urlse.getReason());
- jmse.setLinkedException(urlse);
- jmse.initCause(urlse);
- throw jmse;
+ return new AMQTopic(topicName);
}
+
+ }
+ catch (URISyntaxException urlse)
+ {
+ _logger.error("", urlse);
+ JMSException jmse = new JMSException(urlse.getReason());
+ jmse.setLinkedException(urlse);
+ jmse.initCause(urlse);
+ throw jmse;
}
}