示例#1
0
 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");
         }
 }
示例#2
0
        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);
                }
        }