/** * Populate the {@link MethodInvokingRouter} for the method * of the provided service and its method with provided options from {@link RouterSpec}. * @param service the service to use. * @param methodName the method to invoke. * @param routerConfigurer the {@link Consumer} to provide {@link MethodInvokingRouter} options. * @return the current {@link IntegrationFlowDefinition}. * @see MethodInvokingRouter */ public B route(Object service, String methodName, Consumer<RouterSpec<Object, MethodInvokingRouter>> routerConfigurer) { MethodInvokingRouter router; if (StringUtils.hasText(methodName)) { router = new MethodInvokingRouter(service, methodName); } else { router = new MethodInvokingRouter(service); } return route(new RouterSpec<>(router), routerConfigurer); }
/** * Populate the {@link ErrorMessageExceptionTypeRouter} with options from the {@link RouterSpec}. * Typically used with a Java 8 Lambda expression: * <pre class="code"> * {@code * .routeByException(r -> r * .channelMapping(IllegalArgumentException.class, "illegalArgumentChannel") * .subFlowMapping(MessageHandlingException.class, sf -> * sf.handle(...)) * ) * } * </pre> * @param routerConfigurer the {@link Consumer} to provide {@link ErrorMessageExceptionTypeRouter} options. * @return the current {@link IntegrationFlowDefinition}. * @see ErrorMessageExceptionTypeRouter */ public B routeByException( Consumer<RouterSpec<Class<? extends Throwable>, ErrorMessageExceptionTypeRouter>> routerConfigurer) { return route(new RouterSpec<>(new ErrorMessageExceptionTypeRouter()), routerConfigurer); }
/** * Populate the {@link ExpressionEvaluatingRouter} for provided SpEL expression * with provided options from {@link RouterSpec}. * @param expression the expression to use. * @param routerConfigurer the {@link Consumer} to provide {@link ExpressionEvaluatingRouter} options. * @param <T> the target result type. * @return the current {@link IntegrationFlowDefinition}. */ public <T> B route(String expression, Consumer<RouterSpec<T, ExpressionEvaluatingRouter>> routerConfigurer) { return route(new RouterSpec<>(new ExpressionEvaluatingRouter(PARSER.parseExpression(expression))), routerConfigurer); }
/** * Populate the {@link MethodInvokingRouter} for provided bean and its method * with provided options from {@link RouterSpec}. * @param beanName the bean to use. * @param method the method to invoke at runtime. * @param routerConfigurer the {@link Consumer} to provide {@link MethodInvokingRouter} options. * @return the current {@link IntegrationFlowDefinition}. */ public B route(String beanName, String method, Consumer<RouterSpec<Object, MethodInvokingRouter>> routerConfigurer) { MethodInvokingRouter methodInvokingRouter = new MethodInvokingRouter(new BeanNameMessageProcessor<>(beanName, method)); return route(new RouterSpec<>(methodInvokingRouter), routerConfigurer); }
/** * Populate the {@link MethodInvokingRouter} for the {@link org.springframework.integration.handler.MessageProcessor} * from the provided {@link MessageProcessorSpec} with default options. * <pre class="code"> * {@code * .route(Scripts.script(myScriptResource).lang("groovy").refreshCheckDelay(1000), * m -> m.channelMapping("true", "evenChannel") * .subFlowMapping("false", f -> * f.<Integer>handle((p, h) -> p * 3))) * } * </pre> * @param messageProcessorSpec the {@link MessageProcessorSpec} to use. * @param routerConfigurer the {@link Consumer} to provide {@link MethodInvokingRouter} options. * @return the current {@link IntegrationFlowDefinition}. */ public B route(MessageProcessorSpec<?> messageProcessorSpec, Consumer<RouterSpec<Object, MethodInvokingRouter>> routerConfigurer) { Assert.notNull(messageProcessorSpec, "'messageProcessorSpec' must not be null"); MessageProcessor<?> processor = messageProcessorSpec.get(); addComponent(processor); return route(new RouterSpec<>(new MethodInvokingRouter(processor)), routerConfigurer); }
? new MethodInvokingRouter(new LambdaMessageProcessor(router, payloadType)) : new MethodInvokingRouter(router, ClassUtils.FUNCTION_APPLY_METHOD); return route(new RouterSpec<>(methodInvokingRouter), routerConfigurer);
/** * Populate the provided {@link AbstractMappingMessageRouter} implementation * with options from {@link RouterSpec} and endpoint options from {@link GenericEndpointSpec}. * In addition accept options for the integration endpoint using {@link GenericEndpointSpec}. * @param router the {@link AbstractMappingMessageRouter} to populate. * @param routerConfigurer the {@link Consumer} to provide {@link MethodInvokingRouter} options. * @param endpointConfigurer the {@link Consumer} to provide integration endpoint options. * @param <K> the {@code channelKey mapping} type. * @param <R> the {@link AbstractMappingMessageRouter} type. * @return the current {@link IntegrationFlowDefinition}. */ public <K, R extends AbstractMappingMessageRouter> B route(R router, Consumer<RouterSpec<K, R>> routerConfigurer, Consumer<GenericEndpointSpec<R>> endpointConfigurer) { RouterSpec<K, R> routerSpec = new RouterSpec<K, R>(router); if (routerConfigurer != null) { routerConfigurer.accept(routerSpec); } return route(router, routerSpec, endpointConfigurer); }
/** * Populate the provided {@link AbstractMappingMessageRouter} implementation * with options from {@link RouterSpec} and endpoint options from {@link GenericEndpointSpec}. * In addition accept options for the integration endpoint using {@link GenericEndpointSpec}. * @param router the {@link AbstractMappingMessageRouter} to populate. * @param routerConfigurer the {@link Consumer} to provide {@link MethodInvokingRouter} options. * @param endpointConfigurer the {@link Consumer} to provide integration endpoint options. * @param <K> the {@code channelKey mapping} type. * @param <R> the {@link AbstractMappingMessageRouter} type. * @return the current {@link IntegrationFlowDefinition}. */ public <K, R extends AbstractMappingMessageRouter> B route(R router, Consumer<RouterSpec<K, R>> routerConfigurer, Consumer<GenericEndpointSpec<R>> endpointConfigurer) { RouterSpec<K, R> routerSpec = new RouterSpec<K, R>(router); if (routerConfigurer != null) { routerConfigurer.accept(routerSpec); } return route(router, routerSpec, endpointConfigurer); }
/** * Populate the {@link MethodInvokingRouter} for the method * of the provided service and its method with provided options from {@link RouterSpec}. * @param service the service to use. * @param methodName the method to invoke. * @param routerConfigurer the {@link Consumer} to provide {@link MethodInvokingRouter} options. * @return the current {@link IntegrationFlowDefinition}. * @see MethodInvokingRouter */ public B route(Object service, String methodName, Consumer<RouterSpec<Object, MethodInvokingRouter>> routerConfigurer) { MethodInvokingRouter router; if (StringUtils.hasText(methodName)) { router = new MethodInvokingRouter(service, methodName); } else { router = new MethodInvokingRouter(service); } return route(new RouterSpec<>(router), routerConfigurer); }
/** * Populate the {@link ErrorMessageExceptionTypeRouter} with options from the {@link RouterSpec}. * Typically used with a Java 8 Lambda expression: * <pre class="code"> * {@code * .routeByException(r -> r * .channelMapping(IllegalArgumentException.class, "illegalArgumentChannel") * .subFlowMapping(MessageHandlingException.class, sf -> * sf.handle(...)) * ) * } * </pre> * @param routerConfigurer the {@link Consumer} to provide {@link ErrorMessageExceptionTypeRouter} options. * @return the current {@link IntegrationFlowDefinition}. * @see ErrorMessageExceptionTypeRouter */ public B routeByException( Consumer<RouterSpec<Class<? extends Throwable>, ErrorMessageExceptionTypeRouter>> routerConfigurer) { return route(new RouterSpec<>(new ErrorMessageExceptionTypeRouter()), routerConfigurer); }
/** * Populate the {@link ExpressionEvaluatingRouter} for provided SpEL expression * with provided options from {@link RouterSpec}. * @param expression the expression to use. * @param routerConfigurer the {@link Consumer} to provide {@link ExpressionEvaluatingRouter} options. * @param <T> the target result type. * @return the current {@link IntegrationFlowDefinition}. */ public <T> B route(String expression, Consumer<RouterSpec<T, ExpressionEvaluatingRouter>> routerConfigurer) { return route(new RouterSpec<>(new ExpressionEvaluatingRouter(PARSER.parseExpression(expression))), routerConfigurer); }
/** * Populate the {@link MethodInvokingRouter} for provided bean and its method * with provided options from {@link RouterSpec}. * @param beanName the bean to use. * @param method the method to invoke at runtime. * @param routerConfigurer the {@link Consumer} to provide {@link MethodInvokingRouter} options. * @return the current {@link IntegrationFlowDefinition}. */ public B route(String beanName, String method, Consumer<RouterSpec<Object, MethodInvokingRouter>> routerConfigurer) { MethodInvokingRouter methodInvokingRouter = new MethodInvokingRouter(new BeanNameMessageProcessor<>(beanName, method)); return route(new RouterSpec<>(methodInvokingRouter), routerConfigurer); }
/** * Populate the {@link MethodInvokingRouter} for the {@link org.springframework.integration.handler.MessageProcessor} * from the provided {@link MessageProcessorSpec} with default options. * <pre class="code"> * {@code * .route(Scripts.script(myScriptResource).lang("groovy").refreshCheckDelay(1000), * m -> m.channelMapping("true", "evenChannel") * .subFlowMapping("false", f -> * f.<Integer>handle((p, h) -> p * 3))) * } * </pre> * @param messageProcessorSpec the {@link MessageProcessorSpec} to use. * @param routerConfigurer the {@link Consumer} to provide {@link MethodInvokingRouter} options. * @return the current {@link IntegrationFlowDefinition}. */ public B route(MessageProcessorSpec<?> messageProcessorSpec, Consumer<RouterSpec<Object, MethodInvokingRouter>> routerConfigurer) { Assert.notNull(messageProcessorSpec, "'messageProcessorSpec' must not be null"); MessageProcessor<?> processor = messageProcessorSpec.get(); addComponent(processor); return route(new RouterSpec<>(new MethodInvokingRouter(processor)), routerConfigurer); }
? new MethodInvokingRouter(new LambdaMessageProcessor(router, payloadType)) : new MethodInvokingRouter(router, ClassUtils.FUNCTION_APPLY_METHOD); return route(new RouterSpec<>(methodInvokingRouter), routerConfigurer);