Author: davsclaus Date: Tue Feb 5 08:11:14 2013 New Revision: 1442491 URL: http://svn.apache.org/viewvc?rev=1442491&view=rev Log: CAMEL-6035: Fixed issue with using global interceptor and interceptSendToEndpoint at the same time.
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/issues/AdviceWithStartTargetIssueTest.java (with props) Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java?rev=1442491&r1=1442490&r2=1442491&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java Tue Feb 5 08:11:14 2013 @@ -34,6 +34,7 @@ import org.apache.camel.model.ModelChann import org.apache.camel.model.ProcessorDefinition; import org.apache.camel.processor.InterceptorToAsyncProcessorBridge; import org.apache.camel.processor.RouteContextProcessor; +import org.apache.camel.processor.WrapProcessor; import org.apache.camel.spi.InterceptStrategy; import org.apache.camel.spi.LifecycleStrategy; import org.apache.camel.spi.RouteContext; @@ -229,6 +230,10 @@ public class DefaultChannel extends Serv bridge.setTarget(wrapped); wrapped = bridge; } + // ensure target gets wrapped so we can control its lifecycle + if (!(wrapped instanceof WrapProcessor)) { + wrapped = new WrapProcessor(wrapped, target); + } target = wrapped; } Added: camel/trunk/camel-core/src/test/java/org/apache/camel/issues/AdviceWithStartTargetIssueTest.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/issues/AdviceWithStartTargetIssueTest.java?rev=1442491&view=auto ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/issues/AdviceWithStartTargetIssueTest.java (added) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/issues/AdviceWithStartTargetIssueTest.java Tue Feb 5 08:11:14 2013 @@ -0,0 +1,95 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.issues; + +import org.apache.camel.CamelContext; +import org.apache.camel.ContextTestSupport; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.model.ProcessorDefinition; +import org.apache.camel.processor.DelegateAsyncProcessor; +import org.apache.camel.spi.InterceptStrategy; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + */ +public class AdviceWithStartTargetIssueTest extends ContextTestSupport { + + public void testAdvised() throws Exception { + context.getRouteDefinitions().get(0).adviceWith(context, + new RouteBuilder() { + @Override + public void configure() throws Exception { + interceptSendToEndpoint("mock:foo").skipSendToOriginalEndpoint() + .to("log:foo") + .to("mock:advised"); + } + }); + + getMockEndpoint("mock:foo").expectedMessageCount(0); + getMockEndpoint("mock:advised").expectedMessageCount(1); + getMockEndpoint("mock:result").expectedMessageCount(1); + + template.sendBody("direct:start", "Hello World"); + + assertMockEndpointsSatisfied(); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + getContext().addInterceptStrategy(new ContainerWideInterceptor()); + + from("direct:start").to("mock:foo").to("mock:result"); + } + }; + } + + static class ContainerWideInterceptor implements InterceptStrategy { + + private static final transient Logger LOG = LoggerFactory.getLogger(ContainerWideInterceptor.class); + private static int count; + + public Processor wrapProcessorInInterceptors(final CamelContext context, final ProcessorDefinition<?> definition, + final Processor target, final Processor nextTarget) throws Exception { + + return new DelegateAsyncProcessor(new Processor() { + + public void process(Exchange exchange) throws Exception { + // we just count number of interceptions + count++; + LOG.info("I am the container wide interceptor. Intercepted total count: " + count); + nextTarget.process(exchange); + } + + @Override + public String toString() { + return "ContainerWideInterceptor[" + target + "]"; + } + }); + } + + public int getCount() { + return count; + } + } +} Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/issues/AdviceWithStartTargetIssueTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/issues/AdviceWithStartTargetIssueTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date