If you are doing this in service mix, there is a far easier and much more 
dynamic way of doing this.

What you do is a factory service, this you can write an interface via 
constructors for in tests, if you after that basically
have the same structure/route but different locations and say CXF strategies, 
use a managed service factory.

/je

On Sep 1, 2011, at 7:50 PM, Hadrian Zbarcea (JIRA) wrote:

> 
>   [ 
> https://issues.apache.org/jira/browse/CAMEL-4371?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13095716#comment-13095716
>  ] 
> 
> Hadrian Zbarcea commented on CAMEL-4371:
> ----------------------------------------
> 
> Hi Sergey, I do understand your problem, but I don't think your proposal is 
> the right solution. What you want is already possible in Camel in more than 
> way. Adding this would mean adding yet another way of achieving the same 
> result, arguably not even in the best way. Hard-coding an endpoint URIs in 
> code and then replacing it at runtime with another URI is really not a good 
> practice. Better give them symbolic names that reflect semantics. Until 
> somebody convinces me otherwise I am -1 on this change.
> 
> @Ashwin, one problem with what I think you propose is identifying the 
> boundaries of the route segment. Another point is that if you have to mutate 
> parts of the route, I would argue that there's something wrong with the route 
> design.
> 
>> 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
> 
> 

Reply via email to