I have two routes defined in seperate classes.1.
public class FileRouter extends RouteBuilder { @Override public void configure() throws Exception { from("file:src/main/resources/data/inbox/?noop=false").routeId("file-route") .unmarshal().jacksonXml(User.class) .log("Unmarshalled message: ${body}") .process(exchange -> { User user = exchange.getIn().getBody(User.class); user.setName(user.getName().toUpperCase()); exchange.getIn().setBody(user); }) .marshal().jacksonXml(User.class) .to("file:src/main/resources/data/outbox/").id("file-route-outbox"); }}
public class WebRoute extends RouteBuilder { @Override public void configure() throws Exception { restConfiguration() .component("servlet") .bindingMode(RestBindingMode.json) .dataFormatProperty("prettyPrint", "true") .enableCORS(true) .port(env.getProperty("server.port", "8080")) .contextPath(contextPath.substring(0, contextPath.length() - 2)); rest("/users") .description("Find all users") .consumes(MediaType.APPLICATION_JSON_VALUE) .produces(MediaType.APPLICATION_JSON_VALUE) .get() .routeId("users-api") .outType(User[].class) .responseMessage() .code(200) .message("All users successfully returned") .endResponseMessage() .to("bean:userService?method=findUsers");
- Test class for FileRouter
@CamelSpringBootTest@SpringBootTest(classes = {MyDemoApplication.class}, properties = {"camel.main.java.java-routes-exclude-pattern=**/WebRoute*"})@MockEndpoints@Slf4j@ActiveProfiles("test")public class MyFileRouteTest { @EndpointInject("mock:file:src/main/resources/data/inbox/") private MockEndpoint mockIn; @EndpointInject("mock:file:src/main/resources/data/outbox/") private MockEndpoint mockOut; @Autowired private CamelContext camelContext; @Autowired private ProducerTemplate template; @Test public void testFiles() throws Exception { mockOut.expectedMessageCount(1); template.sendBody("file:src/main/resources/data/inbox/", "<User><name>John</name></User>"); mockOut.assertIsSatisfied(); }}
my pom :
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.apache.camel.springboot</groupId><artifactId>spring-boot</artifactId><version>4.9.0</version></parent><groupId>com.kiran.pocs.camel.springboot</groupId><artifactId>my-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>my-demo</name><description>my-demo</description><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>21</java.version><java.source.version>21</java.source.version><java.target.version>21</java.target.version><spring-boot-version>3.4.1</spring-boot-version><camel-version>4.9.0</camel-version><lombok-version>1.18.30</lombok-version><mokito-version>5.15.2</mokito-version></properties><dependencyManagement><dependencies><!-- Camel BOM --><dependency><groupId>org.apache.camel.springboot</groupId><artifactId>camel-spring-boot-bom</artifactId><version>${camel-version}</version><type>pom</type><scope>import</scope></dependency><!-- Spring Boot BOM --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot-version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- Spring Boot --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- Camel --><dependency><groupId>org.apache.camel.springboot</groupId><artifactId>camel-spring-boot-starter</artifactId></dependency><!-- include JMX that allows additional information in camel developer console --><dependency><groupId>org.apache.camel.springboot</groupId><artifactId>camel-management-starter</artifactId></dependency><!-- test --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.apache.camel</groupId><artifactId>camel-test-spring-junit5</artifactId><scope>test</scope></dependency><dependency><groupId>org.apache.camel.springboot</groupId><artifactId>camel-jackson-starter</artifactId></dependency><dependency><groupId>org.apache.camel.springboot</groupId><artifactId>camel-jacksonxml-starter</artifactId></dependency><dependency><groupId>org.apache.camel.springboot</groupId><artifactId>camel-rest-starter</artifactId></dependency><dependency><groupId>org.apache.camel.springboot</groupId><artifactId>camel-servlet-starter</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok-version}</version><scope>provided</scope></dependency><dependency><groupId>org.mockito</groupId><artifactId>mockito-core</artifactId><version>${mokito-version}</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok-version}</version></path></annotationProcessorPaths></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot-version}</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.1.2</version><configuration><argLine>-XX:+EnableDynamicAgentLoading</argLine></configuration></plugin></plugins></build></project>
Without my Rest component[i.e WebRoute] enabled test class for File Router is working good.ButWhen I enabled @Component
for WebRouter
I am getting below exceptions:
2025-01-14T13:24:00.665-06:00 WARN 30169 --- [my-demo] [ main] o.s.test.context.TestContextManager : Caught exception while invoking 'beforeTestMethod' callback on TestExecutionListener [org.apache.camel.test.spring.junit5.CamelSpringBootExecutionListener] for test method [public void com.kiran.pocs.camel.springboot.mydemo.routes.MyFileRouteTest.testFiles() throws java.lang.Exception] and test instance [com.kiran.pocs.camel.springboot.mydemo.routes.MyFileRouteTest@2aac6fa7]
org.apache.camel.FailedToStartRouteException: Failed to start route users-api because of class org.apache.camel.support.DefaultInterceptSendToEndpoint cannot be cast to class org.apache.camel.component.servlet.ServletEndpoint (org.apache.camel.support.DefaultInterceptSendToEndpoint and org.apache.camel.component.servlet.ServletEndpoint are in unnamed module of loader 'app') at org.apache.camel.impl.engine.RouteService.setUp(RouteService.java:134) ~[camel-base-engine-4.9.0.jar:4.9.0] at org.apache.camel.impl.engine.InternalRouteStartupManager.doInitRoutes(InternalRouteStartupManager.java:92) ~[camel-base-engine-4.9.0.jar:4.9.0] at org.apache.camel.impl.engine.AbstractCamelContext.doInit(AbstractCamelContext.java:2459) ~[camel-base-engine-4.9.0.jar:4.9.0] at org.apache.camel.support.service.BaseService.init(BaseService.java:85) ~[camel-api-4.9.0.jar:4.9.0] at org.apache.camel.impl.engine.AbstractCamelContext.init(AbstractCamelContext.java:2087) ~[camel-base-engine-4.9.0.jar:4.9.0] at org.apache.camel.support.service.BaseService.start(BaseService.java:115) ~[camel-api-4.9.0.jar:4.9.0]
I am using Apache camel with spring boot with following env:
Java : 21
Apache Camel : 4.9.0
Spring Boot. : 3.4.1