[ https://issues.apache.org/jira/browse/CAMEL-4371?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13095823#comment-13095823 ]
Sergey Zhemzhitsky commented on CAMEL-4371: ------------------------------------------- Hi Claus, Advice with seems very powerful. I will try to use it for testing purpose. @Hadrian, as Claus mentioned it's should be possible to use advice with. I think this issue should be resolved, because in the camel 2.9 AdviceWithRouteBuilder will be capable to replace route inputs too and in earlier versions of camel, a custom AdviceWithTask can be developed to replace route inputs. > Add an ability to replace endpoints > ----------------------------------- > > Key: CAMEL-4371 > URL: https://issues.apache.org/jira/browse/CAMEL-4371 > Project: Camel > Issue Type: Improvement > Components: camel-core > Affects Versions: 2.8.0 > Reporter: Sergey Zhemzhitsky > Assignee: Ashwin Karpe > > Sometimes it can be useful to replace endpoints in the camel context. For > example, in unit tests it will not be necessary to define multiple properties > files for different environments with placeholders. > Here is the endpoint strategy to replace endpoints > {code} > package org.apache.camel.impl; > public class ReplaceEndpointStrategy implements EndpointStrategy { > private Map<String, String> replacements = Collections.emptyMap(); > @Override > public Endpoint registerEndpoint(String uri, Endpoint endpoint) { > CamelContext context = endpoint.getCamelContext(); > for(Entry<String, String> entry : replacements.entrySet()) { > if(EndpointHelper.matchEndpoint(uri, entry.getKey())) { > Endpoint newEndpoint = context.getEndpoint(entry.getValue()); > return newEndpoint; > } > } > return endpoint; > } > public void setReplacements(Map<String, String> replacements) { > this.replacements = replacements; > } > } > {code} > Here is it can be used from spring > {code} > <?xml version="1.0" encoding="UTF-8"?> > <beans xmlns="http://www.springframework.org/schema/beans" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation=" > http://www.springframework.org/schema/beans > http://www.springframework.org/schema/beans/spring-beans-3.0.xsd > http://camel.apache.org/schema/spring > http://camel.apache.org/schema/spring/camel-spring.xsd > "> > <bean class="org.apache.camel.impl.ReplaceEndpointStrategy"> > <property name="replacements"> > <map> > <entry key="timer://test*" value="direct://start" /> > <entry key="log://timer*" value="mock://tick" /> > </map> > </property> > </bean> > <camelContext xmlns="http://camel.apache.org/schema/spring"> > <route> > <from uri="timer://testTimer" /> > <to uri="log://timerTick" /> > </route> > </camelContext> > </beans> > {code} > And the unit test > {code} > package org.apache.camel.impl; > import static org.junit.Assert.assertNotNull; > import org.apache.camel.CamelContext; > import org.apache.camel.Endpoint; > import org.apache.camel.ProducerTemplate; > import org.apache.camel.component.mock.MockEndpoint; > import org.junit.Test; > import org.junit.runner.RunWith; > import org.springframework.beans.factory.annotation.Autowired; > import org.springframework.test.context.ContextConfiguration; > import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; > @RunWith(SpringJUnit4ClassRunner.class) > @ContextConfiguration > public class ReplaceEndpointStrategyTest { > @Autowired > private CamelContext camelContext; > @Autowired > private ProducerTemplate producer; > @Test > public void registerEndpoint() throws Exception { > assertNotNull("direct:start is null", > camelContext.hasEndpoint("direct:start")); > assertNotNull("mock:tick is null", > camelContext.hasEndpoint("mock:tick")); > } > @Test > public void route() throws Exception { > Endpoint start = camelContext.hasEndpoint("direct:start"); > MockEndpoint complete = (MockEndpoint) > camelContext.hasEndpoint("mock:tick"); > complete.expectedBodiesReceived("Hello World!"); > producer.sendBody(start, "Hello World!"); > complete.assertIsSatisfied(); > } > } > {code} -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira