/// <summary> /// Convert message off the wire from byte[] into a concrete implementation of IIntegrationMessage /// delegates to custom extractors and defaults to Json deserialization /// </summary> private IIntegrationMessage _extractMessage(byte[] messageData, MessageTypeProperties props) { IIntegrationMessage message; if (props.HasCustomExtractor) { IMessageExtractor extractor = null; if (_messageExtractorCache.ContainsKey(props.MessageTypeIdentifier)) { extractor = _messageExtractorCache[props.MessageTypeIdentifier]; } else { extractor = (IMessageExtractor)Activator.CreateInstance(props.Type, true); _messageExtractorCache.Add(props.MessageTypeIdentifier, extractor); } message = extractor.Extract(messageData); } else { //by default the message is json and will be deserialized to the type with a matching MessageTypeIdentifier property:"MessageType" var json = Encoding.UTF8.GetString(messageData); message = (IIntegrationMessage)JsonConvert.DeserializeObject(json, props.Type, _serializerSettings); } return(message); }
public MessageContext(MessageMetaData meta, IEndpoint endpoint, MessagingService messagingService, MessageTypeProperties props = null) { MetaData = meta; Endpoint = endpoint; MessagingService = messagingService; Props = props; }
public IntegrationMessageFilterContext(IIntegrationMessage message, MessageMetaData meta, IEndpoint endpoint, FilterDirection direction, MessageTypeProperties props) { Message = message; MessageMetaData = meta; Endpoint = endpoint; Direction = direction; Props = props; }
public static void AddMessageType(MessageTypeProperties props) { var handlingSaga = _sagaTypePropMap.SingleOrDefault(x => x.Value.MessageTypes.Contains(props.Type)); if (handlingSaga.Key != null) { props.SagaType = handlingSaga.Key; } _messageTypeIdentifierPropMap.TryAdd(props.MessageTypeIdentifier, props); _messageTypePropMap.TryAdd(props.Type, props); }
public static MessageTypeProperties AddMessageType(Type type) { if (_messageTypePropMap.ContainsKey(type)) { throw new InvalidOperationException($"Duplicate Message Type registered. MessageType: {type}"); } var message = (IIntegrationMessage)Activator.CreateInstance(type, true); var props = new MessageTypeProperties(type, message.MessageType, _extractorInterface.IsAssignableFrom(type)); AddMessageType(props); return(props); }