Search in sources :

Example 21 with ExpressionAdapter

use of org.apache.camel.support.ExpressionAdapter in project camel by apache.

the class ExpressionBuilder method messageHistoryExpression.

/**
     * Returns the message history (including exchange details or not)
     */
public static Expression messageHistoryExpression(final boolean detailed) {
    return new ExpressionAdapter() {

        private ExchangeFormatter formatter;

        public Object evaluate(Exchange exchange) {
            ExchangeFormatter ef = null;
            if (detailed) {
                // use the exchange formatter to log exchange details
                ef = getOrCreateExchangeFormatter(exchange.getContext());
            }
            return MessageHelper.dumpMessageHistoryStacktrace(exchange, ef, false);
        }

        private ExchangeFormatter getOrCreateExchangeFormatter(CamelContext camelContext) {
            if (formatter == null) {
                Set<ExchangeFormatter> formatters = camelContext.getRegistry().findByType(ExchangeFormatter.class);
                if (formatters != null && formatters.size() == 1) {
                    formatter = formatters.iterator().next();
                } else {
                    // setup exchange formatter to be used for message history dump
                    DefaultExchangeFormatter def = new DefaultExchangeFormatter();
                    def.setShowExchangeId(true);
                    def.setMultiline(true);
                    def.setShowHeaders(true);
                    def.setStyle(DefaultExchangeFormatter.OutputStyle.Fixed);
                    try {
                        Integer maxChars = CamelContextHelper.parseInteger(camelContext, camelContext.getGlobalOption(Exchange.LOG_DEBUG_BODY_MAX_CHARS));
                        if (maxChars != null) {
                            def.setMaxChars(maxChars);
                        }
                    } catch (Exception e) {
                        throw ObjectHelper.wrapRuntimeCamelException(e);
                    }
                    formatter = def;
                }
            }
            return formatter;
        }

        @Override
        public String toString() {
            return "messageHistory(" + detailed + ")";
        }
    };
}
Also used : Exchange(org.apache.camel.Exchange) CamelContext(org.apache.camel.CamelContext) DefaultExchangeFormatter(org.apache.camel.processor.DefaultExchangeFormatter) ExchangeFormatter(org.apache.camel.spi.ExchangeFormatter) DefaultExchangeFormatter(org.apache.camel.processor.DefaultExchangeFormatter) NoTypeConversionAvailableException(org.apache.camel.NoTypeConversionAvailableException) NoSuchLanguageException(org.apache.camel.NoSuchLanguageException) InvalidPayloadException(org.apache.camel.InvalidPayloadException) NoSuchEndpointException(org.apache.camel.NoSuchEndpointException) ExpressionAdapter(org.apache.camel.support.ExpressionAdapter)

Aggregations

Exchange (org.apache.camel.Exchange)21 ExpressionAdapter (org.apache.camel.support.ExpressionAdapter)21 InvalidPayloadException (org.apache.camel.InvalidPayloadException)5 NoTypeConversionAvailableException (org.apache.camel.NoTypeConversionAvailableException)5 Endpoint (org.apache.camel.Endpoint)4 NoSuchEndpointException (org.apache.camel.NoSuchEndpointException)4 NoSuchLanguageException (org.apache.camel.NoSuchLanguageException)4 Random (java.util.Random)2 Scanner (java.util.Scanner)2 Pattern (java.util.regex.Pattern)2 Expression (org.apache.camel.Expression)2 RouteBuilder (org.apache.camel.builder.RouteBuilder)2 MethodCallExpression (org.apache.camel.model.language.MethodCallExpression)2 PrintWriter (java.io.PrintWriter)1 StringWriter (java.io.StringWriter)1 SimpleDateFormat (java.text.SimpleDateFormat)1 ArrayList (java.util.ArrayList)1 Date (java.util.Date)1 Iterator (java.util.Iterator)1 Matcher (java.util.regex.Matcher)1