Index: activemq-ra/src/main/java/org/apache/activemq/ra/ActiveMQActivationSpec.java =================================================================== --- activemq-ra/src/main/java/org/apache/activemq/ra/ActiveMQActivationSpec.java (revision 399515) +++ activemq-ra/src/main/java/org/apache/activemq/ra/ActiveMQActivationSpec.java (working copy) @@ -381,6 +381,13 @@ } private boolean isValidSubscriptionDurability(List errorMessages) { + // subscriptionDurability only applies to Topics + if ( DURABLE_SUBSCRIPTION.equals(subscriptionDurability) && + getDestinationType() != null && !Topic.class.getName().equals(getDestinationType())) { + errorMessages.add("subscriptionDurability cannot be set to: "+DURABLE_SUBSCRIPTION+" when destinationType is set to "+ + Queue.class.getName()+" as it is only valid when destinationType is set to "+Topic.class.getName()+"."); + return false; + } if (NON_DURABLE_SUBSCRIPTION.equals(subscriptionDurability) || DURABLE_SUBSCRIPTION.equals(subscriptionDurability)) return true; errorMessages.add("subscriptionDurability must be set to: "+NON_DURABLE_SUBSCRIPTION+" or "+DURABLE_SUBSCRIPTION+"."); Index: activemq-ra/src/test/java/org/apache/activemq/ra/ActiveMQActivationSpecTest.java =================================================================== --- activemq-ra/src/test/java/org/apache/activemq/ra/ActiveMQActivationSpecTest.java (revision 399515) +++ activemq-ra/src/test/java/org/apache/activemq/ra/ActiveMQActivationSpecTest.java (working copy) @@ -197,14 +197,25 @@ //----------- durable subscriber tests public void testValidDurableSubscriber() { + activationSpec.setDestinationType(Topic.class.getName()); activationSpec.setSubscriptionDurability(ActiveMQActivationSpec.DURABLE_SUBSCRIPTION); activationSpec.setClientId("foobar"); activationSpec.setSubscriptionName("foobar"); assertActivationSpecValid(); assertTrue(activationSpec.isDurableSubscription()); } + + public void testDurableSubscriberWithQueueDestinationTypeFailure() { + activationSpec.setDestinationType(Queue.class.getName()); + activationSpec.setSubscriptionDurability(ActiveMQActivationSpec.DURABLE_SUBSCRIPTION); + activationSpec.setClientId("foobar"); + activationSpec.setSubscriptionName("foobar"); + PropertyDescriptor[] expected = {subscriptionDurabilityProperty}; + assertActivationSpecInvalid(expected); + } public void testDurableSubscriberNoClientIdNoSubscriptionNameFailure() { + activationSpec.setDestinationType(Topic.class.getName()); activationSpec.setSubscriptionDurability(ActiveMQActivationSpec.DURABLE_SUBSCRIPTION); activationSpec.setClientId(null); assertNull(activationSpec.getClientId()); @@ -215,6 +226,7 @@ } public void testDurableSubscriberEmptyClientIdEmptySubscriptionNameFailure() { + activationSpec.setDestinationType(Topic.class.getName()); activationSpec.setSubscriptionDurability(ActiveMQActivationSpec.DURABLE_SUBSCRIPTION); activationSpec.setClientId(EMPTY_STRING); assertNull(activationSpec.getClientId());