diff options
Diffstat (limited to 'java/client/src/main')
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; } } |
