private void setupReplyTo(InvocableHandlerMethod handler) { String replyTo = null; Method method = handler.getMethod(); if (method != null) { SendTo ann = AnnotationUtils.getAnnotation(method, SendTo.class); replyTo = extractSendTo(method.toString(), ann); } if (replyTo == null) { SendTo ann = AnnotationUtils.getAnnotation(this.bean.getClass(), SendTo.class); replyTo = extractSendTo(getBean().getClass().getSimpleName(), ann); } if (replyTo != null) { this.handlerSendTo.put(handler, PARSER.parseExpression(replyTo, PARSER_CONTEXT)); } }
/** * @param payloadClass the payload class. * @return the handler. */ protected InvocableHandlerMethod getHandlerForPayload(Class<? extends Object> payloadClass) { InvocableHandlerMethod handler = this.cachedHandlers.get(payloadClass); if (handler == null) { handler = findHandlerForPayload(payloadClass); if (handler == null) { throw new AmqpException("No method found for " + payloadClass); } this.cachedHandlers.putIfAbsent(payloadClass, handler); //NOSONAR setupReplyTo(handler); } return handler; }
/** * Return the method that will be invoked for this payload. * @param payload the payload. * @return the method. * @since 2.0 */ public Method getMethodFor(Object payload) { return getHandlerForPayload(payload.getClass()).getMethod(); }
public InvocationResult invoke(Message<?> message, Object... providedArgs) throws Exception { // NOSONAR if (this.invokerHandlerMethod != null) { return new InvocationResult(this.invokerHandlerMethod.invoke(message, providedArgs), null, this.invokerHandlerMethod.getMethod().getGenericReturnType()); } else if (this.delegatingHandler.hasDefaultHandler()) { // Needed to avoid returning raw Message which matches Object Object[] args = new Object[providedArgs.length + 1]; args[0] = message.getPayload(); System.arraycopy(providedArgs, 0, args, 1, providedArgs.length); return this.delegatingHandler.invoke(message, args); } else { return this.delegatingHandler.invoke(message, providedArgs); } }
@Override protected HandlerAdapter configureListenerAdapter(MessagingMessageListenerAdapter messageListener) { List<InvocableHandlerMethod> invocableHandlerMethods = new ArrayList<InvocableHandlerMethod>(); InvocableHandlerMethod defaultHandler = null; for (Method method : this.methods) { InvocableHandlerMethod handler = getMessageHandlerMethodFactory() .createInvocableHandlerMethod(getBean(), method); invocableHandlerMethods.add(handler); if (method.equals(this.defaultMethod)) { defaultHandler = handler; } } return new HandlerAdapter(new DelegatingInvocableHandler(invocableHandlerMethods, defaultHandler, getBean(), getResolver(), getBeanExpressionContext())); }
public Object getBean() { if (this.invokerHandlerMethod != null) { return this.invokerHandlerMethod.getBean(); } else { return this.delegatingHandler.getBean(); } }
public String getMethodAsString(Object payload) { if (this.invokerHandlerMethod != null) { return this.invokerHandlerMethod.getMethod().toGenericString(); } else { return this.delegatingHandler.getMethodNameFor(payload); } }
/** * Return the return type for the method that will be chosen for this payload. * @param payload the payload. * @return the return type, or null if no handler found. * @since 2.0 */ public Object getReturnType(Object payload) { if (this.invokerHandlerMethod != null) { return this.invokerHandlerMethod.getMethod().getReturnType(); } else { return this.delegatingHandler.getMethodFor(payload).getReturnType(); } }
protected InvocableHandlerMethod findHandlerForPayload(Class<? extends Object> payloadClass) { InvocableHandlerMethod result = null; for (InvocableHandlerMethod handler : this.handlers) { if (matchHandlerMethod(payloadClass, handler)) { if (result != null) { boolean resultIsDefault = result.equals(this.defaultHandler); if (!handler.equals(this.defaultHandler) && !resultIsDefault) { throw new AmqpException("Ambiguous methods for payload type: " + payloadClass + ": " + result.getMethod().getName() + " and " + handler.getMethod().getName()); } if (!resultIsDefault) { continue; // otherwise replace the result with the actual match } } result = handler; } } return result != null ? result : this.defaultHandler; }
public InvocationResult invoke(Message<?> message, Object... providedArgs) throws Exception { // NOSONAR if (this.invokerHandlerMethod != null) { return new InvocationResult(this.invokerHandlerMethod.invoke(message, providedArgs), null, this.invokerHandlerMethod.getMethod().getGenericReturnType()); } else if (this.delegatingHandler.hasDefaultHandler()) { // Needed to avoid returning raw Message which matches Object Object[] args = new Object[providedArgs.length + 1]; args[0] = message.getPayload(); System.arraycopy(providedArgs, 0, args, 1, providedArgs.length); return this.delegatingHandler.invoke(message, args); } else { return this.delegatingHandler.invoke(message, providedArgs); } }
@Override protected HandlerAdapter configureListenerAdapter(MessagingMessageListenerAdapter messageListener) { List<InvocableHandlerMethod> invocableHandlerMethods = new ArrayList<InvocableHandlerMethod>(); InvocableHandlerMethod defaultHandler = null; for (Method method : this.methods) { InvocableHandlerMethod handler = getMessageHandlerMethodFactory() .createInvocableHandlerMethod(getBean(), method); invocableHandlerMethods.add(handler); if (method.equals(this.defaultMethod)) { defaultHandler = handler; } } return new HandlerAdapter(new DelegatingInvocableHandler(invocableHandlerMethods, defaultHandler, getBean(), getResolver(), getBeanExpressionContext())); }
public Object getBean() { if (this.invokerHandlerMethod != null) { return this.invokerHandlerMethod.getBean(); } else { return this.delegatingHandler.getBean(); } }
public String getMethodAsString(Object payload) { if (this.invokerHandlerMethod != null) { return this.invokerHandlerMethod.getMethod().toGenericString(); } else { return this.delegatingHandler.getMethodNameFor(payload); } }
/** * Return the return type for the method that will be chosen for this payload. * @param payload the payload. * @return the return type, or null if no handler found. * @since 2.0 */ public Object getReturnType(Object payload) { if (this.invokerHandlerMethod != null) { return this.invokerHandlerMethod.getMethod().getReturnType(); } else { return this.delegatingHandler.getMethodFor(payload).getReturnType(); } }
protected InvocableHandlerMethod findHandlerForPayload(Class<? extends Object> payloadClass) { InvocableHandlerMethod result = null; for (InvocableHandlerMethod handler : this.handlers) { if (matchHandlerMethod(payloadClass, handler)) { if (result != null) { boolean resultIsDefault = result.equals(this.defaultHandler); if (!handler.equals(this.defaultHandler) && !resultIsDefault) { throw new AmqpException("Ambiguous methods for payload type: " + payloadClass + ": " + result.getMethod().getName() + " and " + handler.getMethod().getName()); } if (!resultIsDefault) { continue; // otherwise replace the result with the actual match } } result = handler; } } return result != null ? result : this.defaultHandler; }
private void setupReplyTo(InvocableHandlerMethod handler) { String replyTo = null; Method method = handler.getMethod(); if (method != null) { SendTo ann = AnnotationUtils.getAnnotation(method, SendTo.class); replyTo = extractSendTo(method.toString(), ann); } if (replyTo == null) { SendTo ann = AnnotationUtils.getAnnotation(this.bean.getClass(), SendTo.class); replyTo = extractSendTo(getBean().getClass().getSimpleName(), ann); } if (replyTo != null) { this.handlerSendTo.put(handler, PARSER.parseExpression(replyTo, PARSER_CONTEXT)); } }
/** * @param payloadClass the payload class. * @return the handler. */ protected InvocableHandlerMethod getHandlerForPayload(Class<? extends Object> payloadClass) { InvocableHandlerMethod handler = this.cachedHandlers.get(payloadClass); if (handler == null) { handler = findHandlerForPayload(payloadClass); if (handler == null) { throw new AmqpException("No method found for " + payloadClass); } this.cachedHandlers.putIfAbsent(payloadClass, handler); //NOSONAR setupReplyTo(handler); } return handler; }
protected MessagingMessageListenerAdapter createMultiInstance(Method m1, Method m2, boolean returnExceptions) { MessagingMessageListenerAdapter adapter = new MessagingMessageListenerAdapter(null, null, returnExceptions, null); List<InvocableHandlerMethod> methods = new ArrayList<>(); methods.add(this.factory.createInvocableHandlerMethod(sample, m1)); methods.add(this.factory.createInvocableHandlerMethod(sample, m2)); DelegatingInvocableHandler handler = new DelegatingInvocableHandler(methods, this.sample, null, null); adapter.setHandlerAdapter(new HandlerAdapter(handler)); return adapter; }
/** * Return the method that will be invoked for this payload. * @param payload the payload. * @return the method. * @since 2.0 */ public Method getMethodFor(Object payload) { return getHandlerForPayload(payload.getClass()).getMethod(); }
/** * Return a string representation of the method that will be invoked for this payload. * @param payload the payload. * @return the method name. */ public String getMethodNameFor(Object payload) { InvocableHandlerMethod handlerForPayload = null; try { handlerForPayload = getHandlerForPayload(payload.getClass()); } catch (Exception e) { // NOSONAR } return handlerForPayload == null ? "no match" : handlerForPayload.getMethod().toGenericString(); }