private Object deserializePayload(byte[] bytes, MimeType contentType) {
		if (TEXT_PLAIN.equals(contentType)) {
			try {
				return new String(bytes, "UTF-8");
			}
			catch (UnsupportedEncodingException e) {
				throw new SerializationException("unable to deserialize [java.lang.String]. Encoding not supported.", e);
			}
		}
		else {
			String className = JavaClassMimeTypeConversion.classNameFromMimeType(contentType);
			try {
				// Cache types to avoid unnecessary ClassUtils.forName calls.
				Class<?> targetType = payloadTypeCache.get(className);
				if (targetType == null) {
					targetType = ClassUtils.forName(className, null);
					payloadTypeCache.put(className, targetType);
				}
				return codec.decode(bytes, targetType);
			} catch (ClassNotFoundException e) {
				throw new SerializationException("unable to deserialize [" + className + "]. Class not found.", e);//NOSONAR
			} catch (IOException e) {
				throw new SerializationException("unable to deserialize [" + className + "]", e);
			}
		}
	}
Create a producer for the named channel and bind it to the bus. Synchronized to avoid creating multiple
instances.
@param name The name.
@param channelName The name of the channel to be created, and registered as bean.
@param properties The properties.
@return The channel.
spring-xd-messagebus-spi/src/main/java/org/springframework/xd/dirt/integration/bus/MessageBusSupport.java