private <T> T lookup(Class<T> type) { Set<T> processors = routeBuilder.getContext().getRegistry().findByType(type); if (processors.isEmpty() || processors.size() > 1) { throw new IllegalArgumentException("Must have exactly one processor of type " + type.getName() + ", but found " + processors.size()); } else { T processor = processors.iterator().next(); return processor; } } }
/** * Returns bean by its type from registry. * * @param type the type of the registered bean * @param <T> as class of type * @return bean of specified type */ protected final <T> T getBean(Class<T> type) { Set<T> beans = getContext().getRegistry().findByType(type); Assert.state(beans.size() == 1, "there is more beans of type " + type); return beans.iterator().next(); }
@Override public void configure() throws Exception { Set<FunktionConfigurationProperties> props = getContext().getRegistry().findByType(FunktionConfigurationProperties.class); if (props != null && props.size() == 1) { config = props.iterator().next();
/** * Creates a new {@link PredicateAdapter} that adapts a {@link Predicate} * Spring bean identified by name <code>predicateBeanName</code>. * * @param predicateBeanName * name of the {@link Predicate} bean. * @return an adapted {@link Predicate} bean. */ public PredicateAdapter predicate(String predicateBeanName) { return new PredicateAdapter(routeBuilder.getContext().getRegistry() .lookupByNameAndType(predicateBeanName, Predicate.class)); }
/** * Creates a new {@link ConverterAdapter} that adapts a * {@link Converter} Spring bean identified by name * <code>converterBeanName</code>. * * @param converterBeanName * name of the {@link Converter} bean. * @return an adapted {@link Converter} bean. */ public ConverterAdapter converter(String converterBeanName) { return new ConverterAdapter(routeBuilder.getContext().getRegistry() .lookupByNameAndType(converterBeanName, Converter.class)); }
/** * Creates a new {@link RendererAdapter} that adapts a * {@link Renderer} Spring bean identified by name * <code>rendererBeanName</code>. * * @param rendererBeanName * name of the {@link Renderer} bean. * @return an adapted {@link Renderer} bean. */ public RendererAdapter renderer(String rendererBeanName) { return new RendererAdapter(routeBuilder.getContext().getRegistry() .lookupByNameAndType(rendererBeanName, Renderer.class)); }
/** * Creates a new {@link AggregatorAdapter} that adapts a * {@link Aggregator} Spring bean identified by name * <code>aggregatorBeanName</code>. * * @param aggregatorBeanName * name of the {@link Aggregator} bean. * @return an adapted {@link Aggregator} bean. */ public AggregatorAdapter aggregationStrategy(String aggregatorBeanName) { return new AggregatorAdapter(routeBuilder.getContext().getRegistry() .lookupByNameAndType(aggregatorBeanName, Aggregator.class)); }
/** * Creates a new {@link TransmogrifierAdapter} that adapts a * {@link Transmogrifier} Spring bean identified by name * <code>transmogrifierBeanName</code>. * * @param transmogrifierBeanName * name of the {@link Transmogrifier} bean. * @return an adapted {@link Transmogrifier} bean. */ public TransmogrifierAdapter transmogrifier(String transmogrifierBeanName) { return new TransmogrifierAdapter(routeBuilder.getContext().getRegistry() .lookupByNameAndType(transmogrifierBeanName, Transmogrifier.class)); }
/** * Creates a new {@link ParserAdapter} that adapts a * {@link Parser} Spring bean identified by name * <code>parserBeanName</code>. * * @param parserBeanName * name of the {@link Parser} bean. * @return an adapted {@link Parser} bean. */ public ParserAdapter parser(String parserBeanName) { return new ParserAdapter(routeBuilder.getContext().getRegistry() .lookupByNameAndType(parserBeanName, Parser.class)); }
/** * Creates a new {@link ValidatorAdapter} that adapts a * {@link Validator} Spring bean identified by name * <code>validatorBeanName</code>. * * @param validatorBeanName * name of the {@link Validator} bean. * @return an adapted {@link Validator} bean. */ public ValidatorAdapter validator(String validatorBeanName) { return new ValidatorAdapter(routeBuilder.getContext().getRegistry() .lookupByNameAndType(validatorBeanName, Validator.class)); }
public DataFormatAdapter dataFormatParser(String parserBeanName) { return new DataFormatAdapter(routeBuilder.getContext().getRegistry() .lookupByNameAndType(parserBeanName, Parser.class)); }
public DataFormatAdapter dataFormatRenderer(String rendererBeanName) { return new DataFormatAdapter(routeBuilder.getContext().getRegistry() .lookupByNameAndType(rendererBeanName, Renderer.class)); }
@Override public void configure() throws Exception { for(int i = 0; i < 20; i++) { String fromChannel = format("amqp:%s.>", serviceChannel); LOG.debug("Starting route consuming from channel: {}", fromChannel); from(fromChannel).process(exchange -> { Message message = exchange.getIn(); String channel = message.getHeader("JMSDestination", Destination.class).getAddress(); byte[] incomingPayload = message.getBody(byte[].class); OperationBinding operationBinding = operationBinding(payloadEncoding, channel, incomingPayload, message.getHeaders(), getContext().getRegistry()); exchange.setProperty(TARGET_PROPERTY, "bean:" + operationBinding.service() + "?method=" + operationBinding.operation() + "&multiParameterArray=true"); exchange.setProperty("RETURN_TYPE", operationBinding.operationMethod().getReturnType()); message.setBody(new Camels().convert(getContext(), operationBinding.arguments(), operationBinding.operationMethod().getParameterTypes())); }).toD(format("${property.%s}", TARGET_PROPERTY)).process(it -> { Class returnType = it.getProperty("RETURN_TYPE", Class.class); if (Void.TYPE == returnType) { it.getIn().setBody(null); } if (byte[].class == returnType) { it.getIn().setBody(it.getIn().getBody()); log.debug("Binary return type. No conversion performed."); } else { it.getIn().setBody(payloadEncoding.encode(it.getIn().getBody())); } }); } }
public void exposeAnnotatedBeans() { for (Map.Entry<String, Object> bean : findBeansWithRestOperations(routeBuilder.getContext().getRegistry()).entrySet()) { for (Method method : findRestOperations(bean.getValue().getClass())) { String uri = "/" + bean.getKey() + "/" + method.getName(); boolean isGet = true; int parametersCount = method.getParameterCount(); if (parametersCount > 0) { Class<?> lastParameterType = method.getParameterTypes()[parametersCount - 1]; if (lastParameterType != String.class && lastParameterType != Character.class && lastParameterType != char.class && lastParameterType != Integer.class && lastParameterType != int.class && lastParameterType != Long.class && lastParameterType != long.class && lastParameterType != Float.class && lastParameterType != float.class && lastParameterType != Double.class && lastParameterType != double.class) { isGet = false; parametersCount--; } } for (int i = 0; i < parametersCount; i++) { uri += "/{p" + i + "}"; } routeBuilder.rest(uri).verb(isGet ? "GET" : "POST").route().process(restParametersBindingProcessor()). to("bean:" + bean.getKey() + "?method=" + method.getName() + "&multiParameterArray=true"). choice().when(routeBuilder.header("CAMEL_REST_VOID_OPERATION").isNotNull()).setBody().constant("").endChoice(); } } }
this.context.getRegistry(JndiRegistry.class).bind(PetalsCamelContext.class.getName(), this);