Java – camel routing unit test result failedtocreateroteexception
•
Java
I want to unit test the camel route This is a sandbox example to illustrate the exceptions obtained during unit testing How to pass exceptions so that I can Sand@R_893_2419 @Route unit test?
Sand@R_893_2419 @.java:
package sand@R_893_2419@;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.apache.camel.spring.SpringCamelContext;
import org.apache.camel.spring.SpringRouteBuilder;
import org.apache.camel.spring.javaconfig.CamelConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import scala.collection.mutable.StringBuilder;
@ComponentScan
public class Sand@R_893_2419@ {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(RouteConfiguration.class);
Sand@R_893_2419@Worker sand@R_893_2419@Worker = context.getBean("sand@R_893_2419@Worker",Sand@R_893_2419@Worker.class);
sand@R_893_2419@Worker.start();
context.close();
}
}
@Component
class Sand@R_893_2419@Worker {
@Autowired
private SpringCamelContext camelContext;
public void start() {
Map<String,Object> headers = new HashMap<String,Object>();
Object body = new Object();
camelContext.createProducerTemplate().sendBodyAndHeaders("direct:ProcessTheRecords",body,headers);
}
}
class Sand@R_893_2419@Route extends SpringRouteBuilder {
@Override
public void configure() {
from("direct:ProcessTheRecords").processRef("getAllTheRecords").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Message in = exchange.getIn();
StringBuilder body = in.getBody(StringBuilder.class);
body.append("Sand");
body.append('\n');
in.setBody(body);
}
}).to("direct:RecordProcessor");
}
}
class GetAllTheRecords implements Processor {
@Autowired
private Sand@R_893_2419@Service sand@R_893_2419@Service;
public void process(Exchange exchange) throws Exception {
StringBuilder body = new StringBuilder();
body.append(sand@R_893_2419@Service.getSandLevel());
body.append('\n');
body.append(sand@R_893_2419@Service.getSandLevel());
body.append('\n');
body.append(sand@R_893_2419@Service.getSandLevel());
body.append('\n');
Message in = exchange.getIn();
in.setBody(body);
}
}
@Service
class Sand@R_893_2419@Service {
Random rand;
public Sand@R_893_2419@Service() {
rand = new Random(new Date().getTime());
}
public String getSandLevel() {
return Long.toString(rand.nextLong());
}
}
class RecordProcessor extends SpringRouteBuilder {
@Override
public void configure() {
from("direct:RecordProcessor").to("log:out");
}
}
@Configuration
class RouteConfiguration extends CamelConfiguration {
@Autowired
private ApplicationContext applicationContext;
@Bean
public SpringCamelContext camelContext() throws Exception {
SpringCamelContext camelContext = new SpringCamelContext(applicationContext);
camelContext.addRoutes(applicationContext.getBean(RecordProcessor.class));
camelContext.addRoutes(applicationContext.getBean(Sand@R_893_2419@Route.class));
return camelContext;
}
@Bean
public Sand@R_893_2419@Service sand@R_893_2419@Service() {
return new Sand@R_893_2419@Service();
}
@Bean
public GetAllTheRecords getAllTheRecords() {
return new GetAllTheRecords();
}
@Bean
public Sand@R_893_2419@Worker sand@R_893_2419@Worker() {
return new Sand@R_893_2419@Worker();
}
@Bean
public Sand@R_893_2419@Route sand@R_893_2419@Route() {
return new Sand@R_893_2419@Route();
}
@Bean
RecordProcessor recordProcessor() {
return new RecordProcessor();
}
}
Sand@R_893_2419 @RouteTest. java:
package sand@R_893_2419@;
import org.apache.camel.builder.AdviceWithRouteBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class Sand@R_893_2419@RouteTest extends CamelTestSupport {
@Override
protected RouteBuilder createRouteBuilder() {
return new Sand@R_893_2419@Route();
}
@Before
public void mockEndpoints() throws Exception {
AdviceWithRouteBuilder mockAdvice = new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
interceptSendToEndpoint("direct:RecordProcessor").skipSendToOriginalEndpoint().to("mock:foo");
}
};
context.getRouteDeFinition("1").adviceWith(context,mockAdvice);
}
@Test
public void testSand@R_893_2419@Route() {
System.out.println("Hello world");
}
}
Exceptions:
org.apache.camel.FailedToCreateRouteException: Failed to create route route1 at: >>> process[ref:getAllTheRecords] <<< in route: Route(route1)[[From[direct:ProcessTheRecords]] -> [process[r... because of No bean Could be found in the registry for: getAllTheRecords of type: org.apache.camel.Processor at org.apache.camel.model.RouteDeFinition.addRoutes(RouteDeFinition.java:1028) at org.apache.camel.model.RouteDeFinition.addRoutes(RouteDeFinition.java:185) at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:841) at org.apache.camel.impl.DefaultCamelContext.startRouteDeFinitions(DefaultCamelContext.java:2895) at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:2618) at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:167) at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2467) at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2463) at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:2486) at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:2463) at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61) at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:2432) at org.apache.camel.test.junit4.CamelTestSupport.startCamelContext(CamelTestSupport.java:477) at org.apache.camel.test.junit4.CamelTestSupport.doSetUp(CamelTestSupport.java:311) at org.apache.camel.test.junit4.CamelTestSupport.setUp(CamelTestSupport.java:217) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) at org.junit.rules.RunRules.evaluate(RunRules.java:20) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) at org.junit.runners.ParentRunner.run(ParentRunner.java:309) at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37) at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) Caused by: org.apache.camel.NoSuchBeanException: No bean Could be found in the registry for: getAllTheRecords of type: org.apache.camel.Processor at org.apache.camel.util.CamelContextHelper.mandatoryLookup(CamelContextHelper.java:159) at org.apache.camel.impl.DefaultRouteContext.mandatoryLookup(DefaultRouteContext.java:151) at org.apache.camel.model.ProcessDeFinition.createProcessor(ProcessDeFinition.java:97) at org.apache.camel.model.ProcessorDeFinition.makeProcessor(ProcessorDeFinition.java:505) at org.apache.camel.model.ProcessorDeFinition.addRoutes(ProcessorDeFinition.java:217) at org.apache.camel.model.RouteDeFinition.addRoutes(RouteDeFinition.java:1025) ... 43 more
Solution
Override the method cameltestsupport#createregistry and add the processor in this way:
@Override
protected JndiRegistry createRegistry() throws Exception {
JndiRegistry registry = super.createRegistry();
registry.bind("getAllTheRecords",new GetAllTheRecords());
return registry;
}
The next problem you encounter is that there is no registered route, in which routeid = "1", you only have routes with routeid = "route1" Therefore, the context Getroutedefinition ("1") is changed to context getRouteDeFinitions(). Get (0) or context getRouteDeFinition(“route1”).
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码
