Quantcast
Channel: Active questions tagged rest - Stack Overflow
Viewing all articles
Browse latest Browse all 3630

Maven tests failing when combining File endpoint with rest endpoint due to incompatibility of Servlet class for interception

$
0
0

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");
  1. 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


Viewing all articles
Browse latest Browse all 3630

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>