protected virtual IInvocableHandlerMethod FindHandlerForPayload(Type payloadClass) { IInvocableHandlerMethod result = null; foreach (var handler in Handlers) { if (MatchHandlerMethod(payloadClass, handler)) { if (result != null) { var resultIsDefault = result.Equals(DefaultHandler); if (!handler.Equals(DefaultHandler) && !resultIsDefault) { throw new RabbitException("Ambiguous methods for payload type: " + payloadClass + ": " + result.Method.Name + " and " + handler.Method.Name); } if (!resultIsDefault) { continue; // otherwise replace the result with the actual match } } result = handler; } } return(result != null ? result : DefaultHandler); }
protected bool MatchHandlerMethod(Type payloadClass, IInvocableHandlerMethod handler) { var method = handler.Method; var parameters = method.GetParameters(); var parameterAnnotations = GetParameterAnnotations(method); // Single param; no annotation or not @Header if (parameterAnnotations.Length == 1 && (parameterAnnotations[0].Length == 0 || !parameterAnnotations[0].Any((attr) => attr.GetType() == typeof(HeaderAttribute))) && parameters[0].ParameterType.IsAssignableFrom(payloadClass)) { return(true); } var foundCandidate = false; for (var i = 0; i < parameterAnnotations.Length; i++) { // MethodParameter methodParameter = new MethodParameter(method, i); if ((parameterAnnotations[i].Length == 0 || !parameterAnnotations[i].Any((attr) => attr.GetType() == typeof(HeaderAttribute))) && parameters[i].ParameterType.IsAssignableFrom(payloadClass)) { if (foundCandidate) { throw new RabbitException("Ambiguous payload parameter for " + method.ToString()); } foundCandidate = true; } } return(foundCandidate); }
public StreamListenerMessageHandler(IServiceProvider serviceProvider, IInvocableHandlerMethod invocableHandlerMethod, bool copyHeaders, IList <string> notPropagatedHeaders) : base(serviceProvider) { _invocableHandlerMethod = invocableHandlerMethod; _copyHeaders = copyHeaders; NotPropagatedHeaders = notPropagatedHeaders; }
public StreamListenerMessageHandler(IApplicationContext context, IInvocableHandlerMethod invocableHandlerMethod, bool copyHeaders, IList <string> notPropagatedHeaders) : base(context) { _invocableHandlerMethod = invocableHandlerMethod; _copyHeaders = copyHeaders; NotPropagatedHeaders = notPropagatedHeaders; }
public MethodInvokingMessageProcessor(IApplicationContext context, object targetObject, Type attribute) : base(context) { _targetObject = targetObject; _method = FindAnnotatedMethod(targetObject, attribute); _messageHandlerMethodFactory = ConfigureMessageHandlerFactory(); _invocableHandlerMethod = _messageHandlerMethodFactory.CreateInvocableHandlerMethod(_targetObject, _method); }
public MethodInvokingMessageProcessor(IApplicationContext context, object targetObject, MethodInfo method) : base(context) { _targetObject = targetObject; _method = method; _messageHandlerMethodFactory = ConfigureMessageHandlerFactory(); _invocableHandlerMethod = _messageHandlerMethodFactory.CreateInvocableHandlerMethod(_targetObject, _method); }
public DelegatingInvocableHandler(List <IInvocableHandlerMethod> handlers, IInvocableHandlerMethod defaultHandler, object bean, IServiceExpressionResolver resolver, IServiceExpressionContext context) { Handlers = new List <IInvocableHandlerMethod>(handlers); DefaultHandler = defaultHandler; Bean = bean; Resolver = resolver; ServiceExpressionContext = context; }
public string GetMethodNameFor(object payload) { IInvocableHandlerMethod handlerForPayload = null; try { handlerForPayload = GetHandlerForPayload(payload.GetType()); } catch (Exception) { // Ignore } return(handlerForPayload == null ? "no match" : handlerForPayload.Method.ToString()); }
protected override HandlerAdapter ConfigureListenerAdapter(MessagingMessageListenerAdapter messageListener) { var invocableHandlerMethods = new List <IInvocableHandlerMethod>(); IInvocableHandlerMethod defaultHandler = null; foreach (var method in Methods) { var handler = MessageHandlerMethodFactory.CreateInvocableHandlerMethod(Instance, method); invocableHandlerMethods.Add(handler); if (method.Equals(DefaultMethod)) { defaultHandler = handler; } } return(new HandlerAdapter(new DelegatingInvocableHandler(invocableHandlerMethods, defaultHandler, Instance, Resolver, ExpressionContext))); }
private void SetupReplyTo(IInvocableHandlerMethod handler) { string replyTo = null; var method = handler.Method; if (method != null) { var ann = method.GetCustomAttribute <SendToAttribute>(); replyTo = ExtractSendTo(method.ToString(), ann); } if (replyTo == null) { var ann = Bean.GetType().GetCustomAttribute <SendToAttribute>(); replyTo = ExtractSendTo(Bean.GetType().Name, ann); } if (replyTo != null) { _handlerSendTo[handler] = PARSER.ParseExpression(replyTo, PARSER_CONTEXT); } }
public HandlerAdapter(IInvocableHandlerMethod invokerHandlerMethod) { InvokerHandlerMethod = invokerHandlerMethod; DelegatingHandler = null; }