Timothy Bish 2014-08-15 14:23:14 -04:00
parent deee040151
commit b1bc593931
2 changed files with 51 additions and 3 deletions

View File

@ -396,13 +396,25 @@ public class ActiveMQMessage extends Message implements org.apache.activemq.Mess
JMS_PROPERTY_SETERS.put("JMSDeliveryMode", new PropertySetter() { JMS_PROPERTY_SETERS.put("JMSDeliveryMode", new PropertySetter() {
@Override @Override
public void set(Message message, Object value) throws MessageFormatException { public void set(Message message, Object value) throws MessageFormatException {
Integer rc = (Integer) TypeConversionSupport.convert(value, Integer.class); Integer rc = null;
try {
rc = (Integer) TypeConversionSupport.convert(value, Integer.class);
} catch (NumberFormatException nfe) {
if (value instanceof String) {
if (((String) value).equalsIgnoreCase("PERSISTENT")) {
rc = DeliveryMode.PERSISTENT;
} else if (((String) value).equalsIgnoreCase("NON_PERSISTENT")) {
rc = DeliveryMode.NON_PERSISTENT;
} else {
throw nfe;
}
}
}
if (rc == null) { if (rc == null) {
Boolean bool = (Boolean) TypeConversionSupport.convert(value, Boolean.class); Boolean bool = (Boolean) TypeConversionSupport.convert(value, Boolean.class);
if (bool == null) { if (bool == null) {
throw new MessageFormatException("Property JMSDeliveryMode cannot be set from a " + value.getClass().getName() + "."); throw new MessageFormatException("Property JMSDeliveryMode cannot be set from a " + value.getClass().getName() + ".");
} } else {
else {
rc = bool.booleanValue() ? DeliveryMode.PERSISTENT : DeliveryMode.NON_PERSISTENT; rc = bool.booleanValue() ? DeliveryMode.PERSISTENT : DeliveryMode.NON_PERSISTENT;
} }
} }

View File

@ -20,6 +20,7 @@ import java.io.IOException;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.Map; import java.util.Map;
import javax.jms.DeliveryMode;
import javax.jms.JMSException; import javax.jms.JMSException;
import javax.jms.Message; import javax.jms.Message;
import javax.jms.MessageFormatException; import javax.jms.MessageFormatException;
@ -353,6 +354,41 @@ public class ActiveMQMessageTest extends TestCase {
assertTrue(((Float) msg.getObjectProperty(name)).floatValue() == 1.3f); assertTrue(((Float) msg.getObjectProperty(name)).floatValue() == 1.3f);
} }
public void testSetJMSDeliveryModeProperty() throws JMSException {
ActiveMQMessage message = new ActiveMQMessage();
String propertyName = "JMSDeliveryMode";
// Set as Boolean
message.setObjectProperty(propertyName, Boolean.TRUE);
assertTrue(message.isPersistent());
message.setObjectProperty(propertyName, Boolean.FALSE);
assertFalse(message.isPersistent());
message.setBooleanProperty(propertyName, true);
assertTrue(message.isPersistent());
message.setBooleanProperty(propertyName, false);
assertFalse(message.isPersistent());
// Set as Integer
message.setObjectProperty(propertyName, DeliveryMode.PERSISTENT);
assertTrue(message.isPersistent());
message.setObjectProperty(propertyName, DeliveryMode.NON_PERSISTENT);
assertFalse(message.isPersistent());
message.setIntProperty(propertyName, DeliveryMode.PERSISTENT);
assertTrue(message.isPersistent());
message.setIntProperty(propertyName, DeliveryMode.NON_PERSISTENT);
assertFalse(message.isPersistent());
// Set as String
message.setObjectProperty(propertyName, "PERSISTENT");
assertTrue(message.isPersistent());
message.setObjectProperty(propertyName, "NON_PERSISTENT");
assertFalse(message.isPersistent());
message.setStringProperty(propertyName, "PERSISTENT");
assertTrue(message.isPersistent());
message.setStringProperty(propertyName, "NON_PERSISTENT");
assertFalse(message.isPersistent());
}
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
public void testGetPropertyNames() throws JMSException { public void testGetPropertyNames() throws JMSException {
ActiveMQMessage msg = new ActiveMQMessage(); ActiveMQMessage msg = new ActiveMQMessage();