diff options
Diffstat (limited to 'java')
| -rw-r--r-- | java/client/src/test/java/org/apache/qpid/test/unit/basic/PropertyValueTest.java | 26 | ||||
| -rw-r--r-- | java/common/src/main/java/org/apache/qpid/framing/FieldTable.java | 10 |
2 files changed, 35 insertions, 1 deletions
diff --git a/java/client/src/test/java/org/apache/qpid/test/unit/basic/PropertyValueTest.java b/java/client/src/test/java/org/apache/qpid/test/unit/basic/PropertyValueTest.java index 4a3a49215e..90784b0772 100644 --- a/java/client/src/test/java/org/apache/qpid/test/unit/basic/PropertyValueTest.java +++ b/java/client/src/test/java/org/apache/qpid/test/unit/basic/PropertyValueTest.java @@ -194,6 +194,30 @@ public class PropertyValueTest extends TestCase implements MessageListener BigDecimal bd = new BigDecimal(Integer.MAX_VALUE); ((AMQMessage) m).setDecimalProperty(new AMQShortString("decimal"), bd.setScale(Byte.MAX_VALUE)); + + bd = new BigDecimal((long) Integer.MAX_VALUE + 1L); + + try + { + ((AMQMessage) m).setDecimalProperty(new AMQShortString("decimal-bad-value"), bd.setScale(Byte.MAX_VALUE)); + fail("UnsupportedOperationException should be thrown as value can't be correctly transmitted"); + } + catch (UnsupportedOperationException uoe) + { + // normal path. + } + + + try + { + ((AMQMessage) m).setDecimalProperty(new AMQShortString("decimal-bad-scale"), bd.setScale(Byte.MAX_VALUE + 1)); + fail("UnsupportedOperationException should be thrown as scale can't be correctly transmitted"); + } + catch (UnsupportedOperationException uoe) + { + // normal path. + } + //Void ((AMQMessage) m).setVoidProperty(new AMQShortString("void")); @@ -254,7 +278,7 @@ public class PropertyValueTest extends TestCase implements MessageListener "Test", m.getStringProperty("String")); // AMQP Tests Specific values - + Assert.assertEquals("Check Timestamp properties are correctly transported", m.getStringProperty("time-str"), ((AMQMessage) m).getTimestampProperty(new AMQShortString("time")).toString()); diff --git a/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java b/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java index 5597919024..631a3ae149 100644 --- a/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java +++ b/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java @@ -552,6 +552,16 @@ public class FieldTable public Object setDecimal(AMQShortString string, BigDecimal decimal) { + if (decimal.longValue() > Integer.MAX_VALUE) + { + throw new UnsupportedOperationException("AMQP doesnot support decimals larger than " + Integer.MAX_VALUE); + } + + if (decimal.scale() > Byte.MAX_VALUE) + { + throw new UnsupportedOperationException("AMQP doesnot support decimal scales larger than " + Byte.MAX_VALUE); + } + return setProperty(string, AMQType.DECIMAL.asTypedValue(decimal)); } |
