/// <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));
        }
Exemple #2
0
        /// <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));
        }