After migrating to latest citrus dependency, all my request mapping are giving 404. pom.xml:-
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns=".0.0"
xmlns:xsi=";
xsi:schemaLocation=".0.0 .0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>your-artifact-id</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
<springboot.version>3.3.2</springboot.version>
<citrus.simulator.version>3.0.2</citrus.simulator.version>
</properties>
<dependencies>
<dependency>
<groupId>.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
</dependency>
<dependency>
<groupId>.glassfish.jersey.core</groupId>
<artifactId>jersey-common</artifactId>
</dependency>
<dependency>
<groupId>.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>2.26</version>
</dependency>
<dependency>
<groupId>.citrusframework</groupId>
<artifactId>citrus-simulator</artifactId>
<version>3.0.2</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>.citrusframework</groupId>
<artifactId>citrus-simulator-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>jakarta.xml.soap</groupId>
<artifactId>jakarta.xml.soap-api</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>2.5.23</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Config:-
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import .citrusframework.simulator.http.HttpRequestAnnotationScenarioMapper;
import .citrusframework.simulator.http.HttpRequestPathScenarioMapper;
import .citrusframework.simulator.http.SimulatorRestAdapter;
import .citrusframework.simulator.http.SimulatorRestConfigurationProperties;
import .citrusframework.simulator.scenario.mapper.ContentBasedXPathScenarioMapper;
import .citrusframework.simulator.scenario.mapper.ScenarioMapper;
import .citrusframework.simulator.scenario.mapper.ScenarioMappers;
import .springframework.boot.SpringApplication;
import .springframework.boot.autoconfigure.SpringBootApplication;
import .springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import .springframework.context.annotation.Bean;
import .springframework.context.annotation.ComponentScan;
import .springframework.http.HttpStatus;
import com.consol.citrus.endpoint.EndpointAdapter;
import com.consol.citrus.endpoint.adapter.StaticEndpointAdapter;
import com.consol.citrus.http.message.HttpMessage;
import com.consol.citrus.message.Message;
import jakarta.xml.soap.MessageFactory;
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
@componentscan(basePackages = {"com.example.demo.*"})
public class DemoApplication extends SimulatorRestAdapter {
@Override
public String urlMapping(SimulatorRestConfigurationProperties simulatorRestConfiguration) {
return "**";
}
@Override
public EndpointAdapter fallbackEndpointAdapter() {
return new StaticEndpointAdapter() {
@Override
protected Message handleMessageInternal(Message message) {
return new HttpMessage().status(HttpStatus.INTERNAL_SERVER_ERROR);
}
};
}
// Note these run on all requests in order, so avoid collisions!
@Override
public ScenarioMapper scenarioMapper() {
return ScenarioMappers.of(new ContentBasedXPathScenarioMapper().addXPathExpression("//:request-id"),
new HttpRequestPathScenarioMapper(), new HttpRequestAnnotationScenarioMapper());
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
Scenario class:-
package com.example.demo.controller;
import .citrusframework.simulator.scenario.AbstractSimulatorScenario;
import .citrusframework.simulator.scenario.Scenario;
import .citrusframework.simulator.scenario.ScenarioDesigner;
import .springframework.core.io.ClassPathResource;
import .springframework.http.HttpStatus;
import .springframework.web.bind.annotation.RequestMapping;
import .springframework.web.bind.annotation.RequestMethod;
@Scenario("GetCircuit")
@RequestMapping(value = "/sim/accessMigration/v1/inventory/circuits/BBEC.000099..ATI", method = RequestMethod.GET)
public class TestClass extends AbstractSimulatorScenario {
@Override
public void run(ScenarioDesigner scenario) {
scenario.http().receive().get();
scenario.http().send().response(HttpStatus.OK).header("ContentType", "application/json")
.payload(new ClassPathResource("datamanager/GetCircuit.json"));
}
}
Application.properties:- spring.application.name=demo
spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false
logging.level.springframework.web=DEBUG
logging.level.citrusframework=DEBUG
info.simulator.name=REST Simulator
logging.file=debug.log
logging.level.consol.citrus=DEBUG
logging.level.att.mso=DEBUG
logging.level.reflections.Reflections=ERROR
Enable Http REST support
citrus.simulator.rest.enabled=true
citrus.simulator.ws.enabled=true
citrus.simulator.ws.servlet.mapping=/services/ws/*
Default timeout setting
citrus.simulator.default.timeout=120000
citrus.simulator.defaultTimeout=120000
Default message template path
citrus.simulator.templatePath=templates
Default scenario name
citrus.simulator.defaultScenario=Default
Should Citrus validate incoming messages on syntax and semantics
citrus.simulator.templateValidation=true
management.endpoints.web.exposure.include=*
It gives 404 after upgrading to latest citrus framework and java 17.