/// <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); } }
/// <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); }