Non-existent properties handling in .NET
The handling of non-existent properties in the XMS .NET is broadly consistent with the JMS specification, and also with the C and C++ implementations of XMS.
In JMS, accessing a non-existent property can result in a Java system exception when a method tries to convert the non-existent (null) value to the required type. If a property does not exist the following exceptions occur:
- getStringProperty and getObjectProperty return null
- getBooleanProperty returns false because Boolean.valueOf(null) returns false
- getIntProperty etc.throw java.lang.NumberFormatException because Integer.valueOf(null) throws the exception
If a property does not exist in XMS .NET the following exceptions occur:
- GetStringProperty and GetObjectProperty (and GetBytesProperty) return null (which is the same as Java)
- GetBooleanProperty throws System.NullReferenceException
- GetIntProperty etc. throws System.NullReferenceException
This implementation is different from Java, but
it is broadly consistent with the JMS specification, and with the XMS C and C++ interfaces. Like the Java implementation, XMS
.NET propagates any exceptions from the
System.Convert call to the caller. Unlike Java
however, XMS explicitly throws
NullReferenceExceptions rather than just using the native behavior of the .NET framework through passing null to system conversion
routines. If the application sets a property to a String like abc
and calls GetIntProperty,
the System.FormatException thrown by Convert.ToInt32("abc") is propagated to the caller, which is
consistent with Java. MessageFormatException is
thrown only if the types used for setProperty and getProperty are incompatible. This behavior is
also consistent with Java.