Search in sources :

Example 1 with EvaluateExpressionProcessor

use of org.apache.camel.processor.EvaluateExpressionProcessor 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 + "]";
        }
    };
}
Also used : EvaluateExpressionProcessor(org.apache.camel.processor.EvaluateExpressionProcessor) Processor(org.apache.camel.Processor) EvaluateExpressionProcessor(org.apache.camel.processor.EvaluateExpressionProcessor) Expression(org.apache.camel.Expression) ExecutorService(java.util.concurrent.ExecutorService) ArrayList(java.util.ArrayList) RecipientList(org.apache.camel.processor.RecipientList) Pipeline(org.apache.camel.processor.Pipeline)

Aggregations

ArrayList (java.util.ArrayList)1 ExecutorService (java.util.concurrent.ExecutorService)1 Expression (org.apache.camel.Expression)1 Processor (org.apache.camel.Processor)1 EvaluateExpressionProcessor (org.apache.camel.processor.EvaluateExpressionProcessor)1 Pipeline (org.apache.camel.processor.Pipeline)1 RecipientList (org.apache.camel.processor.RecipientList)1