Ejemplo n.º 1
0
        /// <summary>
        /// Convert from a NMS Message to a .NET object.
        /// </summary>
        /// <param name="nmsMessage">the message to convert</param>
        /// <returns>the converted .NET object</returns>
        /// <throws>MessageConversionException in case of conversion failure </throws>
        public object FromMessage(Apache.NMS.IMessage nmsMessage)
        {
            MessageBuilder builder = null;

            if (extractNmsMessageBody)
            {
                object conversionResult = converter.FromMessage(nmsMessage);
                if (conversionResult == null)
                {
                    return(null);
                }
                if (conversionResult is Spring.Integration.Core.IMessage)
                {
                    builder = MessageBuilder.FromMessage((Spring.Integration.Core.IMessage)conversionResult);
                }
                else
                {
                    builder = MessageBuilder.WithPayload(conversionResult);
                }
            }
            else
            {
                builder = MessageBuilder.WithPayload(nmsMessage);
            }
            IDictionary <string, object> headers = headerMapper.ToHeaders(nmsMessage);

            Spring.Integration.Core.IMessage message = builder.CopyHeadersIfAbsent(headers).Build();
            if (logger.IsDebugEnabled)
            {
                logger.Debug("Converted NMS Message [" + nmsMessage + "] to integration message [" + message + "]");
            }
            return(message);
        }
        protected override void HandleRequestMessage(IMessage message, ReplyMessageHolder replyMessageHolder)
        {
            if (!initialized)
            {
                AfterPropertiesSet();
            }
            IMessage requestMessage = MessageBuilder.FromMessage(message).Build();

            try
            {
                Apache.NMS.IMessage nmsReply = SendAndReceive(requestMessage);
            }
            catch (NMSException ex)
            {
                throw new MessageHandlingException(requestMessage, ex);
            }
        }
        private Apache.NMS.IMessage SendAndReceive(IMessage requestMessage)
        {
            IConnection      connection      = CreateConnection();
            ISession         session         = null;
            IMessageProducer messageProducer = null;
            IMessageConsumer messageConsumer = null;
            IDestination     replyTo         = null;

            try
            {
                session = CreateSession(connection);
                Apache.NMS.IMessage jmsRequest = this.messageConverter.ToMessage(requestMessage, session);
                messageProducer = session.CreateProducer(this.GetRequestDestination(session));
                messageProducer.DeliveryMode = deliveryMode;
                messageProducer.Priority     = priority;
                messageProducer.TimeToLive   = timeToLive;
                replyTo = GetReplyDestination(session);
                jmsRequest.NMSReplyTo = replyTo;
                connection.Start();
                messageProducer.Send(jmsRequest);
                if (replyTo is ITemporaryQueue || replyTo is ITemporaryTopic)
                {
                    messageConsumer = session.CreateConsumer(replyTo);
                }
                else
                {
                    String messageId       = jmsRequest.NMSMessageId.Replace("'", "''");
                    String messageSelector = "NMSCorrelationID = '" + messageId + "'";
                    messageConsumer = session.CreateConsumer(replyTo, messageSelector);
                }
                return((TimeSpan.Compare(receiveTimeout, TimeSpan.FromMilliseconds(0)) == 1)
                           ? messageConsumer.Receive(receiveTimeout)
                           : messageConsumer.Receive());
            }
            finally
            {
                NmsUtils.CloseMessageProducer(messageProducer);
                NmsUtils.CloseMessageConsumer(messageConsumer);
                this.DeleteDestinationIfTemporary(session, replyTo);
                NmsUtils.CloseSession(session);

                ConnectionFactoryUtils.ReleaseConnection(connection, this.connectionFactory, true);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Converts from an integration Message to a NMS Message.
        /// </summary>
        /// <param name="objectToConvert">the object to convert</param>
        /// <param name="session">the Session to use for creating a NMS Message</param>
        /// <returns>the NMS Message</returns>
        /// <throws>NMSException if thrown by NMS API methods </throws>
        /// <throws>MessageConversionException in case of conversion failure </throws>
        public Apache.NMS.IMessage ToMessage(object objectToConvert, ISession session)
        {
            MessageHeaders headers = null;

            Apache.NMS.IMessage nmsMessage = null;
            if (objectToConvert is Spring.Integration.Core.IMessage)
            {
                headers = ((Spring.Integration.Core.IMessage)objectToConvert).Headers;
                if (extractIntegrationMessagePayload)
                {
                    objectToConvert = ((IMessage)objectToConvert).Payload;
                }
            }
            nmsMessage = converter.ToMessage(objectToConvert, session);
            if (headers != null)
            {
                headerMapper.FromHeaders(headers, nmsMessage);
            }
            if (logger.IsDebugEnabled)
            {
                logger.Debug("converted [" + objectToConvert + "] to NMS Message [" + nmsMessage + "]");
            }
            return(nmsMessage);
        }