public void MessageReceived(IMessage message) { this.log.Trace("Message received on service requestor..."); if (message is ITextMessage) { try { this.log.Debug("Message is a textmessage with content [" + ((ITextMessage) message).Text + "]..."); EngsbMessage msg = EngsbMessage.CreateFromXml(((ITextMessage) message).Text); if (!(this.messageId == msg.CorrelationId)) { this.log.Debug("Received message with correlation id [" + msg.CorrelationId + "] which does not match messageId [" + this.messageId+ "]..."); } this.log.Debug("Message received [" + msg.ToString() + "] and lock released..."); this.response = msg; lock(this) { Monitor.PulseAll(this); } } catch (Exception ex) { throw new EngsbServiceException("Cant retrieve message...",ex); } } else { throw new EngsbServiceException("Message must be of type TextMessage"); } }
public static EngsbMessage CreateFromXml(String xml) { if(String.IsNullOrEmpty(xml)) throw new EngsbException("Cant create message from null or empty string..."); EngsbMessage msg = new EngsbMessage(); msg.log.Debug("Creating message from\n"+xml); try { XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); XmlElement header = doc.DocumentElement["header"]; XmlElement body = doc.DocumentElement["body"]; msg.MessageType = doc.DocumentElement.Name; msg.log.Debug("MessageType: "+msg.messageType); if(header != null) { msg.MessageId = new Guid(header["base:messageId"].InnerText.Trim()); msg.log.Debug("MessageId: "+msg.messageId); msg.Timestamp = DateTime.Parse(header["base:timestamp"].InnerText.Trim()); msg.log.Debug("Timestamp: "+msg.timestamp); XmlElement tmp = header["base:correlationId"]; if (tmp != null) { msg.CorrelationId = new Guid(tmp.InnerText.Trim()); msg.log.Debug("CorrelationId: "+msg.correlationId); } tmp = header["base:parentMessageId"]; if (tmp != null) { msg.ParentMessageId = new Guid((tmp.InnerText.Trim())); msg.log.Debug("ParentMessageId: " + msg.parentMessageId); } tmp = header["base:replyQueue"]; if (tmp != null) { msg.ReplyQueue = tmp.InnerText.Trim(); msg.log.Debug("replyQueue: " + msg.replyQueue); } } msg.body = body; msg.log.Debug("Body: " + msg.body); return msg; } catch (Exception e) { throw new EngsbException("parsing the xml failed", e); } }