in iothub/device/iot-device-client/src/main/java/com/microsoft/azure/sdk/iot/device/transport/mqtt/Mqtt.java [467:522]
private void assignPropertiesToMessage(Message message, String propertiesString) throws IllegalStateException, IllegalArgumentException
{
for (String propertyString : propertiesString.split(String.valueOf(MESSAGE_PROPERTY_SEPARATOR)))
{
if (propertyString.contains("="))
{
//Expected format is <key>=<value> where both key and value may be encoded
String key = propertyString.split("=")[PROPERTY_KEY_INDEX];
String value = propertyString.split("=")[PROPERTY_VALUE_INDEX];
try
{
key = URLDecoder.decode(key, StandardCharsets.UTF_8.name());
value = URLDecoder.decode(value, StandardCharsets.UTF_8.name());
}
catch (UnsupportedEncodingException e)
{
// should never happen, since the encoding is hard-coded.
throw new IllegalStateException(e);
}
//Some properties are reserved system properties and must be saved in the message differently
//Codes_SRS_Mqtt_34_057: [This function shall parse the messageId, correlationId, outputname, content encoding and content type from the provided property string]
switch (key)
{
case TO:
case IOTHUB_ACK:
case USER_ID:
case ABSOLUTE_EXPIRY_TIME:
//do nothing
break;
case MESSAGE_ID:
message.setMessageId(value);
break;
case CORRELATION_ID:
message.setCorrelationId(value);
break;
case OUTPUT_NAME:
message.setOutputName(value);
break;
case CONTENT_ENCODING:
message.setContentEncoding(value);
break;
case CONTENT_TYPE:
message.setContentType(value);
break;
default:
message.setProperty(key, value);
}
}
else
{
throw new IllegalArgumentException("Unexpected property string provided. Expected '=' symbol between key and value of the property in string: " + propertyString);
}
}
}