/// <summary> /// Transform a given <see cref="ReceivedMessage"/> to a Canonical <see cref="MessagingContext"/> instance. /// </summary> /// <param name="message">Given message to transform.</param> /// <returns></returns> public async Task <MessagingContext> TransformAsync(ReceivedMessage message) { // We receive an AS4Message from Minder, we should convert it to a SubmitMessage if the action is submit. // In any other case, we should just return an MessagingContext which contains the as4Message. var transformer = new AS4MessageTransformer(); var messagingContext = await transformer.TransformAsync(message); var as4Message = messagingContext.AS4Message; if (as4Message?.FirstUserMessage?.CollaborationInfo?.Action?.Equals("Submit", StringComparison.OrdinalIgnoreCase) ?? false) { var properties = as4Message.FirstUserMessage?.MessageProperties; UserMessage transformed = TransformUserMessage(as4Message.FirstUserMessage, properties); as4Message.UpdateMessageUnit(as4Message.FirstUserMessage, transformed); messagingContext = new MessagingContext(as4Message, MessagingContextMode.Submit); AssignPModeToContext(messagingContext); return(messagingContext); } return(new MessagingContext(as4Message, MessagingContextMode.Receive)); }
/// <summary> /// Transform a given <see cref="ReceivedMessage"/> to a Canonical <see cref="MessagingContext"/> instance. /// </summary> /// <param name="message">Given message to transform.</param> /// /// <returns></returns> public async Task <MessagingContext> TransformAsync(ReceivedMessage message) { if (!(message is ReceivedEntityMessage)) { throw new NotSupportedException( $"Minder Deliver Transformer only supports transforming instances of type {typeof(ReceivedEntityMessage)}"); } var as4Transformer = new AS4MessageTransformer(); MessagingContext context = await as4Transformer.TransformAsync(message); var includeAttachments = true; CollaborationInfo collaborationInfo = context.ReceivingPMode?.MessagePackaging?.CollaborationInfo; if (collaborationInfo != null && (collaborationInfo.Action?.Equals("ACT_SIMPLE_ONEWAY_SIZE", StringComparison.OrdinalIgnoreCase) ?? false) && (collaborationInfo.Service?.Value?.Equals("SRV_SIMPLE_ONEWAY_SIZE", StringComparison.OrdinalIgnoreCase) ?? false)) { includeAttachments = false; } DeliverMessageEnvelope deliverMessage = CreateDeliverMessageEnvelope(context.AS4Message, includeAttachments); context.ModifyContext(deliverMessage); return(context); }
/// <summary> /// Transform a given <see cref="ReceivedMessage"/> to a Canonical <see cref="MessagingContext"/> instance. /// </summary> /// <param name="message">Given message to transform.</param> /// <returns></returns> public async Task <MessagingContext> TransformAsync(ReceivedMessage message) { // We receive an AS4Message from Minder, we should convert it to a SubmitMessage if the action is submit. // In any other case, we should just return a MessagingContext which contains the as4Message. var receivedStream = VirtualStream.Create(); await message.UnderlyingStream.CopyToAsync(receivedStream); receivedStream.Position = 0; var receivedMessage = new ReceivedMessage( receivedStream, message.ContentType, message.Origin, message.Length); try { var transformer = new AS4MessageTransformer(); var messagingContext = await transformer.TransformAsync(receivedMessage); if (messagingContext.AS4Message == null) { throw new InvalidMessageException( "Messaging context must contain an AS4 Message"); } if (messagingContext.AS4Message?.FirstUserMessage?.CollaborationInfo?.Action?.Equals("Submit", StringComparison.OrdinalIgnoreCase) ?? false) { var as4Message = TransformMinderSubmitToAS4Message(messagingContext.AS4Message.FirstUserMessage, messagingContext.AS4Message.Attachments); messagingContext = new MessagingContext(as4Message, MessagingContextMode.Submit); AssignPModeToContext(messagingContext); return(messagingContext); } receivedStream.Position = 0; return(new MessagingContext( messagingContext.AS4Message, receivedMessage, MessagingContextMode.Receive)); } catch (Exception ex) { var l = NLog.LogManager.GetCurrentClassLogger(); l.Error(ex.Message); l.Trace(ex.StackTrace); if (ex.InnerException != null) { l.Error(ex.InnerException.Message); } throw; } }
protected async Task <MessagingContext> Transform(ReceivedMessage message) { var transformer = new AS4MessageTransformer(); return(await transformer.TransformAsync(message)); }