protected override void HandleRequestMessage(IMessage message, ReplyMessageHolder replyHolder)
 {
     object result = SplitMessage(message);
     if(result == null) {
         return;
     }
     object correlationId = message.Headers.Id;
     if(result is ICollection) {
         ICollection items = (ICollection)result;
         int sequenceNumber = 0;
         int sequenceCount = items.Count;
         foreach(object item in items) {
             AddReply(replyHolder, item, correlationId, ++sequenceNumber, sequenceCount);
         }
     }
     else if(result.GetType().IsArray) {
         object[] items = (object[])result;
         int sequenceNumber = 0;
         int sequenceSize = items.Length;
         foreach(object item in items) {
             AddReply(replyHolder, item, correlationId, ++sequenceNumber, sequenceSize);
         }
     }
     else {
         AddReply(replyHolder, result, correlationId, 1, 1);
     }
 }
 protected override void HandleRequestMessage(IMessage message, ReplyMessageHolder replyHolder)
 {
     try
     {
         object result = null;
         if (_synchronizationContext == null)
         {
             //PayloadFilter ensures this cast will work.
             _action.Invoke((T)message.Payload);
         }
         else
         {
             _synchronizationContext.Send(state => _action.Invoke((T)message.Payload), null);
         }
         if (result != null)
         {
             replyHolder.Set(result);
         }
     }
     catch (Exception e)
     {
         if (e is SystemException)
         {
             throw;
         }
         throw new MessageHandlingException(message, "failure occurred in Service Activator '" + this + "'", e);
     }
 }
예제 #3
0
 protected override void HandleRequestMessage(IMessage message, ReplyMessageHolder replyHolder)
 {
     try
     {
         object result = null;
         if (synchronizationContext == null)
         {
             result = this.invoker.InvokeMethod(message);
         }
         else
         {
             synchronizationContext.Send(state => invoker.InvokeMethod(message), null);
         }
         if (result != null)
         {
             replyHolder.Set(result);
         }
     }
     catch (Exception e)
     {
         if (e is SystemException)
         {
             throw;
         }
         throw new MessageHandlingException(message, "failure occurred in Service Activator '" + this + "'", e);
     }
 }
        protected override void HandleMessageInternal(IMessage message)
        {
            ReplyMessageHolder replyMessageHolder = new ReplyMessageHolder();

            HandleRequestMessage(message, replyMessageHolder);
            if (replyMessageHolder.IsEmpty)
            {
                if (_requiresReply)
                {
                    throw new MessageHandlingException(message, "handler '" + this + "' requires a reply, but no reply was received");
                }
                if (logger.IsDebugEnabled)
                {
                    logger.Debug("handler '" + this + "' produced no reply for request Message: " + message);
                }
                return;
            }
            IMessageChannel replyChannel   = ResolveReplyChannel(message);
            MessageHeaders  requestHeaders = message.Headers;

            foreach (MessageBuilder builder in replyMessageHolder.Builders)
            {
                builder.CopyHeadersIfAbsent(requestHeaders);
                SendReplyMessage(builder.Build(), replyChannel);
            }
        }
 protected override void HandleRequestMessage(IMessage message, ReplyMessageHolder replyHolder)
 {
     try
     {
         object result = null;
         if (synchronizationContext == null)
         {
             result = this.invoker.InvokeMethod(message);
         } else
         {
             synchronizationContext.Send( state => invoker.InvokeMethod(message), null );
         }
         if (result != null)
         {
             replyHolder.Set(result);
         }
     }
     catch (Exception e)
     {
         if (e is SystemException)
         {
             throw;
         }
         throw new MessageHandlingException(message, "failure occurred in Service Activator '" + this + "'", e);
     }
 }
 protected override void HandleRequestMessage(IMessage message, ReplyMessageHolder replyHolder)
 {
     if(_selector.Accept(message)) {
         replyHolder.Set(message);
     }
     else if(_throwExceptionOnRejection) {
         throw new MessageRejectedException(message);
     }
 }
 protected override void HandleRequestMessage(IMessage message, ReplyMessageHolder replyHolder)
 {
     try {
         IMessage result = _transformer.Transform(message);
         if(result != null) {
             replyHolder.Set(result);
         }
     }
     catch(Exception e) {
         if(e is MessageTransformationException) {
             throw;
         }
         throw new MessageTransformationException(message, e);
     }
 }
 protected override void HandleRequestMessage(IMessage message, ReplyMessageHolder replyHolder)
 {
     if(!(message.Payload is ISerializable)) {
         throw new MessageHandlingException(message, GetType().Name + " expects a Serializable payload type " + "but encountered [" + message.Payload.GetType().Name + "]");
     }
     IMessage requestMessage = MessageBuilder.FromMessage(message).Build();
     try {
         IMessage reply = _handlerProxy.Handle(requestMessage);
         if(reply != null) {
             replyHolder.Set(reply);
         }
     }
     catch(RemotingException e) {
         throw new MessageHandlingException(message, "unable to handle message remotely", e);
     }
 }
 private static void AddReply(ReplyMessageHolder replyHolder, object item, object correlationId, int sequenceNumber, int sequenceSize)
 {
     replyHolder.Add(item).SetCorrelationId(correlationId).SetSequenceNumber(sequenceNumber).SetSequenceSize(sequenceSize);
 }
 protected abstract void HandleRequestMessage(IMessage requestMessage, ReplyMessageHolder replyMessageHolder);
 protected override void HandleMessageInternal(IMessage message)
 {
     ReplyMessageHolder replyMessageHolder = new ReplyMessageHolder();
     HandleRequestMessage(message, replyMessageHolder);
     if(replyMessageHolder.IsEmpty) {
         if(_requiresReply) {
             throw new MessageHandlingException(message, "handler '" + this + "' requires a reply, but no reply was received");
         }
         if(logger.IsDebugEnabled) {
             logger.Debug("handler '" + this + "' produced no reply for request Message: " + message);
         }
         return;
     }
     IMessageChannel replyChannel = ResolveReplyChannel(message);
     MessageHeaders requestHeaders = message.Headers;
     foreach(MessageBuilder builder in replyMessageHolder.Builders) {
         builder.CopyHeadersIfAbsent(requestHeaders);
         SendReplyMessage(builder.Build(), replyChannel);
     }
 }
 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);
     }
 }
 protected override void HandleRequestMessage(IMessage message, ReplyMessageHolder replyHolder)
 {
     replyHolder.Set(message);
 }
 protected override void HandleRequestMessage(IMessage message, ReplyMessageHolder replyHolder)
 {
     replyHolder.Set(message.Payload.ToString().ToUpper());
 }
예제 #15
0
 protected override void HandleRequestMessage(IMessage requestMessage, ReplyMessageHolder replyMessageHolder)
 {
     replyMessageHolder.Set(requestMessage);
 }
 protected abstract void HandleRequestMessage(IMessage requestMessage, ReplyMessageHolder replyMessageHolder);