use of org.apache.camel.Expression in project camel by apache.
the class RecipientListDefinition method createProcessor.
@Override
public Processor createProcessor(RouteContext routeContext) throws Exception {
final Expression expression = getExpression().createExpression(routeContext);
boolean isParallelProcessing = getParallelProcessing() != null && getParallelProcessing();
boolean isStreaming = getStreaming() != null && getStreaming();
boolean isParallelAggregate = getParallelAggregate() != null && getParallelAggregate();
boolean isShareUnitOfWork = getShareUnitOfWork() != null && getShareUnitOfWork();
boolean isStopOnException = getStopOnException() != null && getStopOnException();
boolean isIgnoreInvalidEndpoints = getIgnoreInvalidEndpoints() != null && getIgnoreInvalidEndpoints();
boolean isStopOnAggregateException = getStopOnAggregateException() != null && getStopOnAggregateException();
RecipientList answer;
if (delimiter != null) {
answer = new RecipientList(routeContext.getCamelContext(), expression, delimiter);
} else {
answer = new RecipientList(routeContext.getCamelContext(), expression);
}
answer.setAggregationStrategy(createAggregationStrategy(routeContext));
answer.setParallelProcessing(isParallelProcessing);
answer.setParallelAggregate(isParallelAggregate);
answer.setStreaming(isStreaming);
answer.setShareUnitOfWork(isShareUnitOfWork);
answer.setStopOnException(isStopOnException);
answer.setIgnoreInvalidEndpoints(isIgnoreInvalidEndpoints);
answer.setStopOnAggregateException(isStopOnAggregateException);
if (getCacheSize() != null) {
answer.setCacheSize(getCacheSize());
}
if (onPrepareRef != null) {
onPrepare = CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(), onPrepareRef, Processor.class);
}
if (onPrepare != null) {
answer.setOnPrepare(onPrepare);
}
if (getTimeout() != null) {
answer.setTimeout(getTimeout());
}
boolean shutdownThreadPool = ProcessorDefinitionHelper.willCreateNewThreadPool(routeContext, this, isParallelProcessing);
ExecutorService threadPool = ProcessorDefinitionHelper.getConfiguredExecutorService(routeContext, "RecipientList", this, isParallelProcessing);
answer.setExecutorService(threadPool);
answer.setShutdownExecutorService(shutdownThreadPool);
long timeout = getTimeout() != null ? getTimeout() : 0;
if (timeout > 0 && !isParallelProcessing) {
throw new IllegalArgumentException("Timeout is used but ParallelProcessing has not been enabled.");
}
// create a pipeline with two processors
// the first is the eval processor which evaluates the expression to use
// the second is the recipient list
List<Processor> pipe = new ArrayList<Processor>(2);
// the eval processor must be wrapped in error handler, so in case there was an
// error during evaluation, the error handler can deal with it
// the recipient list is not in error handler, as its has its own special error handling
// when sending to the recipients individually
Processor evalProcessor = new EvaluateExpressionProcessor(expression);
evalProcessor = super.wrapInErrorHandler(routeContext, evalProcessor);
pipe.add(evalProcessor);
pipe.add(answer);
// (threads definition does this as well)
return new Pipeline(routeContext.getCamelContext(), pipe) {
@Override
public String toString() {
return "RecipientList[" + expression + "]";
}
};
}
use of org.apache.camel.Expression in project camel by apache.
the class ResequenceDefinition method createBatchResequencer.
/**
* Creates a batch {@link Resequencer} instance applying the given <code>config</code>.
*
* @param routeContext route context.
* @param config batch resequencer configuration.
* @return the configured batch resequencer.
* @throws Exception can be thrown
*/
@SuppressWarnings("deprecation")
protected Resequencer createBatchResequencer(RouteContext routeContext, BatchResequencerConfig config) throws Exception {
Processor processor = this.createChildProcessor(routeContext, true);
Expression expression = getExpression().createExpression(routeContext);
// and wrap in unit of work
CamelInternalProcessor internal = new CamelInternalProcessor(processor);
internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(routeContext));
ObjectHelper.notNull(config, "config", this);
ObjectHelper.notNull(expression, "expression", this);
boolean isReverse = config.getReverse() != null && config.getReverse();
boolean isAllowDuplicates = config.getAllowDuplicates() != null && config.getAllowDuplicates();
Resequencer resequencer = new Resequencer(routeContext.getCamelContext(), internal, expression, isAllowDuplicates, isReverse);
resequencer.setBatchSize(config.getBatchSize());
resequencer.setBatchTimeout(config.getBatchTimeout());
resequencer.setReverse(isReverse);
resequencer.setAllowDuplicates(isAllowDuplicates);
if (config.getIgnoreInvalidExchanges() != null) {
resequencer.setIgnoreInvalidExchanges(config.getIgnoreInvalidExchanges());
}
return resequencer;
}
use of org.apache.camel.Expression in project camel by apache.
the class DynamicRouterDefinition method createProcessor.
@Override
public Processor createProcessor(RouteContext routeContext) throws Exception {
Expression expression = getExpression().createExpression(routeContext);
String delimiter = getUriDelimiter() != null ? getUriDelimiter() : DEFAULT_DELIMITER;
DynamicRouter dynamicRouter = new DynamicRouter(routeContext.getCamelContext(), expression, delimiter);
if (getIgnoreInvalidEndpoints() != null) {
dynamicRouter.setIgnoreInvalidEndpoints(getIgnoreInvalidEndpoints());
}
if (getCacheSize() != null) {
dynamicRouter.setCacheSize(getCacheSize());
}
return dynamicRouter;
}
use of org.apache.camel.Expression in project camel by apache.
the class PredicateBuilderConcurrentTest method testPredicateBuilderConcurrent.
public void testPredicateBuilderConcurrent() throws Exception {
context.start();
List<Future<Boolean>> futures = new ArrayList<Future<Boolean>>();
ExecutorService pool = Executors.newFixedThreadPool(10);
for (int i = 0; i < 1000; i++) {
final Integer num = i;
Future<Boolean> future = pool.submit(new Callable<Boolean>() {
public Boolean call() throws Exception {
Expression left = ExpressionBuilder.headerExpression("foo");
Expression right;
if (num % 2 == 0) {
right = ExpressionBuilder.constantExpression("ABC");
} else {
right = ExpressionBuilder.constantExpression("DEF");
}
Predicate predicate = PredicateBuilder.isEqualTo(left, right);
Exchange exchange = new DefaultExchange(context);
exchange.getIn().setBody("Hello World");
exchange.getIn().setHeader("foo", "ABC");
return predicate.matches(exchange);
}
});
futures.add(future);
}
for (int i = 0; i < 1000; i++) {
Boolean result = futures.get(i).get(10, TimeUnit.SECONDS);
if (i % 2 == 0) {
assertEquals("Should be true for #" + i, true, result.booleanValue());
} else {
assertEquals("Should be false for #" + i, false, result.booleanValue());
}
}
pool.shutdownNow();
}
use of org.apache.camel.Expression in project camel by apache.
the class ExpressionBuilderTest method testRegexTokenize.
public void testRegexTokenize() throws Exception {
Expression expression = regexTokenizeExpression(headerExpression("location"), ",");
List<String> expected = new ArrayList<String>(Arrays.asList(new String[] { "Islington", "London", "UK" }));
assertExpression(expression, exchange, expected);
Predicate predicate = contains(regexTokenizeExpression(headerExpression("location"), ","), constantExpression("London"));
assertPredicate(predicate, exchange, true);
predicate = contains(regexTokenizeExpression(headerExpression("location"), ","), constantExpression("Manchester"));
assertPredicate(predicate, exchange, false);
}
Aggregations