You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2015/06/09 19:03:32 UTC
[6/6] qpid-jms git commit: QPIDJMS-48: make getPropertyNames and
propertyExists consistent with the get/set property methods validation
behaviour. Add initial base for toggle to escape the validation
QPIDJMS-48: make getPropertyNames and propertyExists consistent with the get/set property methods validation behaviour. Add initial base for toggle to escape the validation
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/dacdce01
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/dacdce01
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/dacdce01
Branch: refs/heads/master
Commit: dacdce01580485de7b0a86fe08bfd39aeae0d1b1
Parents: f1cb952
Author: Robert Gemmell <ro...@apache.org>
Authored: Tue Jun 9 12:33:27 2015 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Tue Jun 9 18:03:04 2015 +0100
----------------------------------------------------------------------
.../org/apache/qpid/jms/message/JmsMessage.java | 42 ++++-
.../apache/qpid/jms/message/JmsMessageTest.java | 176 ++++++++++++++++++-
2 files changed, 202 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/dacdce01/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsMessage.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsMessage.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsMessage.java
index 094ef4a..82f74b2 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsMessage.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsMessage.java
@@ -43,6 +43,7 @@ public class JmsMessage implements javax.jms.Message {
protected final JmsMessageFacade facade;
protected boolean readOnlyBody;
protected boolean readOnlyProperties;
+ protected boolean validatePropertyNames = true;
public JmsMessage(JmsMessageFacade facade) {
this.facade = facade;
@@ -59,6 +60,7 @@ public class JmsMessage implements javax.jms.Message {
this.readOnlyProperties = other.readOnlyBody;
this.acknowledgeCallback = other.acknowledgeCallback;
this.connection = other.connection;
+ this.validatePropertyNames = other.validatePropertyNames;
}
@Override
@@ -105,6 +107,14 @@ public class JmsMessage implements javax.jms.Message {
facade.clearBody();
}
+ public boolean isValidatePropertyNames() {
+ return validatePropertyNames;
+ }
+
+ public void setValidatePropertyNames(boolean validatePropertyNames) {
+ this.validatePropertyNames = validatePropertyNames;
+ }
+
public boolean isReadOnlyBody() {
return this.readOnlyBody;
}
@@ -243,13 +253,31 @@ public class JmsMessage implements javax.jms.Message {
@Override
public boolean propertyExists(String name) throws JMSException {
+ try {
+ checkPropertyNameIsValid(name);
+ } catch (IllegalArgumentException iae) {
+ return false;
+ }
+
return JmsMessagePropertyIntercepter.propertyExists(facade, name);
}
@Override
public Enumeration<?> getPropertyNames() throws JMSException {
Set<String> result = new HashSet<String>();
- result.addAll(JmsMessagePropertyIntercepter.getPropertyNames(facade, true));
+
+ Set<String> propertyNames = JmsMessagePropertyIntercepter.getPropertyNames(facade, true);
+ for (String name : propertyNames) {
+ try {
+ checkPropertyNameIsValid(name);
+ } catch (IllegalArgumentException iae) {
+ // Don't add the name
+ continue;
+ }
+
+ result.add(name);
+ }
+
return Collections.enumeration(result);
}
@@ -524,13 +552,11 @@ public class JmsMessage implements javax.jms.Message {
throw new IllegalArgumentException("Property name must not be the empty string");
}
- checkIdentifierFormat(propertyName);
- }
-
- private void checkIdentifierFormat(String identifier) throws IllegalArgumentException {
- checkIdentifierLetterAndDigitRequirements(identifier);
- checkIdentifierIsntNullTrueFalse(identifier);
- checkIdentifierIsntLogicOperator(identifier);
+ if (isValidatePropertyNames()) {
+ checkIdentifierLetterAndDigitRequirements(propertyName);
+ checkIdentifierIsntNullTrueFalse(propertyName);
+ checkIdentifierIsntLogicOperator(propertyName);
+ }
}
private void checkIdentifierIsntLogicOperator(String identifier) {
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/dacdce01/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java
index 82ede41..23d2b95 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java
@@ -36,6 +36,7 @@ import org.apache.qpid.jms.JmsConnection;
import org.apache.qpid.jms.JmsDestination;
import org.apache.qpid.jms.JmsTopic;
import org.apache.qpid.jms.message.facade.JmsMessageFacade;
+import org.apache.qpid.jms.message.facade.test.JmsTestMessageFacade;
import org.apache.qpid.jms.message.facade.test.JmsTestMessageFactory;
import org.junit.Before;
import org.junit.Test;
@@ -211,6 +212,8 @@ public class JmsMessageTest {
msg1.setJMSTimestamp(this.jmsTimestamp);
msg1.setReadOnlyProperties(true);
msg1.setConnection(connection);
+ boolean isValidate = !msg1.isValidatePropertyNames();
+ msg1.setValidatePropertyNames(isValidate);
JmsMessage msg2 = msg1.copy();
assertEquals(msg1.getJMSMessageID(), msg2.getJMSMessageID());
assertTrue(msg1.getJMSCorrelationID().equals(msg2.getJMSCorrelationID()));
@@ -223,6 +226,7 @@ public class JmsMessageTest {
assertEquals(msg1.getJMSPriority(), msg2.getJMSPriority());
assertEquals(msg1.getJMSTimestamp(), msg2.getJMSTimestamp());
assertEquals(msg1.getConnection(), msg2.getConnection());
+ assertEquals(msg1.isValidatePropertyNames(), msg2.isValidatePropertyNames());
LOG.info("Message is: " + msg1);
}
@@ -364,6 +368,34 @@ public class JmsMessageTest {
}
@Test
+ public void testPropertyExistsWithInvalidName() throws JMSException {
+ doPropertyExistsWithInvalidNameTestImpl(false);
+ }
+
+ private void doPropertyExistsWithInvalidNameTestImpl(boolean disableValidation) throws JMSException {
+ String invalidPropName = "my-invalid-property";
+ String valueA = "valueA";
+
+ JmsMessage msg = factory.createMessage();
+ if(disableValidation) {
+ msg.setValidatePropertyNames(false);
+ }
+
+ assertTrue(msg.getFacade() instanceof JmsTestMessageFacade);
+ JmsTestMessageFacade testFacade = (JmsTestMessageFacade) msg.getFacade();
+
+ assertFalse(testFacade.propertyExists(invalidPropName));
+ testFacade.setProperty(invalidPropName, valueA);
+ assertTrue(testFacade.propertyExists(invalidPropName));
+
+ if(!disableValidation) {
+ assertFalse("Property should be indicated to not exist", msg.propertyExists(invalidPropName));
+ } else {
+ assertTrue("Property should be indicated to exist", msg.propertyExists(invalidPropName));
+ }
+ }
+
+ @Test
public void testGetBooleanProperty() throws JMSException {
JmsMessage msg = factory.createMessage();
String name = "booleanProperty";
@@ -437,7 +469,39 @@ public class JmsMessageTest {
}
@Test
- @SuppressWarnings("rawtypes")
+ public void testGetObjectPropertyWithInvalidNameThrowsIAEByDefault() throws JMSException {
+ doGetObjectPropertyNameValidationTestImpl(false);
+ }
+
+ private void doGetObjectPropertyNameValidationTestImpl(boolean disableValidation) throws JMSException {
+ String invalidPropName1 = "my-invalid-property";
+ String valueA = "valueA";
+
+ JmsMessage msg = factory.createMessage();
+ if(disableValidation) {
+ msg.setValidatePropertyNames(false);
+ }
+
+ assertTrue(msg.getFacade() instanceof JmsTestMessageFacade);
+ JmsTestMessageFacade testFacade = (JmsTestMessageFacade) msg.getFacade();
+
+ assertNull(testFacade.getProperty(invalidPropName1));
+ testFacade.setProperty(invalidPropName1, valueA);
+ assertEquals(valueA, testFacade.getProperty(invalidPropName1));
+
+ if (!disableValidation) {
+ try {
+ msg.getObjectProperty(invalidPropName1);
+ fail("expected rejection of identifier");
+ } catch (IllegalArgumentException iae) {
+ //expected
+ }
+ } else {
+ assertEquals(valueA, msg.getObjectProperty(invalidPropName1));
+ }
+ }
+
+ @Test
public void testGetPropertyNames() throws JMSException {
JmsMessage msg = factory.createMessage();
String propName = "floatProperty";
@@ -449,7 +513,7 @@ public class JmsMessageTest {
boolean propNameFound = false;
boolean jmsxNameFound = false;
boolean headerNameFound1 = false;
- for (Enumeration iter = msg.getPropertyNames(); iter.hasMoreElements();) {
+ for (Enumeration<?> iter = msg.getPropertyNames(); iter.hasMoreElements();) {
Object element = iter.nextElement();
propNameFound |= element.equals(propName);
jmsxNameFound |= element.equals(jmsxName);
@@ -462,6 +526,60 @@ public class JmsMessageTest {
}
@Test
+ public void testGetPropertyNamesReturnsValidNamesByDefault() throws JMSException {
+ doGetPropertyNamesResultFilteringTestImpl(false);
+ }
+
+ private void doGetPropertyNamesResultFilteringTestImpl(boolean disableValidation) throws JMSException {
+ String invalidPropName1 = "my-invalid-property1";
+ String invalidPropName2 = "my.invalid.property2";
+ String validPropName = "my_valid_property";
+
+ String valueA = "valueA";
+ String valueB = "valueB";
+ String valueC = "valueC";
+
+ JmsMessage msg = factory.createMessage();
+ if(disableValidation) {
+ msg.setValidatePropertyNames(false);
+ }
+
+ assertTrue(msg.getFacade() instanceof JmsTestMessageFacade);
+ JmsTestMessageFacade testFacade = (JmsTestMessageFacade) msg.getFacade();
+
+ assertNull(testFacade.getProperty(invalidPropName1));
+ assertNull(testFacade.getProperty(invalidPropName2));
+ assertNull(testFacade.getProperty(validPropName));
+
+ testFacade.setProperty(invalidPropName1, valueA);
+ testFacade.setProperty(invalidPropName2, valueB);
+ testFacade.setProperty(validPropName, valueC);
+
+ assertEquals(valueA, testFacade.getProperty(invalidPropName1));
+ assertEquals(valueB, testFacade.getProperty(invalidPropName2));
+ assertEquals(valueC, testFacade.getProperty(validPropName));
+
+ boolean invalidPropName1Found = false;
+ boolean invalidPropName2Found = false;
+ boolean validPropNameFound = false;
+ for (Enumeration<?> iter = msg.getPropertyNames(); iter.hasMoreElements();) {
+ Object element = iter.nextElement();
+ invalidPropName1Found |= element.equals(invalidPropName1);
+ invalidPropName2Found |= element.equals(invalidPropName2);
+ validPropNameFound |= element.equals(validPropName);
+ }
+
+ if (!disableValidation) {
+ assertFalse("Invalid prop name 1 was found", invalidPropName1Found);
+ assertFalse("Invalid prop name 2 was found", invalidPropName2Found);
+ } else {
+ assertTrue("Invalid prop name 1 was not found", invalidPropName1Found);
+ assertTrue("Invalid prop name 2 was not found", invalidPropName2Found);
+ }
+ assertTrue("valid prop name was not found", validPropNameFound);
+ }
+
+ @Test
@SuppressWarnings("rawtypes")
public void testGetAllPropertyNames() throws JMSException {
JmsMessage msg = factory.createMessage();
@@ -1108,12 +1226,32 @@ public class JmsMessageTest {
*/
@Test
public void testSetPropertyWithNonLetterOrDigitCharacterThrowsIAE() throws Exception {
- String propertyName = "name-invalid";
- JmsMessage testMessage = factory.createMessage();
- try {
- testMessage.setObjectProperty(propertyName, "value");
- fail("expected rejection of identifier starting with non-letter character");
- } catch (IllegalArgumentException iae) {
+ doSetObjectPropertyWithNonLetterOrDigitCharacterTestImpl(false);
+ }
+
+ private void doSetObjectPropertyWithNonLetterOrDigitCharacterTestImpl(boolean disableValidation) throws JMSException {
+ String invalidPropertyName = "name-invalid";
+ String valueA = "value";
+
+ JmsMessage msg = factory.createMessage();
+ if(disableValidation) {
+ msg.setValidatePropertyNames(false);
+ }
+
+ assertTrue(msg.getFacade() instanceof JmsTestMessageFacade);
+ JmsTestMessageFacade testFacade = (JmsTestMessageFacade) msg.getFacade();
+
+ if (!disableValidation) {
+ try {
+ msg.setObjectProperty(invalidPropertyName, valueA);
+ fail("expected rejection of identifier starting with non-letter character");
+ } catch (IllegalArgumentException iae) {
+ // Expected
+ }
+ } else {
+ msg.setObjectProperty(invalidPropertyName, valueA);
+
+ assertEquals(valueA, testFacade.getProperty(invalidPropertyName));
}
}
@@ -1290,6 +1428,28 @@ public class JmsMessageTest {
}
}
+ //---------- Test disabling Message Properties name validation -------------//
+
+ @Test
+ public void testGetPropertyNamesReturnsAllNamesWithValidationDisabled() throws JMSException {
+ doGetPropertyNamesResultFilteringTestImpl(true);
+ }
+
+ @Test
+ public void testGetObjectPropertyWithInvalidNameAndValidationDisabled() throws JMSException {
+ doGetObjectPropertyNameValidationTestImpl(true);
+ }
+
+ @Test
+ public void testSetObjectPropertyWithInvalidNameAndValidationDisabled() throws Exception {
+ doSetObjectPropertyWithNonLetterOrDigitCharacterTestImpl(true);
+ }
+
+ @Test
+ public void testPropertyExistsWithInvalidNameAndValidationDisabled() throws JMSException {
+ doPropertyExistsWithInvalidNameTestImpl(true);
+ }
+
//--------- Test support method ------------------------------------------//
private void assertGetMissingPropertyThrowsNumberFormatException(JmsMessage testMessage, String propertyName, Class<?> clazz) throws JMSException {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org