diff --git a/logDetails.log b/logDetails.log new file mode 100644 index 0000000..28f1488 --- /dev/null +++ b/logDetails.log @@ -0,0 +1,7945 @@ +2025-05-22 12:32:12.443 INFO 12344 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 12344 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 12:32:12.472 DEBUG 12344 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 12:32:12.474 INFO 12344 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 12:32:12.988 INFO 12344 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 12:32:13.051 INFO 12344 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 12:32:14.912 WARN 12344 --- [restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'passwordEncoder' defined in class path resource [com/crewmeister/cmcodingchallenge/security/PasswordConfig.class]: Cannot register bean definition [Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=passwordConfig; factoryMethodName=passwordEncoder; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/crewmeister/cmcodingchallenge/security/PasswordConfig.class]] for bean 'passwordEncoder': There is already [Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=myUserDetailsService; factoryMethodName=passwordEncoder; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/crewmeister/cmcodingchallenge/security/MyUserDetailsService.class]] bound. +2025-05-22 12:32:14.938 INFO 12344 --- [restartedMain] ConditionEvaluationReportLoggingListener : + +Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. +2025-05-22 12:32:14.983 ERROR 12344 --- [restartedMain] o.s.b.d.LoggingFailureAnalysisReporter : + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +The bean 'passwordEncoder', defined in class path resource [com/crewmeister/cmcodingchallenge/security/PasswordConfig.class], could not be registered. A bean with that name has already been defined in class path resource [com/crewmeister/cmcodingchallenge/security/MyUserDetailsService.class] and overriding is disabled. + +Action: + +Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true + +2025-05-22 12:33:22.502 INFO 6944 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 6944 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 12:33:22.507 DEBUG 6944 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 12:33:22.508 INFO 6944 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 12:33:22.640 INFO 6944 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 12:33:22.641 INFO 6944 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 12:33:24.009 INFO 6944 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 12:33:24.110 INFO 6944 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 85 ms. Found 1 JPA repository interfaces. +2025-05-22 12:33:24.703 INFO 6944 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$40c4f373] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 12:33:25.497 INFO 6944 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 12:33:25.517 INFO 6944 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 12:33:25.518 INFO 6944 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 12:33:25.636 INFO 6944 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 12:33:25.637 INFO 6944 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2992 ms +2025-05-22 12:33:25.704 INFO 6944 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 12:33:25.920 INFO 6944 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 12:33:25.930 INFO 6944 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 12:33:26.101 INFO 6944 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 12:33:26.201 INFO 6944 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 12:33:26.450 INFO 6944 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 12:33:26.652 INFO 6944 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 12:33:27.812 INFO 6944 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 12:33:27.826 INFO 6944 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 12:33:27.855 INFO 6944 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 12:33:28.836 WARN 6944 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 12:33:29.087 INFO 6944 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@59232f39, org.springframework.security.web.context.SecurityContextPersistenceFilter@16acd7e2, org.springframework.security.web.header.HeaderWriterFilter@4dc027bb, org.springframework.security.web.authentication.logout.LogoutFilter@15e5218a, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@57bbec7a, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@15e9b550, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@3633b2c6, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@112a9daa, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@4f929a9e, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@5208a0a0, org.springframework.security.web.session.SessionManagementFilter@414093d, org.springframework.security.web.access.ExceptionTranslationFilter@1085352e, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@3a5275e1] +2025-05-22 12:33:29.279 INFO 6944 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 12:33:29.622 INFO 6944 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 12:33:29.637 INFO 6944 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 7.975 seconds (JVM running for 9.068) +2025-05-22 12:34:53.531 INFO 6944 --- [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 12:34:53.533 INFO 6944 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 12:34:53.535 INFO 6944 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms +2025-05-22 12:34:53.879 INFO 6944 --- [http-nio-8080-exec-1] c.c.c.c.CurrencyController : Adding the list of Currency +2025-05-22 12:35:06.870 INFO 6944 --- [http-nio-8080-exec-2] c.c.c.c.CurrencyController : Fetching the list of Currencies +2025-05-22 12:37:08.329 WARN 6944 --- [http-nio-8080-exec-4] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [287] milliseconds. +2025-05-22 14:34:19.505 INFO 8244 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 8244 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 14:34:19.509 DEBUG 8244 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 14:34:19.511 INFO 8244 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 14:34:19.631 INFO 8244 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 14:34:19.635 INFO 8244 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 14:34:20.966 INFO 8244 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 14:34:21.092 INFO 8244 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 105 ms. Found 1 JPA repository interfaces. +2025-05-22 14:34:21.666 INFO 8244 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$857aef2e] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 14:34:22.403 INFO 8244 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 14:34:22.421 INFO 8244 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 14:34:22.421 INFO 8244 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 14:34:22.551 INFO 8244 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 14:34:22.552 INFO 8244 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2870 ms +2025-05-22 14:34:22.621 INFO 8244 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 14:34:22.807 INFO 8244 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 14:34:22.818 INFO 8244 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 14:34:23.055 INFO 8244 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 14:34:23.161 INFO 8244 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 14:34:23.389 INFO 8244 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 14:34:23.584 INFO 8244 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 14:34:24.640 INFO 8244 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 14:34:24.660 INFO 8244 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 14:34:24.689 INFO 8244 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 14:34:25.390 WARN 8244 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 14:34:25.626 INFO 8244 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@30467a73, org.springframework.security.web.context.SecurityContextPersistenceFilter@203d02f9, org.springframework.security.web.header.HeaderWriterFilter@6b57958c, org.springframework.security.web.authentication.logout.LogoutFilter@68eed210, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@75774921, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@1c7f945d, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@6d6f0611, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@80f3cb4, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@6e83e44b, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@32c2965b, org.springframework.security.web.session.SessionManagementFilter@339d87fe, org.springframework.security.web.access.ExceptionTranslationFilter@67087d4f, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@d5fe616] +2025-05-22 14:34:25.816 INFO 8244 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 14:34:26.208 INFO 8244 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 14:34:26.226 INFO 8244 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 7.453 seconds (JVM running for 8.405) +2025-05-22 14:34:37.861 INFO 8244 --- [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 14:34:37.865 INFO 8244 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 14:34:37.868 INFO 8244 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms +2025-05-22 14:34:38.246 WARN 8244 --- [http-nio-8080-exec-1] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [323] milliseconds. +2025-05-22 15:06:30.698 INFO 1036 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 1036 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 15:06:30.702 DEBUG 1036 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 15:06:30.704 INFO 1036 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 15:06:30.866 INFO 1036 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 15:06:30.869 INFO 1036 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 15:06:32.270 INFO 1036 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 15:06:32.373 INFO 1036 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 89 ms. Found 2 JPA repository interfaces. +2025-05-22 15:06:32.860 INFO 1036 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$d2a74f34] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 15:06:33.589 INFO 1036 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 15:06:33.606 INFO 1036 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 15:06:33.607 INFO 1036 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 15:06:33.736 INFO 1036 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 15:06:33.737 INFO 1036 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2865 ms +2025-05-22 15:06:33.809 INFO 1036 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:06:34.001 INFO 1036 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 15:06:34.010 INFO 1036 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 15:06:34.189 INFO 1036 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 15:06:34.274 INFO 1036 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 15:06:34.498 INFO 1036 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 15:06:34.693 INFO 1036 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 15:06:35.909 INFO 1036 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 15:06:35.923 INFO 1036 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 15:06:35.954 INFO 1036 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 15:06:36.946 WARN 1036 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 15:06:37.181 INFO 1036 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@3e77924c, org.springframework.security.web.context.SecurityContextPersistenceFilter@6d5bb9c3, org.springframework.security.web.header.HeaderWriterFilter@6beef94c, org.springframework.security.web.authentication.logout.LogoutFilter@6ac23203, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@16480846, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@40dd38e9, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@891ba89, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7c3af82a, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@e241406, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@4db5be11, org.springframework.security.web.session.SessionManagementFilter@1ed22a73, org.springframework.security.web.access.ExceptionTranslationFilter@46cdc7cb, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@3c5ebf54] +2025-05-22 15:06:37.368 INFO 1036 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 15:06:37.694 INFO 1036 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 15:06:37.710 INFO 1036 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 7.74 seconds (JVM running for 8.631) +2025-05-22 15:06:45.327 INFO 1036 --- [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 15:06:45.328 INFO 1036 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 15:06:45.330 INFO 1036 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms +2025-05-22 15:06:45.776 WARN 1036 --- [http-nio-8080-exec-1] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [349] milliseconds. +2025-05-22 15:08:03.691 INFO 1036 --- [http-nio-8080-exec-1] c.c.c.c.CurrencyController : Fetching the list of Currencies +2025-05-22 15:13:32.750 INFO 7544 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 7544 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 15:13:32.769 DEBUG 7544 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 15:13:32.774 INFO 7544 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 15:13:32.996 INFO 7544 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 15:13:32.998 INFO 7544 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 15:13:35.388 INFO 7544 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 15:13:35.550 INFO 7544 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 137 ms. Found 2 JPA repository interfaces. +2025-05-22 15:13:37.314 INFO 7544 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$f641bfe9] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 15:13:39.197 INFO 7544 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 15:13:39.231 INFO 7544 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 15:13:39.232 INFO 7544 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 15:13:39.462 INFO 7544 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 15:13:39.463 INFO 7544 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 6462 ms +2025-05-22 15:13:39.600 INFO 7544 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:13:39.911 INFO 7544 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 15:13:39.926 INFO 7544 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 15:13:40.251 INFO 7544 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 15:13:40.396 INFO 7544 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 15:13:40.798 INFO 7544 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 15:13:41.100 INFO 7544 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 15:13:43.604 INFO 7544 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 15:13:43.632 INFO 7544 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 15:13:43.683 INFO 7544 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 15:13:44.866 WARN 7544 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 15:13:45.199 INFO 7544 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@78426005, org.springframework.security.web.context.SecurityContextPersistenceFilter@15610f4d, org.springframework.security.web.header.HeaderWriterFilter@71630a3a, org.springframework.security.web.authentication.logout.LogoutFilter@2a8ddce2, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@68abbd27, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@4459fc36, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@7a2578b3, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7089980b, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@6a73515a, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@7fe5d08c, org.springframework.security.web.session.SessionManagementFilter@7334c58d, org.springframework.security.web.access.ExceptionTranslationFilter@43b58d6e, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@17215a2d] +2025-05-22 15:13:45.617 INFO 7544 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 15:13:46.229 INFO 7544 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 15:13:46.263 INFO 7544 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 16.145 seconds (JVM running for 17.456) +2025-05-22 15:13:52.293 WARN 7544 --- [http-nio-8080-exec-1] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [418] milliseconds. +2025-05-22 15:13:52.328 INFO 7544 --- [http-nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 15:13:52.329 INFO 7544 --- [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 15:13:52.331 INFO 7544 --- [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms +2025-05-22 15:14:38.137 INFO 3224 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 3224 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 15:14:38.142 DEBUG 3224 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 15:14:38.143 INFO 3224 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 15:14:38.228 INFO 3224 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 15:14:38.230 INFO 3224 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 15:14:39.357 INFO 3224 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 15:14:39.454 INFO 3224 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 82 ms. Found 2 JPA repository interfaces. +2025-05-22 15:14:39.905 INFO 3224 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$2936256e] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 15:14:40.605 INFO 3224 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 15:14:40.621 INFO 3224 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 15:14:40.622 INFO 3224 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 15:14:40.745 INFO 3224 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 15:14:40.746 INFO 3224 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2514 ms +2025-05-22 15:14:40.812 INFO 3224 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:14:40.966 INFO 3224 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 15:14:40.974 INFO 3224 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 15:14:41.156 INFO 3224 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 15:14:41.239 INFO 3224 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 15:14:41.467 INFO 3224 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 15:14:41.635 INFO 3224 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 15:14:42.599 INFO 3224 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 15:14:42.612 INFO 3224 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 15:14:42.638 INFO 3224 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 15:14:43.399 WARN 3224 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 15:14:43.667 INFO 3224 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@3625c05, org.springframework.security.web.context.SecurityContextPersistenceFilter@108c39e5, org.springframework.security.web.header.HeaderWriterFilter@1d4a49f1, org.springframework.security.web.authentication.logout.LogoutFilter@51024efd, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@3564a253, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@21fe7b07, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@7587ca4f, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@3d7d4c97, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@496720d2, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@790bb896, org.springframework.security.web.session.SessionManagementFilter@33c4ae13, org.springframework.security.web.access.ExceptionTranslationFilter@14e13b79, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@983c606] +2025-05-22 15:14:43.839 INFO 3224 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 15:14:44.141 INFO 3224 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 15:14:44.156 INFO 3224 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 6.693 seconds (JVM running for 7.474) +2025-05-22 15:14:54.349 WARN 3224 --- [http-nio-8080-exec-1] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [400] milliseconds. +2025-05-22 15:14:54.377 INFO 3224 --- [http-nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 15:14:54.378 INFO 3224 --- [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 15:14:54.379 INFO 3224 --- [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms +2025-05-22 15:16:49.208 INFO 5548 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 5548 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 15:16:49.213 DEBUG 5548 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 15:16:49.214 INFO 5548 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 15:16:49.296 INFO 5548 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 15:16:49.297 INFO 5548 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 15:16:50.399 INFO 5548 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 15:16:50.494 INFO 5548 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 80 ms. Found 2 JPA repository interfaces. +2025-05-22 15:16:50.944 INFO 5548 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$11939be5] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 15:16:51.691 INFO 5548 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 15:16:51.706 INFO 5548 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 15:16:51.707 INFO 5548 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 15:16:51.849 INFO 5548 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 15:16:51.850 INFO 5548 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2552 ms +2025-05-22 15:16:51.954 INFO 5548 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:16:52.119 INFO 5548 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 15:16:52.130 INFO 5548 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 15:16:52.340 INFO 5548 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 15:16:52.443 INFO 5548 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 15:16:52.711 INFO 5548 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 15:16:52.876 INFO 5548 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 15:16:54.296 INFO 5548 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 15:16:54.315 INFO 5548 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 15:16:54.347 INFO 5548 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 15:16:55.283 WARN 5548 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 15:16:55.479 INFO 5548 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@46536e9d, org.springframework.security.web.context.SecurityContextPersistenceFilter@252804fe, org.springframework.security.web.header.HeaderWriterFilter@7b20a526, org.springframework.security.web.authentication.logout.LogoutFilter@60a7540e, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@efc87b5, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@361fbec1, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@1e085b24, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@55ede79a, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@5e8ac6ea, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@7c45a479, org.springframework.security.web.session.SessionManagementFilter@34e3c043, org.springframework.security.web.access.ExceptionTranslationFilter@4e9b218c, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@765f3b50] +2025-05-22 15:16:55.661 INFO 5548 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 15:16:55.982 INFO 5548 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 15:16:55.998 INFO 5548 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 7.497 seconds (JVM running for 8.384) +2025-05-22 15:17:04.463 WARN 5548 --- [http-nio-8080-exec-1] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [294] milliseconds. +2025-05-22 15:17:04.480 INFO 5548 --- [http-nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 15:17:04.481 INFO 5548 --- [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 15:17:04.483 INFO 5548 --- [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms +2025-05-22 15:19:49.354 INFO 9096 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 9096 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 15:19:49.359 DEBUG 9096 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 15:19:49.360 INFO 9096 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 15:19:49.468 INFO 9096 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 15:19:49.470 INFO 9096 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 15:19:50.830 INFO 9096 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 15:19:50.938 INFO 9096 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 91 ms. Found 2 JPA repository interfaces. +2025-05-22 15:19:51.436 INFO 9096 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$2f2774ee] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 15:19:52.180 INFO 9096 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 15:19:52.197 INFO 9096 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 15:19:52.197 INFO 9096 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 15:19:52.320 INFO 9096 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 15:19:52.321 INFO 9096 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2847 ms +2025-05-22 15:19:52.394 INFO 9096 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:19:52.593 INFO 9096 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 15:19:52.606 INFO 9096 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:file:./data/testdb' +2025-05-22 15:19:52.776 INFO 9096 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 15:19:52.866 INFO 9096 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 15:19:53.095 INFO 9096 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 15:19:53.277 INFO 9096 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 15:19:54.289 INFO 9096 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 15:19:54.302 INFO 9096 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 15:19:54.331 INFO 9096 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 15:19:55.166 WARN 9096 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 15:19:55.375 INFO 9096 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@820cceb, org.springframework.security.web.context.SecurityContextPersistenceFilter@1f81602e, org.springframework.security.web.header.HeaderWriterFilter@4347071d, org.springframework.security.web.authentication.logout.LogoutFilter@48aa2409, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@3cb03941, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@6994b988, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@575f61db, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@93e60f8, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@1644317e, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@50e2377b, org.springframework.security.web.session.SessionManagementFilter@6ceaa5aa, org.springframework.security.web.access.ExceptionTranslationFilter@4ca992f8, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@65341cbc] +2025-05-22 15:19:55.563 INFO 9096 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 15:19:55.917 INFO 9096 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 15:19:55.932 INFO 9096 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 7.322 seconds (JVM running for 8.431) +2025-05-22 15:20:04.217 WARN 9096 --- [http-nio-8080-exec-1] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [306] milliseconds. +2025-05-22 15:20:04.241 INFO 9096 --- [http-nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 15:20:04.242 INFO 9096 --- [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 15:20:04.244 INFO 9096 --- [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms +2025-05-22 15:20:47.397 INFO 8252 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 8252 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 15:20:47.403 DEBUG 8252 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 15:20:47.404 INFO 8252 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 15:20:47.598 INFO 8252 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 15:20:47.598 INFO 8252 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 15:20:48.973 INFO 8252 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 15:20:49.102 INFO 8252 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 108 ms. Found 2 JPA repository interfaces. +2025-05-22 15:20:49.631 INFO 8252 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$87aa914f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 15:20:50.480 INFO 8252 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 15:20:50.501 INFO 8252 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 15:20:50.502 INFO 8252 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 15:20:50.643 INFO 8252 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 15:20:50.644 INFO 8252 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3042 ms +2025-05-22 15:20:50.734 INFO 8252 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:20:52.266 ERROR 8252 --- [restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. + +org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:461) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:170) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.validateUserAndPassword(Engine.java:357) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:176) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:166) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:29) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:173) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:152) ~[h2-1.4.200.jar:1.4.200] + at org.h2.Driver.connect(Driver.java:69) ~[h2-1.4.200.jar:1.4.200] + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.4.5.jar:na] + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.lambda$h2Console$0(H2ConsoleAutoConfiguration.java:67) ~[spring-boot-autoconfigure-2.4.1.jar:2.4.1] + at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.ifAvailable(DefaultListableBeanFactory.java:2022) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.h2Console(H2ConsoleAutoConfiguration.java:66) ~[spring-boot-autoconfigure-2.4.1.jar:2.4.1] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1179) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:571) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:212) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:203) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:97) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.(ServletContextInitializerBeans.java:86) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:259) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:233) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:53) ~[spring-boot-2.4.1.jar:2.4.1] + at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140) ~[na:na] + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:843) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140) ~[na:na] + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardService.startInternal(StandardService.java:434) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.startup.Tomcat.start(Tomcat.java:486) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:123) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.(TomcatWebServer.java:104) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:451) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:200) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:181) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:159) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:582) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[spring-boot-2.4.1.jar:2.4.1] + at com.crewmeister.cmcodingchallenge.CmCodingChallengeApplication.main(CmCodingChallengeApplication.java:12) ~[classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.4.1.jar:2.4.1] + +2025-05-22 15:20:52.442 INFO 8252 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 15:20:52.563 INFO 8252 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 15:20:52.910 INFO 8252 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 15:20:53.159 INFO 8252 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:20:54.794 ERROR 8252 --- [restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. + +org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:461) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:170) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.validateUserAndPassword(Engine.java:357) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:176) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:166) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:29) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:173) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:152) ~[h2-1.4.200.jar:1.4.200] + at org.h2.Driver.connect(Driver.java:69) ~[h2-1.4.200.jar:1.4.200] + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.4.5.jar:na] + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:176) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:127) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1224) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1847) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:609) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1159) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[spring-boot-2.4.1.jar:2.4.1] + at com.crewmeister.cmcodingchallenge.CmCodingChallengeApplication.main(CmCodingChallengeApplication.java:12) ~[classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.4.1.jar:2.4.1] + +2025-05-22 15:20:54.805 WARN 8252 --- [restartedMain] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000342: Could not obtain connection to query metadata + +org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:461) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:170) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.validateUserAndPassword(Engine.java:357) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:176) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:166) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:29) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:173) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:152) ~[h2-1.4.200.jar:1.4.200] + at org.h2.Driver.connect(Driver.java:69) ~[h2-1.4.200.jar:1.4.200] + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.4.5.jar:na] + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:176) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:127) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1224) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1847) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:609) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1159) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[spring-boot-2.4.1.jar:2.4.1] + at com.crewmeister.cmcodingchallenge.CmCodingChallengeApplication.main(CmCodingChallengeApplication.java:12) ~[classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.4.1.jar:2.4.1] + +2025-05-22 15:20:54.826 INFO 8252 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 15:20:56.150 INFO 8252 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:20:58.192 ERROR 8252 --- [restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. + +org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:461) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:170) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.validateUserAndPassword(Engine.java:357) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:176) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:166) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:29) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:173) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:152) ~[h2-1.4.200.jar:1.4.200] + at org.h2.Driver.connect(Driver.java:69) ~[h2-1.4.200.jar:1.4.200] + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.4.5.jar:na] + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:43) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.internal.exec.ImprovedExtractionContextImpl.getJdbcConnection(ImprovedExtractionContextImpl.java:60) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:40) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.initializeSequences(DatabaseInformationImpl.java:65) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.(DatabaseInformationImpl.java:59) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:155) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:96) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:184) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:73) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:316) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:469) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1259) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1847) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:609) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1159) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[spring-boot-2.4.1.jar:2.4.1] + at com.crewmeister.cmcodingchallenge.CmCodingChallengeApplication.main(CmCodingChallengeApplication.java:12) ~[classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.4.1.jar:2.4.1] + +2025-05-22 15:20:58.195 WARN 8252 --- [restartedMain] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 28000, SQLState: 28000 +2025-05-22 15:20:58.196 ERROR 8252 --- [restartedMain] o.h.engine.jdbc.spi.SqlExceptionHelper : Wrong user name or password [28000-200] +2025-05-22 15:20:58.207 ERROR 8252 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Failed to initialize JPA EntityManagerFactory: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution +2025-05-22 15:20:58.209 WARN 8252 --- [restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution +2025-05-22 15:20:58.214 INFO 8252 --- [restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat] +2025-05-22 15:20:58.221 WARN 8252 --- [restartedMain] o.a.c.loader.WebappClassLoaderBase : The web application [ROOT] appears to have started a thread named [MVStore background writer nio:C:/Users/LENOVO/IntellijProjects/java-coding-challenge/data/testdb.mv.db] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: + java.base@11.0.27/java.lang.Object.wait(Native Method) + app//org.h2.mvstore.MVStore$BackgroundWriterThread.run(MVStore.java:3283) +2025-05-22 15:20:58.245 INFO 8252 --- [restartedMain] ConditionEvaluationReportLoggingListener : + +Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. +2025-05-22 15:20:58.294 ERROR 8252 --- [restartedMain] o.s.boot.SpringApplication : Application run failed + +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1788) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:609) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1159) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[spring-boot-2.4.1.jar:2.4.1] + at com.crewmeister.cmcodingchallenge.CmCodingChallengeApplication.main(CmCodingChallengeApplication.java:12) ~[classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.4.1.jar:2.4.1] +Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1847) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784) ~[spring-beans-5.3.2.jar:5.3.2] + ... 22 common frames omitted +Caused by: org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution + at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:48) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:69) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.internal.exec.ImprovedExtractionContextImpl.getJdbcConnection(ImprovedExtractionContextImpl.java:60) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:40) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.initializeSequences(DatabaseInformationImpl.java:65) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.(DatabaseInformationImpl.java:59) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:155) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:96) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:184) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:73) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:316) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:469) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1259) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-5.3.2.jar:5.3.2] + ... 26 common frames omitted +Caused by: org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:461) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:170) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.validateUserAndPassword(Engine.java:357) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:176) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:166) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:29) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:173) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:152) ~[h2-1.4.200.jar:1.4.200] + at org.h2.Driver.connect(Driver.java:69) ~[h2-1.4.200.jar:1.4.200] + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.4.5.jar:na] + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:43) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + ... 40 common frames omitted + +2025-05-22 15:21:58.080 INFO 1112 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 1112 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 15:21:58.086 DEBUG 1112 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 15:21:58.088 INFO 1112 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 15:21:58.245 INFO 1112 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 15:21:58.247 INFO 1112 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 15:21:59.864 INFO 1112 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 15:22:00.005 INFO 1112 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 119 ms. Found 2 JPA repository interfaces. +2025-05-22 15:22:00.628 INFO 1112 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$986ed89a] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 15:22:01.462 INFO 1112 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 15:22:01.477 INFO 1112 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 15:22:01.478 INFO 1112 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 15:22:01.635 INFO 1112 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 15:22:01.641 INFO 1112 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3389 ms +2025-05-22 15:22:01.776 INFO 1112 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:22:03.301 ERROR 1112 --- [restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. + +org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:461) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:170) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.validateUserAndPassword(Engine.java:357) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:176) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:166) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:29) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:173) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:152) ~[h2-1.4.200.jar:1.4.200] + at org.h2.Driver.connect(Driver.java:69) ~[h2-1.4.200.jar:1.4.200] + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.4.5.jar:na] + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.lambda$h2Console$0(H2ConsoleAutoConfiguration.java:67) ~[spring-boot-autoconfigure-2.4.1.jar:2.4.1] + at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.ifAvailable(DefaultListableBeanFactory.java:2022) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.h2Console(H2ConsoleAutoConfiguration.java:66) ~[spring-boot-autoconfigure-2.4.1.jar:2.4.1] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1179) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:571) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:212) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:203) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:97) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.(ServletContextInitializerBeans.java:86) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:259) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:233) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:53) ~[spring-boot-2.4.1.jar:2.4.1] + at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140) ~[na:na] + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:843) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140) ~[na:na] + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardService.startInternal(StandardService.java:434) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.startup.Tomcat.start(Tomcat.java:486) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:123) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.(TomcatWebServer.java:104) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:451) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:200) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:181) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:159) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:582) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[spring-boot-2.4.1.jar:2.4.1] + at com.crewmeister.cmcodingchallenge.CmCodingChallengeApplication.main(CmCodingChallengeApplication.java:12) ~[classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.4.1.jar:2.4.1] + +2025-05-22 15:22:03.459 INFO 1112 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 15:22:03.560 INFO 1112 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 15:22:03.822 INFO 1112 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 15:22:04.001 INFO 1112 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:22:05.617 ERROR 1112 --- [restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. + +org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:461) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:170) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.validateUserAndPassword(Engine.java:357) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:176) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:166) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:29) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:173) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:152) ~[h2-1.4.200.jar:1.4.200] + at org.h2.Driver.connect(Driver.java:69) ~[h2-1.4.200.jar:1.4.200] + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.4.5.jar:na] + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:176) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:127) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1224) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1847) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:609) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1159) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[spring-boot-2.4.1.jar:2.4.1] + at com.crewmeister.cmcodingchallenge.CmCodingChallengeApplication.main(CmCodingChallengeApplication.java:12) ~[classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.4.1.jar:2.4.1] + +2025-05-22 15:22:05.631 WARN 1112 --- [restartedMain] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000342: Could not obtain connection to query metadata + +org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:461) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:170) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.validateUserAndPassword(Engine.java:357) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:176) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:166) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:29) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:173) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:152) ~[h2-1.4.200.jar:1.4.200] + at org.h2.Driver.connect(Driver.java:69) ~[h2-1.4.200.jar:1.4.200] + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.4.5.jar:na] + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:176) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:127) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1224) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1847) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:609) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1159) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[spring-boot-2.4.1.jar:2.4.1] + at com.crewmeister.cmcodingchallenge.CmCodingChallengeApplication.main(CmCodingChallengeApplication.java:12) ~[classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.4.1.jar:2.4.1] + +2025-05-22 15:22:05.662 INFO 1112 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 15:22:06.500 INFO 1112 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:22:08.580 ERROR 1112 --- [restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. + +org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:461) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:170) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.validateUserAndPassword(Engine.java:357) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:176) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:166) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:29) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:173) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:152) ~[h2-1.4.200.jar:1.4.200] + at org.h2.Driver.connect(Driver.java:69) ~[h2-1.4.200.jar:1.4.200] + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.4.5.jar:na] + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:43) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.internal.exec.ImprovedExtractionContextImpl.getJdbcConnection(ImprovedExtractionContextImpl.java:60) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:40) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.initializeSequences(DatabaseInformationImpl.java:65) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.(DatabaseInformationImpl.java:59) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:155) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:96) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:184) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:73) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:316) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:469) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1259) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1847) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:609) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1159) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[spring-boot-2.4.1.jar:2.4.1] + at com.crewmeister.cmcodingchallenge.CmCodingChallengeApplication.main(CmCodingChallengeApplication.java:12) ~[classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.4.1.jar:2.4.1] + +2025-05-22 15:22:08.588 WARN 1112 --- [restartedMain] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 28000, SQLState: 28000 +2025-05-22 15:22:08.590 ERROR 1112 --- [restartedMain] o.h.engine.jdbc.spi.SqlExceptionHelper : Wrong user name or password [28000-200] +2025-05-22 15:22:08.602 ERROR 1112 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Failed to initialize JPA EntityManagerFactory: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution +2025-05-22 15:22:08.604 WARN 1112 --- [restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution +2025-05-22 15:22:08.609 INFO 1112 --- [restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat] +2025-05-22 15:22:08.616 WARN 1112 --- [restartedMain] o.a.c.loader.WebappClassLoaderBase : The web application [ROOT] appears to have started a thread named [MVStore background writer nio:C:/Users/LENOVO/IntellijProjects/java-coding-challenge/data/testdb.mv.db] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: + java.base@11.0.27/java.lang.Object.wait(Native Method) + app//org.h2.mvstore.MVStore$BackgroundWriterThread.run(MVStore.java:3283) +2025-05-22 15:22:08.633 INFO 1112 --- [restartedMain] ConditionEvaluationReportLoggingListener : + +Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. +2025-05-22 15:22:08.666 ERROR 1112 --- [restartedMain] o.s.boot.SpringApplication : Application run failed + +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1788) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:609) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1159) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[spring-boot-2.4.1.jar:2.4.1] + at com.crewmeister.cmcodingchallenge.CmCodingChallengeApplication.main(CmCodingChallengeApplication.java:12) ~[classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.4.1.jar:2.4.1] +Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1847) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784) ~[spring-beans-5.3.2.jar:5.3.2] + ... 22 common frames omitted +Caused by: org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution + at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:48) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:69) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.internal.exec.ImprovedExtractionContextImpl.getJdbcConnection(ImprovedExtractionContextImpl.java:60) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:40) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.initializeSequences(DatabaseInformationImpl.java:65) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.(DatabaseInformationImpl.java:59) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:155) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:96) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:184) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:73) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:316) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:469) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1259) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.3.2.jar:5.3.2] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-5.3.2.jar:5.3.2] + ... 26 common frames omitted +Caused by: org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:461) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:170) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.validateUserAndPassword(Engine.java:357) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:176) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:166) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.Engine.createSession(Engine.java:29) ~[h2-1.4.200.jar:1.4.200] + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:173) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:152) ~[h2-1.4.200.jar:1.4.200] + at org.h2.Driver.connect(Driver.java:69) ~[h2-1.4.200.jar:1.4.200] + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.4.5.jar:na] + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:43) ~[hibernate-core-5.4.25.Final.jar:5.4.25.Final] + ... 40 common frames omitted + +2025-05-22 15:22:56.317 INFO 7444 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 7444 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 15:22:56.321 DEBUG 7444 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 15:22:56.322 INFO 7444 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 15:22:56.409 INFO 7444 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 15:22:56.409 INFO 7444 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 15:22:57.590 INFO 7444 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 15:22:57.691 INFO 7444 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 87 ms. Found 2 JPA repository interfaces. +2025-05-22 15:22:58.163 INFO 7444 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$2f2774ee] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 15:22:58.879 INFO 7444 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 15:22:58.892 INFO 7444 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 15:22:58.892 INFO 7444 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 15:22:59.005 INFO 7444 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 15:22:59.006 INFO 7444 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2595 ms +2025-05-22 15:22:59.073 INFO 7444 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:22:59.264 INFO 7444 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 15:22:59.273 INFO 7444 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:file:./data/testdb' +2025-05-22 15:22:59.426 INFO 7444 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 15:22:59.517 INFO 7444 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 15:22:59.680 INFO 7444 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 15:22:59.849 INFO 7444 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 15:23:00.796 INFO 7444 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 15:23:00.809 INFO 7444 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 15:23:00.838 INFO 7444 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 15:23:01.594 WARN 7444 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 15:23:01.813 INFO 7444 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@24f1c596, org.springframework.security.web.context.SecurityContextPersistenceFilter@2219d728, org.springframework.security.web.header.HeaderWriterFilter@a46d91b, org.springframework.security.web.authentication.logout.LogoutFilter@654507ac, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@7d59f806, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@48aa2409, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@62b63290, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@4b527a80, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@6e9e5cec, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@472d07cb, org.springframework.security.web.session.SessionManagementFilter@712a603a, org.springframework.security.web.access.ExceptionTranslationFilter@13390a6c, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@7eb12c97] +2025-05-22 15:23:02.038 INFO 7444 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 15:23:02.405 INFO 7444 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 15:23:02.421 INFO 7444 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 6.799 seconds (JVM running for 7.524) +2025-05-22 15:23:24.517 WARN 7444 --- [http-nio-8080-exec-1] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [321] milliseconds. +2025-05-22 15:23:24.535 INFO 7444 --- [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 15:23:24.536 INFO 7444 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 15:23:24.539 INFO 7444 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms +2025-05-22 15:28:17.224 INFO 13040 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 13040 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 15:28:17.228 DEBUG 13040 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 15:28:17.229 INFO 13040 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 15:28:17.316 INFO 13040 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 15:28:17.317 INFO 13040 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 15:28:18.654 INFO 13040 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 15:28:18.748 INFO 13040 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 80 ms. Found 2 JPA repository interfaces. +2025-05-22 15:28:19.239 INFO 13040 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$a0bc454c] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 15:28:20.286 INFO 13040 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 15:28:20.322 INFO 13040 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 15:28:20.326 INFO 13040 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 15:28:20.498 INFO 13040 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 15:28:20.500 INFO 13040 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3176 ms +2025-05-22 15:28:20.642 INFO 13040 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:28:20.916 INFO 13040 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 15:28:20.924 INFO 13040 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:file:./data/testdb' +2025-05-22 15:28:21.098 INFO 13040 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 15:28:21.195 INFO 13040 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 15:28:21.437 INFO 13040 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 15:28:21.615 INFO 13040 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 15:28:22.659 INFO 13040 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 15:28:22.675 INFO 13040 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 15:28:22.708 INFO 13040 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 15:28:23.524 WARN 13040 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 15:28:23.796 INFO 13040 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5637c2c4, org.springframework.security.web.context.SecurityContextPersistenceFilter@342af959, org.springframework.security.web.header.HeaderWriterFilter@69ceed48, org.springframework.security.web.authentication.logout.LogoutFilter@415d0955, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@47bcdfca, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@55bfeb04, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@5e16a68c, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@2ae444a5, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@188f36b1, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@5d25946b, org.springframework.security.web.session.SessionManagementFilter@48227365, org.springframework.security.web.access.ExceptionTranslationFilter@7cf02db0, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@25129933] +2025-05-22 15:28:24.030 INFO 13040 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 15:28:24.467 INFO 13040 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 15:28:24.483 INFO 13040 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 8.039 seconds (JVM running for 9.041) +2025-05-22 15:28:32.771 WARN 13040 --- [http-nio-8080-exec-1] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [376] milliseconds. +2025-05-22 15:28:32.786 INFO 13040 --- [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 15:28:32.787 INFO 13040 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 15:28:32.790 INFO 13040 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 3 ms +2025-05-22 15:32:00.515 INFO 4108 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 4108 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 15:32:00.521 DEBUG 4108 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 15:32:00.527 INFO 4108 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 15:32:00.743 INFO 4108 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 15:32:00.745 INFO 4108 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 15:32:02.758 INFO 4108 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 15:32:02.895 INFO 4108 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 118 ms. Found 2 JPA repository interfaces. +2025-05-22 15:32:03.649 INFO 4108 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$ff81cb2c] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 15:32:04.665 INFO 4108 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 15:32:04.686 INFO 4108 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 15:32:04.690 INFO 4108 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 15:32:04.865 INFO 4108 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 15:32:04.867 INFO 4108 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 4114 ms +2025-05-22 15:32:04.994 INFO 4108 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:32:05.236 INFO 4108 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 15:32:05.250 INFO 4108 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 15:32:05.547 INFO 4108 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 15:32:05.685 INFO 4108 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 15:32:06.032 INFO 4108 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 15:32:06.317 INFO 4108 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 15:32:07.977 INFO 4108 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 15:32:08.010 INFO 4108 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 15:32:08.077 INFO 4108 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 15:32:08.111 WARN 4108 --- [restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of URL [file:/C:/Users/LENOVO/IntellijProjects/java-coding-challenge/target/classes/data.sql]: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, role VARCHAR(50) NOT NULL ); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "USERS" already exists; SQL statement: +CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, role VARCHAR(50) NOT NULL ) [42101-200] +2025-05-22 15:32:08.347 WARN 4108 --- [restartedMain] o.s.b.f.support.DisposableBeanAdapter : Invocation of destroy method failed on bean with name 'inMemoryDatabaseShutdownExecutor': org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] +2025-05-22 15:32:08.348 INFO 4108 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... +2025-05-22 15:32:08.381 INFO 4108 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. +2025-05-22 15:32:08.394 INFO 4108 --- [restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat] +2025-05-22 15:32:08.442 INFO 4108 --- [restartedMain] ConditionEvaluationReportLoggingListener : + +Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. +2025-05-22 15:32:08.518 ERROR 4108 --- [restartedMain] o.s.boot.SpringApplication : Application run failed + +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of URL [file:/C:/Users/LENOVO/IntellijProjects/java-coding-challenge/target/classes/data.sql]: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, role VARCHAR(50) NOT NULL ); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "USERS" already exists; SQL statement: +CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, role VARCHAR(50) NOT NULL ) [42101-200] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:617) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1159) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[spring-boot-2.4.1.jar:2.4.1] + at com.crewmeister.cmcodingchallenge.CmCodingChallengeApplication.main(CmCodingChallengeApplication.java:12) ~[classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.4.1.jar:2.4.1] +Caused by: org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of URL [file:/C:/Users/LENOVO/IntellijProjects/java-coding-challenge/target/classes/data.sql]: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, role VARCHAR(50) NOT NULL ); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "USERS" already exists; SQL statement: +CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, role VARCHAR(50) NOT NULL ) [42101-200] + at org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:622) ~[spring-jdbc-5.3.2.jar:5.3.2] + at org.springframework.jdbc.datasource.init.ResourceDatabasePopulator.populate(ResourceDatabasePopulator.java:254) ~[spring-jdbc-5.3.2.jar:5.3.2] + at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:49) ~[spring-jdbc-5.3.2.jar:5.3.2] + at org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer.runScripts(DataSourceInitializer.java:202) ~[spring-boot-autoconfigure-2.4.1.jar:2.4.1] + at org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer.initSchema(DataSourceInitializer.java:119) ~[spring-boot-autoconfigure-2.4.1.jar:2.4.1] + at org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker.onApplicationEvent(DataSourceInitializerInvoker.java:91) ~[spring-boot-autoconfigure-2.4.1.jar:2.4.1] + at org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker.onApplicationEvent(DataSourceInitializerInvoker.java:38) ~[spring-boot-autoconfigure-2.4.1.jar:2.4.1] + at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:426) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:383) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.boot.autoconfigure.orm.jpa.DataSourceInitializedPublisher.publishEventIfRequired(DataSourceInitializedPublisher.java:110) ~[spring-boot-autoconfigure-2.4.1.jar:2.4.1] + at org.springframework.boot.autoconfigure.orm.jpa.DataSourceInitializedPublisher.postProcessAfterInitialization(DataSourceInitializedPublisher.java:101) ~[spring-boot-autoconfigure-2.4.1.jar:2.4.1] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:444) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:609) ~[spring-beans-5.3.2.jar:5.3.2] + ... 21 common frames omitted +Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "USERS" already exists; SQL statement: +CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, role VARCHAR(50) NOT NULL ) [42101-200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:453) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.200.jar:1.4.200] + at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.200.jar:1.4.200] + at org.h2.command.ddl.CreateTable.update(CreateTable.java:89) ~[h2-1.4.200.jar:1.4.200] + at org.h2.command.CommandContainer.update(CommandContainer.java:198) ~[h2-1.4.200.jar:1.4.200] + at org.h2.command.Command.executeUpdate(Command.java:251) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:228) ~[h2-1.4.200.jar:1.4.200] + at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:201) ~[h2-1.4.200.jar:1.4.200] + at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95) ~[HikariCP-3.4.5.jar:na] + at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) ~[HikariCP-3.4.5.jar:na] + at org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:601) ~[spring-jdbc-5.3.2.jar:5.3.2] + ... 37 common frames omitted + +2025-05-22 15:35:36.785 INFO 16740 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 16740 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 15:35:36.791 DEBUG 16740 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 15:35:36.793 INFO 16740 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 15:35:36.917 INFO 16740 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 15:35:36.918 INFO 16740 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 15:35:38.816 INFO 16740 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 15:35:38.944 INFO 16740 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 110 ms. Found 2 JPA repository interfaces. +2025-05-22 15:35:39.976 INFO 16740 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$b0c2adfc] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 15:35:41.411 INFO 16740 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 15:35:41.431 INFO 16740 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 15:35:41.432 INFO 16740 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 15:35:41.564 INFO 16740 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 15:35:41.565 INFO 16740 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 4644 ms +2025-05-22 15:35:41.663 INFO 16740 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:35:41.867 INFO 16740 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 15:35:41.880 INFO 16740 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 15:35:42.081 INFO 16740 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 15:35:42.183 INFO 16740 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 15:35:42.467 INFO 16740 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 15:35:42.860 INFO 16740 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 15:35:44.463 INFO 16740 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 15:35:44.478 INFO 16740 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 15:35:44.507 INFO 16740 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 15:35:45.359 WARN 16740 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 15:35:45.583 INFO 16740 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@215871a1, org.springframework.security.web.context.SecurityContextPersistenceFilter@5c3fc66c, org.springframework.security.web.header.HeaderWriterFilter@723e3538, org.springframework.security.web.authentication.logout.LogoutFilter@15057222, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@3642e10b, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@6afdd50d, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@2d9169a7, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@5ee3a18f, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@11cd4907, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@2e5e24a1, org.springframework.security.web.session.SessionManagementFilter@5f78e928, org.springframework.security.web.access.ExceptionTranslationFilter@4dd01899, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@542d556c] +2025-05-22 15:35:45.782 INFO 16740 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 15:35:46.146 INFO 16740 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 15:35:46.162 INFO 16740 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 10.225 seconds (JVM running for 11.346) +2025-05-22 15:36:06.549 INFO 16740 --- [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 15:36:06.550 INFO 16740 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 15:36:06.553 INFO 16740 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms +2025-05-22 15:36:06.668 INFO 16740 --- [http-nio-8080-exec-1] c.c.c.c.CurrencyController : Fetching the list of Currencies +2025-05-22 15:36:14.965 WARN 16740 --- [http-nio-8080-exec-2] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [285] milliseconds. +2025-05-22 15:37:58.751 INFO 1348 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 1348 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 15:37:58.755 DEBUG 1348 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 15:37:58.756 INFO 1348 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 15:37:58.844 INFO 1348 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 15:37:58.844 INFO 1348 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 15:38:00.027 INFO 1348 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 15:38:00.136 INFO 1348 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 92 ms. Found 2 JPA repository interfaces. +2025-05-22 15:38:00.676 INFO 1348 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$3123c7a7] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 15:38:01.390 INFO 1348 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 15:38:01.406 INFO 1348 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 15:38:01.407 INFO 1348 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 15:38:01.532 INFO 1348 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 15:38:01.532 INFO 1348 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2686 ms +2025-05-22 15:38:01.603 INFO 1348 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:38:01.779 INFO 1348 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 15:38:01.787 INFO 1348 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 15:38:01.964 INFO 1348 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 15:38:02.054 INFO 1348 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 15:38:02.285 INFO 1348 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 15:38:02.458 INFO 1348 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 15:38:03.427 INFO 1348 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 15:38:03.439 INFO 1348 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 15:38:03.467 INFO 1348 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 15:38:04.218 WARN 1348 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 15:38:04.432 INFO 1348 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@47621181, org.springframework.security.web.context.SecurityContextPersistenceFilter@5a57762b, org.springframework.security.web.header.HeaderWriterFilter@61a94bb8, org.springframework.security.web.authentication.logout.LogoutFilter@753291b3, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@4bbc2d78, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@3b716dd2, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@fe664c4, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@48664065, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@334ffc7f, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@15bf751f, org.springframework.security.web.session.SessionManagementFilter@4e368f92, org.springframework.security.web.access.ExceptionTranslationFilter@62616cf9, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@56ff5c5] +2025-05-22 15:38:04.623 INFO 1348 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 15:38:04.977 INFO 1348 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 15:38:04.992 INFO 1348 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 7.014 seconds (JVM running for 7.798) +2025-05-22 15:38:09.259 INFO 1348 --- [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 15:38:09.260 INFO 1348 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 15:38:09.264 INFO 1348 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms +2025-05-22 15:38:09.664 WARN 1348 --- [http-nio-8080-exec-1] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [332] milliseconds. +2025-05-22 15:39:22.533 INFO 15140 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 15140 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 15:39:22.537 DEBUG 15140 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 15:39:22.538 INFO 15140 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 15:39:22.629 INFO 15140 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 15:39:22.631 INFO 15140 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 15:39:23.797 INFO 15140 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 15:39:23.895 INFO 15140 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 82 ms. Found 2 JPA repository interfaces. +2025-05-22 15:39:24.351 INFO 15140 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$f596277d] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 15:39:25.050 INFO 15140 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 15:39:25.066 INFO 15140 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 15:39:25.067 INFO 15140 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 15:39:25.190 INFO 15140 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 15:39:25.191 INFO 15140 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2556 ms +2025-05-22 15:39:25.260 INFO 15140 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:39:25.419 INFO 15140 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 15:39:25.430 INFO 15140 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 15:39:25.626 INFO 15140 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 15:39:25.722 INFO 15140 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 15:39:25.978 INFO 15140 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 15:39:26.161 INFO 15140 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 15:39:27.211 INFO 15140 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 15:39:27.226 INFO 15140 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 15:39:27.264 INFO 15140 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 15:39:28.130 WARN 15140 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 15:39:28.350 INFO 15140 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@7c45a479, org.springframework.security.web.context.SecurityContextPersistenceFilter@55ede79a, org.springframework.security.web.header.HeaderWriterFilter@34e3c043, org.springframework.security.web.authentication.logout.LogoutFilter@1e76e01c, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@6bf12bcf, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@2749703d, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@1479ba3c, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@17e66d79, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@542d556c, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@490309a8, org.springframework.security.web.session.SessionManagementFilter@252804fe, org.springframework.security.web.access.ExceptionTranslationFilter@30f2819e, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@231bf5d2] +2025-05-22 15:39:28.542 INFO 15140 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 15:39:28.929 INFO 15140 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 15:39:28.944 INFO 15140 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 7.102 seconds (JVM running for 7.844) +2025-05-22 15:39:31.470 INFO 15140 --- [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 15:39:31.471 INFO 15140 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 15:39:31.476 INFO 15140 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms +2025-05-22 15:39:31.997 WARN 15140 --- [http-nio-8080-exec-1] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [411] milliseconds. +2025-05-22 15:39:50.288 INFO 15140 --- [http-nio-8080-exec-7] c.c.c.c.CurrencyController : Fetching the list of Currencies +2025-05-22 15:45:50.850 INFO 6800 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 6800 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 15:45:50.854 DEBUG 6800 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 15:45:50.855 INFO 6800 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 15:45:50.957 INFO 6800 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 15:45:50.959 INFO 6800 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 15:45:52.623 INFO 6800 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 15:45:52.734 INFO 6800 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 94 ms. Found 2 JPA repository interfaces. +2025-05-22 15:45:53.264 INFO 6800 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$3d1e2be6] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 15:45:54.279 INFO 6800 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 15:45:54.298 INFO 6800 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 15:45:54.300 INFO 6800 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 15:45:54.436 INFO 6800 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 15:45:54.436 INFO 6800 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3473 ms +2025-05-22 15:45:54.547 INFO 6800 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:45:54.763 INFO 6800 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 15:45:54.775 INFO 6800 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 15:45:54.954 INFO 6800 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 15:45:55.071 INFO 6800 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 15:45:55.295 INFO 6800 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 15:45:55.495 INFO 6800 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 15:45:57.025 INFO 6800 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 15:45:57.044 INFO 6800 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 15:45:57.078 INFO 6800 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 15:45:58.174 WARN 6800 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 15:45:58.441 INFO 6800 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@15b9e083, org.springframework.security.web.context.SecurityContextPersistenceFilter@46cdc7cb, org.springframework.security.web.header.HeaderWriterFilter@3777aa69, org.springframework.security.web.authentication.logout.LogoutFilter@272c683d, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@1f85fc3b, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@7089980b, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@17215a2d, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@17c4d232, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@25442983, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@5e4cf382, org.springframework.security.web.session.SessionManagementFilter@7058061b, org.springframework.security.web.access.ExceptionTranslationFilter@2f0d48cd, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@415d0955] +2025-05-22 15:45:58.719 INFO 6800 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 15:45:59.150 INFO 6800 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 15:45:59.165 INFO 6800 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 9.076 seconds (JVM running for 10.248) +2025-05-22 15:46:27.635 INFO 6800 --- [http-nio-8080-exec-10] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 15:46:27.637 INFO 6800 --- [http-nio-8080-exec-10] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 15:46:27.642 INFO 6800 --- [http-nio-8080-exec-10] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms +2025-05-22 15:49:18.882 INFO 16180 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 16180 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 15:49:18.887 DEBUG 16180 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 15:49:18.888 INFO 16180 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 15:49:18.988 INFO 16180 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 15:49:18.989 INFO 16180 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 15:49:20.222 INFO 16180 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 15:49:20.330 INFO 16180 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 92 ms. Found 2 JPA repository interfaces. +2025-05-22 15:49:20.839 INFO 16180 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$167d0a3f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 15:49:21.576 INFO 16180 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 15:49:21.594 INFO 16180 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 15:49:21.595 INFO 16180 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 15:49:21.723 INFO 16180 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 15:49:21.724 INFO 16180 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2731 ms +2025-05-22 15:49:21.804 INFO 16180 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 15:49:21.992 INFO 16180 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 15:49:22.003 INFO 16180 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 15:49:22.181 INFO 16180 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 15:49:22.267 INFO 16180 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 15:49:22.510 INFO 16180 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 15:49:22.695 INFO 16180 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 15:49:23.846 INFO 16180 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 15:49:23.860 INFO 16180 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 15:49:23.902 INFO 16180 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 15:49:25.405 WARN 16180 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 15:49:25.809 INFO 16180 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@7436f384, org.springframework.security.web.context.SecurityContextPersistenceFilter@2256b62f, org.springframework.security.web.header.HeaderWriterFilter@260d1a28, org.springframework.security.web.authentication.logout.LogoutFilter@b1f28a5, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@3c584224, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@1a009ea2, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@2b2345be, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1f5498c3, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@69fbbeec, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@37d7bd43, org.springframework.security.web.session.SessionManagementFilter@69e9a9f0, org.springframework.security.web.access.ExceptionTranslationFilter@1737fe6b, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@2151651e] +2025-05-22 15:49:26.069 INFO 16180 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 15:49:26.435 INFO 16180 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 15:49:26.452 INFO 16180 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 8.303 seconds (JVM running for 9.173) +2025-05-22 15:54:39.994 INFO 16180 --- [http-nio-8080-exec-4] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 15:54:40.046 INFO 16180 --- [http-nio-8080-exec-4] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 15:54:40.290 INFO 16180 --- [http-nio-8080-exec-4] o.s.web.servlet.DispatcherServlet : Completed initialization in 236 ms +2025-05-22 15:54:40.726 INFO 16180 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyController : Fetching the list of Currencies +2025-05-22 15:55:24.563 WARN 16180 --- [http-nio-8080-exec-6] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [362] milliseconds. +2025-05-22 15:55:36.719 INFO 16180 --- [http-nio-8080-exec-8] c.c.c.c.CurrencyController : Adding the list of Currency +2025-05-22 15:55:56.765 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 15:55:56.796 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: AUD +2025-05-22 15:55:56.817 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.AUD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:55:58.417 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: BGN +2025-05-22 15:55:58.418 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BGN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:55:58.986 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: BRL +2025-05-22 15:55:58.987 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:55:59.708 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CAD +2025-05-22 15:55:59.711 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CAD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:00.383 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CHF +2025-05-22 15:56:00.384 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CHF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:01.038 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CNY +2025-05-22 15:56:01.039 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CNY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:01.627 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CYP +2025-05-22 15:56:01.628 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CYP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:02.006 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CZK +2025-05-22 15:56:02.007 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CZK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:02.747 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: DKK +2025-05-22 15:56:02.748 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.DKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:03.369 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: EEK +2025-05-22 15:56:03.370 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.EEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:03.719 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: GBP +2025-05-22 15:56:03.756 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GBP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:04.970 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: GRD +2025-05-22 15:56:04.971 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GRD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:05.149 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: HKD +2025-05-22 15:56:05.150 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HKD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:06.474 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: HRK +2025-05-22 15:56:06.477 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HRK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:07.271 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: HUF +2025-05-22 15:56:07.272 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HUF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:07.920 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: IDR +2025-05-22 15:56:07.921 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.IDR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:08.487 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: ILS +2025-05-22 15:56:08.488 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ILS.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:09.129 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: INR +2025-05-22 15:56:09.130 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.INR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:09.752 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: ISK +2025-05-22 15:56:09.753 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ISK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:10.398 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: JPY +2025-05-22 15:56:10.399 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.JPY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:11.055 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: KRW +2025-05-22 15:56:11.056 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.KRW.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:11.669 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: LTL +2025-05-22 15:56:11.670 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:12.272 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: LVL +2025-05-22 15:56:12.273 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LVL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:12.809 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: MTL +2025-05-22 15:56:12.810 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:13.037 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: MXN +2025-05-22 15:56:13.038 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MXN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:13.712 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: MYR +2025-05-22 15:56:13.713 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MYR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:14.441 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: NOK +2025-05-22 15:56:14.442 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NOK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:15.294 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: NZD +2025-05-22 15:56:15.295 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NZD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:15.997 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: PHP +2025-05-22 15:56:15.998 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PHP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:16.531 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: PLN +2025-05-22 15:56:16.532 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PLN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:17.100 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: ROL +2025-05-22 15:56:17.101 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ROL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:17.351 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: RON +2025-05-22 15:56:17.352 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RON.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:17.865 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: RUB +2025-05-22 15:56:17.865 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RUB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:18.364 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: SEK +2025-05-22 15:56:18.365 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:19.039 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: SGD +2025-05-22 15:56:19.040 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SGD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:19.626 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: SIT +2025-05-22 15:56:19.627 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SIT.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:20.125 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: SKK +2025-05-22 15:56:20.126 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:20.361 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: THB +2025-05-22 15:56:20.362 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.THB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:20.908 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: TRL +2025-05-22 15:56:20.909 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:21.058 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: TRY +2025-05-22 15:56:21.059 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:21.478 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: USD +2025-05-22 15:56:21.479 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.USD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:56:22.235 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: ZAR +2025-05-22 15:56:22.236 INFO 16180 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ZAR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:23.745 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 15:58:23.985 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: AUD +2025-05-22 15:58:23.997 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.AUD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:24.988 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: BGN +2025-05-22 15:58:24.989 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BGN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:25.680 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: BRL +2025-05-22 15:58:25.681 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:26.519 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: CAD +2025-05-22 15:58:26.524 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CAD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:28.336 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: CHF +2025-05-22 15:58:28.339 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CHF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:28.958 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: CNY +2025-05-22 15:58:28.961 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CNY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:29.674 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: CYP +2025-05-22 15:58:29.674 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CYP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:30.001 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: CZK +2025-05-22 15:58:30.002 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CZK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:30.815 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: DKK +2025-05-22 15:58:30.816 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.DKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:31.322 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: EEK +2025-05-22 15:58:31.323 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.EEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:31.505 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: GBP +2025-05-22 15:58:31.506 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GBP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:32.163 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: GRD +2025-05-22 15:58:32.164 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GRD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:32.330 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: HKD +2025-05-22 15:58:32.331 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HKD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:33.012 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: HRK +2025-05-22 15:58:33.013 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HRK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:33.439 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: HUF +2025-05-22 15:58:33.439 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HUF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:34.182 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: IDR +2025-05-22 15:58:34.183 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.IDR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:35.039 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: ILS +2025-05-22 15:58:35.040 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ILS.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:35.709 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: INR +2025-05-22 15:58:35.709 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.INR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:36.350 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: ISK +2025-05-22 15:58:36.351 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ISK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:36.704 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: JPY +2025-05-22 15:58:36.705 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.JPY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:37.114 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: KRW +2025-05-22 15:58:37.115 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.KRW.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:37.517 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: LTL +2025-05-22 15:58:37.518 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:37.857 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: LVL +2025-05-22 15:58:37.858 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LVL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:38.308 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: MTL +2025-05-22 15:58:38.308 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:38.517 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: MXN +2025-05-22 15:58:38.518 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MXN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:39.147 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: MYR +2025-05-22 15:58:39.147 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MYR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:39.697 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: NOK +2025-05-22 15:58:39.697 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NOK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:40.313 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: NZD +2025-05-22 15:58:40.314 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NZD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:40.918 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: PHP +2025-05-22 15:58:40.919 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PHP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:42.002 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: PLN +2025-05-22 15:58:42.003 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PLN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:42.672 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: ROL +2025-05-22 15:58:42.672 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ROL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:42.849 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: RON +2025-05-22 15:58:42.849 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RON.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:43.386 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: RUB +2025-05-22 15:58:43.386 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RUB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:43.975 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: SEK +2025-05-22 15:58:43.975 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:44.449 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: SGD +2025-05-22 15:58:44.450 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SGD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:44.841 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: SIT +2025-05-22 15:58:44.841 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SIT.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:44.972 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: SKK +2025-05-22 15:58:44.973 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:45.143 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: THB +2025-05-22 15:58:45.144 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.THB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:45.546 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: TRL +2025-05-22 15:58:45.547 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:45.649 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: TRY +2025-05-22 15:58:45.649 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:45.961 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: USD +2025-05-22 15:58:45.961 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.USD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:58:46.369 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: ZAR +2025-05-22 15:58:46.369 INFO 16180 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ZAR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 15:59:47.293 INFO 16180 --- [http-nio-8080-exec-2] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 15:59:47.408 INFO 16180 --- [http-nio-8080-exec-2] c.c.c.c.CurrencyServiceImpl : Processing currency: NZD +2025-05-22 15:59:47.408 INFO 16180 --- [http-nio-8080-exec-2] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NZD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:00:07.019 INFO 16180 --- [http-nio-8080-exec-9] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 16:00:07.022 INFO 16180 --- [http-nio-8080-exec-9] c.c.c.c.CurrencyServiceImpl : Processing currency: INR +2025-05-22 16:00:07.023 INFO 16180 --- [http-nio-8080-exec-9] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.INR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:00:36.661 WARN 16180 --- [http-nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.time.LocalDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat java.time.LocalDate] for value '2025-05-2'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2025-05-2]] +2025-05-22 16:00:49.740 WARN 16180 --- [http-nio-8080-exec-4] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.time.LocalDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat java.time.LocalDate] for value '16-05-2025'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [16-05-2025]] +2025-05-22 16:01:29.454 INFO 16180 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 16:01:29.489 WARN 16180 --- [http-nio-8080-exec-6] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [java.lang.RuntimeException: Invalid Currency Name as validated from db] +2025-05-22 16:01:48.801 INFO 16180 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 16:01:48.806 INFO 16180 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: INR +2025-05-22 16:01:48.808 INFO 16180 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.INR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:02:45.774 INFO 16180 --- [http-nio-8080-exec-7] c.c.c.c.CurrencyController : Received FX request: com.crewmeister.cmcodingchallenge.currencydto.FXRequestDto@2f8b5866 +2025-05-22 16:02:45.788 INFO 16180 --- [http-nio-8080-exec-7] c.c.c.c.CurrencyServiceImpl : Processing currency: INR +2025-05-22 16:02:45.788 INFO 16180 --- [http-nio-8080-exec-7] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.INR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:02:46.331 INFO 16180 --- [http-nio-8080-exec-7] c.c.c.c.CurrencyServiceImpl : Conversion rate for INR on 2025-05-16 is 95.82 +2025-05-22 16:03:37.668 ERROR 16180 --- [http-nio-8080-exec-10] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'currency': rejected value [EUR]; codes [typeMismatch.FXRequestDto.currency,typeMismatch.currency,typeMismatch.com.crewmeister.cmcodingchallenge.currency.CurrencyConstants,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.currency,currency]; arguments []; default message [currency]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.crewmeister.cmcodingchallenge.currency.CurrencyConstants' for property 'currency'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.validation.constraints.NotNull com.crewmeister.cmcodingchallenge.currency.CurrencyConstants] for value 'EUR'; nested exception is java.lang.IllegalArgumentException: No enum constant com.crewmeister.cmcodingchallenge.currency.CurrencyConstants.EUR] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] + +2025-05-22 16:03:37.683 WARN 16180 --- [http-nio-8080-exec-10] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'currency': rejected value [EUR]; codes [typeMismatch.FXRequestDto.currency,typeMismatch.currency,typeMismatch.com.crewmeister.cmcodingchallenge.currency.CurrencyConstants,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.currency,currency]; arguments []; default message [currency]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.crewmeister.cmcodingchallenge.currency.CurrencyConstants' for property 'currency'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.validation.constraints.NotNull com.crewmeister.cmcodingchallenge.currency.CurrencyConstants] for value 'EUR'; nested exception is java.lang.IllegalArgumentException: No enum constant com.crewmeister.cmcodingchallenge.currency.CurrencyConstants.EUR]] +2025-05-22 16:03:52.144 ERROR 16180 --- [http-nio-8080-exec-2] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'currency': rejected value [EUR]; codes [typeMismatch.FXRequestDto.currency,typeMismatch.currency,typeMismatch.com.crewmeister.cmcodingchallenge.currency.CurrencyConstants,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.currency,currency]; arguments []; default message [currency]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.crewmeister.cmcodingchallenge.currency.CurrencyConstants' for property 'currency'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.validation.constraints.NotNull com.crewmeister.cmcodingchallenge.currency.CurrencyConstants] for value 'EUR'; nested exception is java.lang.IllegalArgumentException: No enum constant com.crewmeister.cmcodingchallenge.currency.CurrencyConstants.EUR] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] + +2025-05-22 16:03:52.152 WARN 16180 --- [http-nio-8080-exec-2] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'currency': rejected value [EUR]; codes [typeMismatch.FXRequestDto.currency,typeMismatch.currency,typeMismatch.com.crewmeister.cmcodingchallenge.currency.CurrencyConstants,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.currency,currency]; arguments []; default message [currency]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.crewmeister.cmcodingchallenge.currency.CurrencyConstants' for property 'currency'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.validation.constraints.NotNull com.crewmeister.cmcodingchallenge.currency.CurrencyConstants] for value 'EUR'; nested exception is java.lang.IllegalArgumentException: No enum constant com.crewmeister.cmcodingchallenge.currency.CurrencyConstants.EUR]] +2025-05-22 16:04:07.544 INFO 16180 --- [http-nio-8080-exec-9] c.c.c.c.CurrencyController : Received FX request: com.crewmeister.cmcodingchallenge.currencydto.FXRequestDto@519eb720 +2025-05-22 16:04:07.545 INFO 16180 --- [http-nio-8080-exec-9] c.c.c.c.CurrencyServiceImpl : Processing currency: NZD +2025-05-22 16:04:07.546 INFO 16180 --- [http-nio-8080-exec-9] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NZD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:04:08.270 INFO 16180 --- [http-nio-8080-exec-9] c.c.c.c.CurrencyServiceImpl : Conversion rate for NZD on 2025-05-16 is 1.8987 +2025-05-22 16:04:15.695 ERROR 16180 --- [http-nio-8080-exec-1] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [0.0]; codes [Positive.FXRequestDto.amount,Positive.amount,Positive.double,Positive]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Amount must be a positive number] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] + +2025-05-22 16:04:15.701 WARN 16180 --- [http-nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [0.0]; codes [Positive.FXRequestDto.amount,Positive.amount,Positive.double,Positive]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Amount must be a positive number]] +2025-05-22 16:04:21.933 ERROR 16180 --- [http-nio-8080-exec-4] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [-200.0]; codes [Positive.FXRequestDto.amount,Positive.amount,Positive.double,Positive]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Amount must be a positive number] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] + +2025-05-22 16:04:21.937 WARN 16180 --- [http-nio-8080-exec-4] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [-200.0]; codes [Positive.FXRequestDto.amount,Positive.amount,Positive.double,Positive]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Amount must be a positive number]] +2025-05-22 16:04:32.805 ERROR 16180 --- [http-nio-8080-exec-6] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value []; codes [typeMismatch.FXRequestDto.amount,typeMismatch.amount,typeMismatch.double,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'double' for property 'amount'; nested exception is java.lang.NumberFormatException: empty String] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] + +2025-05-22 16:04:32.812 WARN 16180 --- [http-nio-8080-exec-6] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value []; codes [typeMismatch.FXRequestDto.amount,typeMismatch.amount,typeMismatch.double,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'double' for property 'amount'; nested exception is java.lang.NumberFormatException: empty String]] +2025-05-22 16:04:38.471 ERROR 16180 --- [http-nio-8080-exec-5] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [null]; codes [NotNull.FXRequestDto.amount,NotNull.amount,NotNull.double,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [must not be null] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] + +2025-05-22 16:04:38.475 WARN 16180 --- [http-nio-8080-exec-5] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [null]; codes [NotNull.FXRequestDto.amount,NotNull.amount,NotNull.double,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [must not be null]] +2025-05-22 16:09:37.444 INFO 7076 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 7076 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 16:09:37.450 DEBUG 7076 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 16:09:37.451 INFO 7076 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 16:09:37.604 INFO 7076 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 16:09:37.605 INFO 7076 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 16:09:39.265 INFO 7076 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 16:09:39.423 INFO 7076 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 119 ms. Found 2 JPA repository interfaces. +2025-05-22 16:09:40.108 INFO 7076 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$bd9b7d07] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 16:09:41.003 INFO 7076 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 16:09:41.026 INFO 7076 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 16:09:41.027 INFO 7076 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 16:09:41.202 INFO 7076 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 16:09:41.203 INFO 7076 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3595 ms +2025-05-22 16:09:41.379 INFO 7076 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 16:09:41.656 INFO 7076 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 16:09:41.673 INFO 7076 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 16:09:41.965 INFO 7076 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 16:09:42.052 INFO 7076 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 16:09:42.317 INFO 7076 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 16:09:42.550 INFO 7076 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 16:09:43.526 INFO 7076 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 16:09:43.538 INFO 7076 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 16:09:43.581 INFO 7076 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 16:09:44.403 WARN 7076 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 16:09:44.639 INFO 7076 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@891ba89, org.springframework.security.web.context.SecurityContextPersistenceFilter@6d5bb9c3, org.springframework.security.web.header.HeaderWriterFilter@6beef94c, org.springframework.security.web.authentication.logout.LogoutFilter@6ac23203, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@4c2f5ff4, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@40dd38e9, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@4db5be11, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7c3af82a, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@e241406, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@78426005, org.springframework.security.web.session.SessionManagementFilter@1ed22a73, org.springframework.security.web.access.ExceptionTranslationFilter@46cdc7cb, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@256db431] +2025-05-22 16:09:44.818 INFO 7076 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 16:09:45.186 INFO 7076 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 16:09:45.212 INFO 7076 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 8.625 seconds (JVM running for 9.777) +2025-05-22 16:10:01.226 INFO 7076 --- [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 16:10:01.228 INFO 7076 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 16:10:01.234 INFO 7076 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms +2025-05-22 16:10:01.374 INFO 7076 --- [http-nio-8080-exec-1] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 16:10:06.440 INFO 7076 --- [http-nio-8080-exec-2] c.c.c.c.CurrencyController : Adding the list of Currency +2025-05-22 16:10:11.850 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 16:10:11.909 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: AUD +2025-05-22 16:10:11.936 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.AUD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:14.570 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: BGN +2025-05-22 16:10:14.574 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BGN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:16.100 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: BRL +2025-05-22 16:10:16.103 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:18.083 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CAD +2025-05-22 16:10:18.086 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CAD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:19.050 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CHF +2025-05-22 16:10:19.052 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CHF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:19.872 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CNY +2025-05-22 16:10:19.874 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CNY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:20.498 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CYP +2025-05-22 16:10:20.499 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CYP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:20.821 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CZK +2025-05-22 16:10:20.822 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CZK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:21.484 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: DKK +2025-05-22 16:10:21.485 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.DKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:22.163 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: EEK +2025-05-22 16:10:22.163 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.EEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:22.547 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: GBP +2025-05-22 16:10:22.548 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GBP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:23.255 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: GRD +2025-05-22 16:10:23.256 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GRD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:23.446 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: HKD +2025-05-22 16:10:23.447 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HKD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:24.368 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: HRK +2025-05-22 16:10:24.369 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HRK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:25.098 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: HUF +2025-05-22 16:10:25.099 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HUF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:25.952 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: IDR +2025-05-22 16:10:25.954 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.IDR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:26.629 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: ILS +2025-05-22 16:10:26.629 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ILS.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:27.364 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: INR +2025-05-22 16:10:27.365 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.INR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:28.137 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: ISK +2025-05-22 16:10:28.138 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ISK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:28.758 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: JPY +2025-05-22 16:10:28.759 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.JPY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:29.468 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: KRW +2025-05-22 16:10:29.469 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.KRW.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:30.202 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: LTL +2025-05-22 16:10:30.203 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:30.651 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: LVL +2025-05-22 16:10:30.652 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LVL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:31.068 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: MTL +2025-05-22 16:10:31.069 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:31.270 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: MXN +2025-05-22 16:10:31.270 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MXN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:32.325 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: MYR +2025-05-22 16:10:32.326 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MYR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:33.151 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: NOK +2025-05-22 16:10:33.152 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NOK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:33.757 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: NZD +2025-05-22 16:10:33.757 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NZD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:34.347 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: PHP +2025-05-22 16:10:34.348 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PHP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:34.963 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: PLN +2025-05-22 16:10:34.964 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PLN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:36.161 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: ROL +2025-05-22 16:10:36.162 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ROL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:36.443 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: RON +2025-05-22 16:10:36.444 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RON.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:37.137 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: RUB +2025-05-22 16:10:37.138 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RUB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:38.595 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: SEK +2025-05-22 16:10:38.597 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:40.267 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: SGD +2025-05-22 16:10:40.272 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SGD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:41.728 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: SIT +2025-05-22 16:10:41.730 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SIT.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:41.988 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: SKK +2025-05-22 16:10:41.989 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:42.505 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: THB +2025-05-22 16:10:42.507 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.THB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:43.127 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: TRL +2025-05-22 16:10:43.131 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:43.282 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: TRY +2025-05-22 16:10:43.283 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:43.992 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: USD +2025-05-22 16:10:43.993 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.USD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:10:44.980 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: ZAR +2025-05-22 16:10:44.981 INFO 7076 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ZAR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:16:31.468 INFO 7392 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 7392 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 16:16:31.474 DEBUG 7392 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 16:16:31.475 INFO 7392 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 16:16:31.600 INFO 7392 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 16:16:31.601 INFO 7392 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 16:16:33.104 INFO 7392 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 16:16:33.212 INFO 7392 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 92 ms. Found 2 JPA repository interfaces. +2025-05-22 16:16:33.698 INFO 7392 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$d2a74f34] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 16:16:34.428 INFO 7392 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 16:16:34.445 INFO 7392 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 16:16:34.446 INFO 7392 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 16:16:34.575 INFO 7392 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 16:16:34.576 INFO 7392 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2973 ms +2025-05-22 16:16:34.649 INFO 7392 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 16:16:34.857 INFO 7392 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 16:16:34.873 INFO 7392 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 16:16:35.079 INFO 7392 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 16:16:35.184 INFO 7392 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 16:16:35.446 INFO 7392 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 16:16:35.629 INFO 7392 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 16:16:36.690 INFO 7392 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 16:16:36.705 INFO 7392 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 16:16:36.734 INFO 7392 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 16:16:37.530 WARN 7392 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 16:16:37.755 INFO 7392 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@7fe5d08c, org.springframework.security.web.context.SecurityContextPersistenceFilter@25442983, org.springframework.security.web.header.HeaderWriterFilter@6d5bb9c3, org.springframework.security.web.authentication.logout.LogoutFilter@51a4b19a, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@891ba89, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@6dea8e24, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@1fc0ac57, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@5b59d598, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@4459fc36, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@74e9a5e2, org.springframework.security.web.session.SessionManagementFilter@7c3af82a, org.springframework.security.web.access.ExceptionTranslationFilter@6beef94c, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@16480846] +2025-05-22 16:16:37.951 INFO 7392 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 16:16:38.322 INFO 7392 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 16:16:38.338 INFO 7392 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 7.818 seconds (JVM running for 8.888) +2025-05-22 16:16:44.067 INFO 7392 --- [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 16:16:44.068 INFO 7392 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 16:16:44.070 INFO 7392 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms +2025-05-22 16:16:44.165 INFO 7392 --- [http-nio-8080-exec-1] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 16:16:48.852 INFO 7392 --- [http-nio-8080-exec-2] c.c.c.c.CurrencyController : Adding the list of Currency +2025-05-22 16:16:50.902 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 16:16:50.919 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: AUD +2025-05-22 16:16:50.929 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.AUD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:16:52.471 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: BGN +2025-05-22 16:16:52.472 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BGN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:16:53.844 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: BRL +2025-05-22 16:16:53.850 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:16:54.894 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CAD +2025-05-22 16:16:54.896 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CAD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:16:55.605 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CHF +2025-05-22 16:16:55.606 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CHF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:16:56.298 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CNY +2025-05-22 16:16:56.299 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CNY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:16:57.140 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CYP +2025-05-22 16:16:57.142 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CYP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:16:57.519 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CZK +2025-05-22 16:16:57.520 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CZK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:16:58.317 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: DKK +2025-05-22 16:16:58.319 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.DKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:16:59.095 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: EEK +2025-05-22 16:16:59.096 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.EEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:16:59.650 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: GBP +2025-05-22 16:16:59.651 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GBP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:00.368 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: GRD +2025-05-22 16:17:00.369 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GRD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:00.549 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: HKD +2025-05-22 16:17:00.551 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HKD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:01.428 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: HRK +2025-05-22 16:17:01.429 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HRK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:01.966 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: HUF +2025-05-22 16:17:01.967 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HUF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:02.775 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: IDR +2025-05-22 16:17:02.777 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.IDR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:03.414 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: ILS +2025-05-22 16:17:03.415 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ILS.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:04.023 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: INR +2025-05-22 16:17:04.024 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.INR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:04.606 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: ISK +2025-05-22 16:17:04.607 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ISK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:05.069 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: JPY +2025-05-22 16:17:05.070 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.JPY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:06.018 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: KRW +2025-05-22 16:17:06.020 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.KRW.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:06.681 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: LTL +2025-05-22 16:17:06.682 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:07.152 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: LVL +2025-05-22 16:17:07.153 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LVL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:07.381 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: MTL +2025-05-22 16:17:07.381 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:07.533 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: MXN +2025-05-22 16:17:07.534 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MXN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:08.277 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: MYR +2025-05-22 16:17:08.278 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MYR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:09.160 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: NOK +2025-05-22 16:17:09.161 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NOK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:09.726 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: NZD +2025-05-22 16:17:09.726 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NZD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:10.201 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: PHP +2025-05-22 16:17:10.202 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PHP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:10.622 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: PLN +2025-05-22 16:17:10.623 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PLN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:11.075 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: ROL +2025-05-22 16:17:11.076 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ROL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:11.219 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: RON +2025-05-22 16:17:11.221 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RON.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:11.594 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: RUB +2025-05-22 16:17:11.594 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RUB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:11.972 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: SEK +2025-05-22 16:17:11.972 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:12.389 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: SGD +2025-05-22 16:17:12.390 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SGD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:12.810 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: SIT +2025-05-22 16:17:12.810 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SIT.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:12.947 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: SKK +2025-05-22 16:17:12.948 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:13.138 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: THB +2025-05-22 16:17:13.138 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.THB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:13.953 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: TRL +2025-05-22 16:17:13.954 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:14.102 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: TRY +2025-05-22 16:17:14.103 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:14.523 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: USD +2025-05-22 16:17:14.523 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.USD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:17:15.084 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: ZAR +2025-05-22 16:17:15.085 INFO 7392 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ZAR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:22:12.581 INFO 5848 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 5848 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 16:22:12.586 DEBUG 5848 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 16:22:12.587 INFO 5848 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 16:22:12.701 INFO 5848 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 16:22:12.701 INFO 5848 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 16:22:13.899 INFO 5848 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 16:22:14.002 INFO 5848 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 88 ms. Found 2 JPA repository interfaces. +2025-05-22 16:22:14.481 INFO 5848 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$167d0a3f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 16:22:15.214 INFO 5848 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 16:22:15.229 INFO 5848 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 16:22:15.230 INFO 5848 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 16:22:15.362 INFO 5848 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 16:22:15.363 INFO 5848 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2659 ms +2025-05-22 16:22:15.443 INFO 5848 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 16:22:15.625 INFO 5848 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 16:22:15.636 INFO 5848 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 16:22:15.806 INFO 5848 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 16:22:15.898 INFO 5848 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 16:22:16.146 INFO 5848 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 16:22:16.326 INFO 5848 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 16:22:17.318 INFO 5848 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 16:22:17.332 INFO 5848 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 16:22:17.373 INFO 5848 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 16:22:18.137 WARN 5848 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 16:22:18.388 INFO 5848 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@2b2345be, org.springframework.security.web.context.SecurityContextPersistenceFilter@3bd60060, org.springframework.security.web.header.HeaderWriterFilter@1fc0cb3e, org.springframework.security.web.authentication.logout.LogoutFilter@68dd6dc6, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@3fdc02ce, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@44b10e59, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@37d7bd43, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@52b3b469, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@1a009ea2, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@331ebff2, org.springframework.security.web.session.SessionManagementFilter@6c443dd5, org.springframework.security.web.access.ExceptionTranslationFilter@457f8166, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@5498292] +2025-05-22 16:22:18.571 INFO 5848 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 16:22:19.052 INFO 5848 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 16:22:19.075 INFO 5848 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 7.318 seconds (JVM running for 8.113) +2025-05-22 16:25:08.604 INFO 13108 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 13108 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 16:25:08.609 DEBUG 13108 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 16:25:08.611 INFO 13108 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 16:25:08.712 INFO 13108 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 16:25:08.715 INFO 13108 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 16:25:10.080 INFO 13108 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 16:25:10.183 INFO 13108 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 88 ms. Found 2 JPA repository interfaces. +2025-05-22 16:25:10.672 INFO 13108 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$d6174b58] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 16:25:11.400 INFO 13108 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 16:25:11.417 INFO 13108 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 16:25:11.417 INFO 13108 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 16:25:11.541 INFO 13108 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 16:25:11.542 INFO 13108 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2824 ms +2025-05-22 16:25:11.615 INFO 13108 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 16:25:11.806 INFO 13108 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 16:25:11.817 INFO 13108 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 16:25:11.993 INFO 13108 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 16:25:12.077 INFO 13108 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 16:25:12.309 INFO 13108 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 16:25:12.491 INFO 13108 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 16:25:13.880 INFO 13108 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 16:25:13.897 INFO 13108 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 16:25:13.934 INFO 13108 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 16:25:14.717 WARN 13108 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 16:25:14.973 INFO 13108 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@4367a233, org.springframework.security.web.context.SecurityContextPersistenceFilter@63cfae51, org.springframework.security.web.header.HeaderWriterFilter@454387de, org.springframework.security.web.authentication.logout.LogoutFilter@7b5cee87, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@7077c0c6, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@2cebc68, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@418331e1, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1049d4d7, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@66719252, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@7560fbd8, org.springframework.security.web.session.SessionManagementFilter@75344186, org.springframework.security.web.access.ExceptionTranslationFilter@2256b62f, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@a01d982] +2025-05-22 16:25:15.198 INFO 13108 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 16:25:15.547 INFO 13108 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 16:25:15.562 INFO 13108 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 7.68 seconds (JVM running for 8.6) +2025-05-22 16:25:27.534 INFO 13108 --- [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 16:25:27.536 INFO 13108 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 16:25:27.539 INFO 13108 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 3 ms +2025-05-22 16:25:27.639 INFO 13108 --- [http-nio-8080-exec-1] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 16:25:33.660 INFO 13108 --- [http-nio-8080-exec-2] c.c.c.c.CurrencyController : Adding the list of Currency +2025-05-22 16:25:36.747 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 16:25:36.777 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: AUD +2025-05-22 16:25:36.867 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.AUD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:39.791 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: BGN +2025-05-22 16:25:39.792 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BGN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:40.677 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: BRL +2025-05-22 16:25:40.678 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:41.235 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CAD +2025-05-22 16:25:41.235 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CAD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:42.707 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CHF +2025-05-22 16:25:42.709 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CHF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:44.460 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CNY +2025-05-22 16:25:44.461 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CNY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:45.047 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CYP +2025-05-22 16:25:45.047 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CYP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:45.404 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: CZK +2025-05-22 16:25:45.405 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CZK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:46.291 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: DKK +2025-05-22 16:25:46.292 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.DKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:47.196 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: EEK +2025-05-22 16:25:47.198 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.EEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:47.705 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: GBP +2025-05-22 16:25:47.707 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GBP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:48.391 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: GRD +2025-05-22 16:25:48.392 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GRD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:48.532 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: HKD +2025-05-22 16:25:48.532 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HKD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:49.286 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: HRK +2025-05-22 16:25:49.286 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HRK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:49.839 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: HUF +2025-05-22 16:25:49.840 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HUF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:50.729 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: IDR +2025-05-22 16:25:50.732 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.IDR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:51.395 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: ILS +2025-05-22 16:25:51.395 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ILS.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:52.111 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: INR +2025-05-22 16:25:52.111 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.INR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:52.766 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: ISK +2025-05-22 16:25:52.767 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ISK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:53.395 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: JPY +2025-05-22 16:25:53.396 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.JPY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:54.080 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: KRW +2025-05-22 16:25:54.081 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.KRW.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:54.664 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: LTL +2025-05-22 16:25:54.664 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:55.168 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: LVL +2025-05-22 16:25:55.169 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LVL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:55.605 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: MTL +2025-05-22 16:25:55.606 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:55.815 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: MXN +2025-05-22 16:25:55.816 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MXN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:56.435 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: MYR +2025-05-22 16:25:56.436 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MYR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:57.302 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: NOK +2025-05-22 16:25:57.303 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NOK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:58.464 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: NZD +2025-05-22 16:25:58.467 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NZD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:25:59.446 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: PHP +2025-05-22 16:25:59.447 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PHP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:26:00.684 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: PLN +2025-05-22 16:26:00.686 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PLN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:26:01.859 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: ROL +2025-05-22 16:26:01.860 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ROL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:26:02.177 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: RON +2025-05-22 16:26:02.178 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RON.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:26:02.911 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: RUB +2025-05-22 16:26:02.912 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RUB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:26:03.855 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: SEK +2025-05-22 16:26:03.856 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:26:04.695 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: SGD +2025-05-22 16:26:04.698 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SGD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:26:05.489 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: SIT +2025-05-22 16:26:05.490 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SIT.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:26:05.958 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: SKK +2025-05-22 16:26:05.958 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:26:06.440 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: THB +2025-05-22 16:26:06.441 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.THB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:26:07.471 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: TRL +2025-05-22 16:26:07.472 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:26:07.650 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: TRY +2025-05-22 16:26:07.651 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:26:08.238 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: USD +2025-05-22 16:26:08.240 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.USD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:26:08.995 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Processing currency: ZAR +2025-05-22 16:26:08.996 INFO 13108 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ZAR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:38.747 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 16:30:38.791 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: AUD +2025-05-22 16:30:38.794 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.AUD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:39.589 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: BGN +2025-05-22 16:30:39.590 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BGN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:40.074 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: BRL +2025-05-22 16:30:40.075 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:40.535 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: CAD +2025-05-22 16:30:40.538 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CAD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:40.975 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: CHF +2025-05-22 16:30:40.976 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CHF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:41.601 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: CNY +2025-05-22 16:30:41.602 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CNY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:42.126 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: CYP +2025-05-22 16:30:42.127 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CYP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:42.447 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: CZK +2025-05-22 16:30:42.449 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CZK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:43.237 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: DKK +2025-05-22 16:30:43.238 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.DKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:43.633 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: EEK +2025-05-22 16:30:43.634 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.EEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:43.899 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: GBP +2025-05-22 16:30:43.900 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GBP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:44.661 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: GRD +2025-05-22 16:30:44.662 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GRD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:44.834 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: HKD +2025-05-22 16:30:44.834 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HKD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:46.008 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: HRK +2025-05-22 16:30:46.009 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HRK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:46.526 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: HUF +2025-05-22 16:30:46.527 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HUF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:47.230 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: IDR +2025-05-22 16:30:47.231 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.IDR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:47.727 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: ILS +2025-05-22 16:30:47.727 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ILS.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:48.289 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: INR +2025-05-22 16:30:48.290 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.INR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:48.893 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: ISK +2025-05-22 16:30:48.894 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ISK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:49.396 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: JPY +2025-05-22 16:30:49.397 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.JPY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:50.020 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: KRW +2025-05-22 16:30:50.021 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.KRW.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:50.546 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: LTL +2025-05-22 16:30:50.547 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:51.032 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: LVL +2025-05-22 16:30:51.033 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LVL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:51.488 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: MTL +2025-05-22 16:30:51.489 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:51.707 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: MXN +2025-05-22 16:30:51.708 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MXN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:52.349 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: MYR +2025-05-22 16:30:52.350 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MYR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:53.017 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: NOK +2025-05-22 16:30:53.018 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NOK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:53.586 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: NZD +2025-05-22 16:30:53.587 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NZD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:53.970 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: PHP +2025-05-22 16:30:53.971 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PHP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:54.358 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: PLN +2025-05-22 16:30:54.359 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PLN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:54.771 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: ROL +2025-05-22 16:30:54.772 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ROL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:54.928 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: RON +2025-05-22 16:30:54.929 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RON.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:55.438 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: RUB +2025-05-22 16:30:55.438 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RUB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:55.920 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: SEK +2025-05-22 16:30:55.920 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:56.542 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: SGD +2025-05-22 16:30:56.542 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SGD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:57.125 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: SIT +2025-05-22 16:30:57.126 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SIT.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:57.372 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: SKK +2025-05-22 16:30:57.373 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:57.760 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: THB +2025-05-22 16:30:57.761 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.THB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:58.314 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: TRL +2025-05-22 16:30:58.316 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:58.596 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: TRY +2025-05-22 16:30:58.597 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:59.043 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: USD +2025-05-22 16:30:59.044 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.USD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:30:59.908 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Processing currency: ZAR +2025-05-22 16:30:59.909 INFO 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ZAR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:31:03.518 ERROR 13108 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyServiceImpl : Failed to fetch data from Bundesbank for currency ZAR: Error while extracting response for type [class com.crewmeister.cmcodingchallenge.xmldata.GenericData] and content type [application/vnd.sdmx.genericdata+xml;version=2.1;charset=UTF-8]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Connection reset; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Connection reset + at [Source: (PushbackInputStream); line: 1, column: 1404829] (through reference chain: com.crewmeister.cmcodingchallenge.xmldata.GenericData["DataSet"]->com.crewmeister.cmcodingchallenge.xmldata.DataSet["Series"]->com.crewmeister.cmcodingchallenge.xmldata.Series["Obs"]) +2025-05-22 16:31:03.538 WARN 13108 --- [http-nio-8080-exec-4] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.crewmeister.cmcodingchallenge.exception.InvalidRequestException: Unable to retrieve FX rate data, please check logs for more details] +2025-05-22 16:32:56.038 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 16:32:56.223 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: AUD +2025-05-22 16:32:56.236 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.AUD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:32:57.332 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: BGN +2025-05-22 16:32:57.333 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BGN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:32:58.246 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: BRL +2025-05-22 16:32:58.249 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:32:58.823 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: CAD +2025-05-22 16:32:58.823 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CAD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:32:59.383 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: CHF +2025-05-22 16:32:59.384 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CHF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:32:59.797 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: CNY +2025-05-22 16:32:59.797 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CNY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:00.232 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: CYP +2025-05-22 16:33:00.232 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CYP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:00.452 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: CZK +2025-05-22 16:33:00.453 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CZK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:01.089 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: DKK +2025-05-22 16:33:01.089 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.DKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:01.556 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: EEK +2025-05-22 16:33:01.557 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.EEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:01.744 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: GBP +2025-05-22 16:33:01.744 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GBP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:02.282 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: GRD +2025-05-22 16:33:02.283 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GRD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:02.416 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: HKD +2025-05-22 16:33:02.416 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HKD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:02.806 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: HRK +2025-05-22 16:33:02.806 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HRK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:03.146 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: HUF +2025-05-22 16:33:03.146 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HUF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:03.534 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: IDR +2025-05-22 16:33:03.534 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.IDR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:03.933 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: ILS +2025-05-22 16:33:03.933 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ILS.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:04.297 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: INR +2025-05-22 16:33:04.297 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.INR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:04.666 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: ISK +2025-05-22 16:33:04.666 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ISK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:05.036 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: JPY +2025-05-22 16:33:05.037 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.JPY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:05.571 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: KRW +2025-05-22 16:33:05.572 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.KRW.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:06.070 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: LTL +2025-05-22 16:33:06.071 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:06.308 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: LVL +2025-05-22 16:33:06.309 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LVL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:06.564 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: MTL +2025-05-22 16:33:06.564 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:06.735 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: MXN +2025-05-22 16:33:06.735 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MXN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:07.104 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: MYR +2025-05-22 16:33:07.104 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MYR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:07.481 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: NOK +2025-05-22 16:33:07.481 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NOK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:07.853 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: NZD +2025-05-22 16:33:07.854 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NZD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:08.240 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: PHP +2025-05-22 16:33:08.241 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PHP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:08.615 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: PLN +2025-05-22 16:33:08.615 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PLN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:08.990 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: ROL +2025-05-22 16:33:08.990 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ROL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:09.087 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: RON +2025-05-22 16:33:09.088 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RON.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:09.499 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: RUB +2025-05-22 16:33:09.499 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RUB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:09.966 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: SEK +2025-05-22 16:33:09.967 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:10.340 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: SGD +2025-05-22 16:33:10.341 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SGD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:10.711 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: SIT +2025-05-22 16:33:10.711 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SIT.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:10.849 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: SKK +2025-05-22 16:33:10.849 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:11.084 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: THB +2025-05-22 16:33:11.085 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.THB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:11.606 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: TRL +2025-05-22 16:33:11.606 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:11.763 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: TRY +2025-05-22 16:33:11.763 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:12.226 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: USD +2025-05-22 16:33:12.227 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.USD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:33:12.943 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: ZAR +2025-05-22 16:33:12.943 INFO 13108 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ZAR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 16:44:25.301 INFO 2296 --- [main] c.c.c.c.CurrencyControllerTests : Starting CurrencyControllerTests using Java 11.0.27 on DESKTOP-7MLLRMP with PID 2296 (started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 16:44:25.310 DEBUG 2296 --- [main] c.c.c.c.CurrencyControllerTests : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 16:44:25.316 INFO 2296 --- [main] c.c.c.c.CurrencyControllerTests : No active profile set, falling back to default profiles: default +2025-05-22 16:44:29.735 INFO 2296 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$6c3a44c7] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 16:44:30.159 WARN 2296 --- [main] o.s.w.c.s.GenericWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'securityConfig': Unsatisfied dependency expressed through field 'userDetailsService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.crewmeister.cmcodingchallenge.security.MyUserDetailsService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} +2025-05-22 16:44:30.174 INFO 2296 --- [main] ConditionEvaluationReportLoggingListener : + +Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. +2025-05-22 16:44:30.229 ERROR 2296 --- [main] o.s.b.d.LoggingFailureAnalysisReporter : + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +Field userDetailsService in com.crewmeister.cmcodingchallenge.security.SecurityConfig required a bean of type 'com.crewmeister.cmcodingchallenge.security.MyUserDetailsService' that could not be found. + +The injection point has the following annotations: + - @org.springframework.beans.factory.annotation.Autowired(required=true) + + +Action: + +Consider defining a bean of type 'com.crewmeister.cmcodingchallenge.security.MyUserDetailsService' in your configuration. + +2025-05-22 16:44:30.244 ERROR 2296 --- [main] o.s.test.context.TestContextManager : Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@68f4865] to prepare test instance [com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests@66e21568] + +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:123) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:105) ~[spring-boot-test-2.4.1.jar:2.4.1] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:89) ~[spring-boot-test-2.4.1.jar:2.4.1] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:56) ~[spring-boot-test-2.4.1.jar:2.4.1] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:137) ~[spring-test-5.3.2.jar:5.3.2] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$6(ClassBasedTestDescriptor.java:350) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:355) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$7(ClassBasedTestDescriptor.java:350) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:349) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$4(ClassBasedTestDescriptor.java:270) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:269) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$2(ClassBasedTestDescriptor.java:259) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at java.base/java.util.Optional.orElseGet(Optional.java:369) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$3(ClassBasedTestDescriptor.java:258) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:101) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:100) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$1(NodeTestTask.java:111) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:111) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:79) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'securityConfig': Unsatisfied dependency expressed through field 'userDetailsService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.crewmeister.cmcodingchallenge.security.MyUserDetailsService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1415) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:608) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:923) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:122) ~[spring-boot-test-2.4.1.jar:2.4.1] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) ~[spring-test-5.3.2.jar:5.3.2] + ... 70 common frames omitted +Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.crewmeister.cmcodingchallenge.security.MyUserDetailsService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} + at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1777) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1333) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1287) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.3.2.jar:5.3.2] + ... 89 common frames omitted + +2025-05-22 16:49:50.180 INFO 10424 --- [main] c.c.c.c.CurrencyControllerTests : Starting CurrencyControllerTests using Java 11.0.27 on DESKTOP-7MLLRMP with PID 10424 (started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 16:49:50.195 DEBUG 10424 --- [main] c.c.c.c.CurrencyControllerTests : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 16:49:50.227 INFO 10424 --- [main] c.c.c.c.CurrencyControllerTests : No active profile set, falling back to default profiles: default +2025-05-22 16:49:54.100 INFO 10424 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$e415b718] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 16:49:54.440 WARN 10424 --- [main] o.s.w.c.s.GenericWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'securityConfig': Unsatisfied dependency expressed through field 'userDetailsService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.crewmeister.cmcodingchallenge.security.MyUserDetailsService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} +2025-05-22 16:49:54.453 INFO 10424 --- [main] ConditionEvaluationReportLoggingListener : + +Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. +2025-05-22 16:49:54.491 ERROR 10424 --- [main] o.s.b.d.LoggingFailureAnalysisReporter : + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +Field userDetailsService in com.crewmeister.cmcodingchallenge.security.SecurityConfig required a bean of type 'com.crewmeister.cmcodingchallenge.security.MyUserDetailsService' that could not be found. + +The injection point has the following annotations: + - @org.springframework.beans.factory.annotation.Autowired(required=true) + + +Action: + +Consider defining a bean of type 'com.crewmeister.cmcodingchallenge.security.MyUserDetailsService' in your configuration. + +2025-05-22 16:49:54.505 ERROR 10424 --- [main] o.s.test.context.TestContextManager : Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@40317ba2] to prepare test instance [com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests@7573b9ee] + +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:123) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:105) ~[spring-boot-test-2.4.1.jar:2.4.1] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:89) ~[spring-boot-test-2.4.1.jar:2.4.1] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:56) ~[spring-boot-test-2.4.1.jar:2.4.1] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:137) ~[spring-test-5.3.2.jar:5.3.2] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$6(ClassBasedTestDescriptor.java:350) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:355) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$7(ClassBasedTestDescriptor.java:350) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:349) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$4(ClassBasedTestDescriptor.java:270) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:269) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$2(ClassBasedTestDescriptor.java:259) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at java.base/java.util.Optional.orElseGet(Optional.java:369) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$3(ClassBasedTestDescriptor.java:258) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:101) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:100) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$1(NodeTestTask.java:111) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:111) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:79) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'securityConfig': Unsatisfied dependency expressed through field 'userDetailsService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.crewmeister.cmcodingchallenge.security.MyUserDetailsService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1415) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:608) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:923) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:122) ~[spring-boot-test-2.4.1.jar:2.4.1] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) ~[spring-test-5.3.2.jar:5.3.2] + ... 70 common frames omitted +Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.crewmeister.cmcodingchallenge.security.MyUserDetailsService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} + at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1777) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1333) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1287) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.3.2.jar:5.3.2] + ... 89 common frames omitted + +2025-05-22 16:53:08.062 INFO 12416 --- [main] c.c.c.c.CurrencyControllerTests : Starting CurrencyControllerTests using Java 11.0.27 on DESKTOP-7MLLRMP with PID 12416 (started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 16:53:08.067 DEBUG 12416 --- [main] c.c.c.c.CurrencyControllerTests : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 16:53:08.077 INFO 12416 --- [main] c.c.c.c.CurrencyControllerTests : No active profile set, falling back to default profiles: default +2025-05-22 16:53:12.461 INFO 12416 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$d8ed45a0] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 16:53:12.936 WARN 12416 --- [main] o.s.w.c.s.GenericWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'securityConfig': Unsatisfied dependency expressed through field 'passwordEncoder'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.security.crypto.password.PasswordEncoder' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} +2025-05-22 16:53:12.965 INFO 12416 --- [main] ConditionEvaluationReportLoggingListener : + +Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. +2025-05-22 16:53:13.179 ERROR 12416 --- [main] o.s.b.d.LoggingFailureAnalysisReporter : + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +Field passwordEncoder in com.crewmeister.cmcodingchallenge.security.SecurityConfig required a bean of type 'org.springframework.security.crypto.password.PasswordEncoder' that could not be found. + +The injection point has the following annotations: + - @org.springframework.beans.factory.annotation.Autowired(required=true) + + +Action: + +Consider defining a bean of type 'org.springframework.security.crypto.password.PasswordEncoder' in your configuration. + +2025-05-22 16:53:13.197 ERROR 12416 --- [main] o.s.test.context.TestContextManager : Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@5b7a8434] to prepare test instance [com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests@515b9d4a] + +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:123) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:105) ~[spring-boot-test-2.4.1.jar:2.4.1] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:89) ~[spring-boot-test-2.4.1.jar:2.4.1] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:56) ~[spring-boot-test-2.4.1.jar:2.4.1] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:137) ~[spring-test-5.3.2.jar:5.3.2] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$6(ClassBasedTestDescriptor.java:350) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:355) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$7(ClassBasedTestDescriptor.java:350) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:349) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$4(ClassBasedTestDescriptor.java:270) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:269) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$2(ClassBasedTestDescriptor.java:259) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at java.base/java.util.Optional.orElseGet(Optional.java:369) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$3(ClassBasedTestDescriptor.java:258) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:101) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:100) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$1(NodeTestTask.java:111) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:111) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:79) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'securityConfig': Unsatisfied dependency expressed through field 'passwordEncoder'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.security.crypto.password.PasswordEncoder' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1415) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:608) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:923) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) ~[spring-context-5.3.2.jar:5.3.2] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.1.jar:2.4.1] + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:122) ~[spring-boot-test-2.4.1.jar:2.4.1] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) ~[spring-test-5.3.2.jar:5.3.2] + ... 70 common frames omitted +Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.security.crypto.password.PasswordEncoder' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} + at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1777) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1333) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1287) ~[spring-beans-5.3.2.jar:5.3.2] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.3.2.jar:5.3.2] + ... 89 common frames omitted + +2025-05-22 16:54:42.295 INFO 9568 --- [main] c.c.c.c.CurrencyControllerTests : Starting CurrencyControllerTests using Java 11.0.27 on DESKTOP-7MLLRMP with PID 9568 (started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 16:54:42.299 DEBUG 9568 --- [main] c.c.c.c.CurrencyControllerTests : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 16:54:42.311 INFO 9568 --- [main] c.c.c.c.CurrencyControllerTests : No active profile set, falling back to default profiles: default +2025-05-22 16:54:46.384 INFO 9568 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$d701129c] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 16:54:48.152 INFO 9568 --- [main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@582e9152, org.springframework.security.web.context.SecurityContextPersistenceFilter@339f3a55, org.springframework.security.web.header.HeaderWriterFilter@296edc75, org.springframework.security.web.authentication.logout.LogoutFilter@7ab2a07e, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@3520958b, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@426131d7, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@7a31ca20, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@209f3887, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3830b06c, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@349c4d1c, org.springframework.security.web.session.SessionManagementFilter@6d0290d8, org.springframework.security.web.access.ExceptionTranslationFilter@19f02280, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@7abeabe9] +2025-05-22 16:54:48.760 INFO 9568 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 16:54:49.371 INFO 9568 --- [main] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet '' +2025-05-22 16:54:49.372 INFO 9568 --- [main] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet '' +2025-05-22 16:54:49.375 INFO 9568 --- [main] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 2 ms +2025-05-22 16:54:49.437 INFO 9568 --- [main] c.c.c.c.CurrencyControllerTests : Started CurrencyControllerTests in 8.649 seconds (JVM running for 12.559) +2025-05-22 16:54:49.726 INFO 9568 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor' +2025-05-22 16:56:44.977 INFO 12916 --- [main] c.c.c.c.CurrencyControllerTests : Starting CurrencyControllerTests using Java 11.0.27 on DESKTOP-7MLLRMP with PID 12916 (started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 16:56:44.982 DEBUG 12916 --- [main] c.c.c.c.CurrencyControllerTests : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 16:56:45.003 INFO 12916 --- [main] c.c.c.c.CurrencyControllerTests : No active profile set, falling back to default profiles: default +2025-05-22 16:56:49.046 INFO 12916 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$c051c43d] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 16:56:50.445 INFO 12916 --- [main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@76cdafa3, org.springframework.security.web.context.SecurityContextPersistenceFilter@49580ca8, org.springframework.security.web.header.HeaderWriterFilter@426131d7, org.springframework.security.web.authentication.logout.LogoutFilter@56a4abd0, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@60b5e80d, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@280fafd, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@6b27b2d0, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@20a24edf, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@77524ca7, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@4fb64e14, org.springframework.security.web.session.SessionManagementFilter@13cc0b90, org.springframework.security.web.access.ExceptionTranslationFilter@339f3a55, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@1c98b4eb] +2025-05-22 16:56:51.194 INFO 12916 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 16:56:51.925 INFO 12916 --- [main] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet '' +2025-05-22 16:56:51.926 INFO 12916 --- [main] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet '' +2025-05-22 16:56:51.929 INFO 12916 --- [main] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 2 ms +2025-05-22 16:56:52.003 INFO 12916 --- [main] c.c.c.c.CurrencyControllerTests : Started CurrencyControllerTests in 8.332 seconds (JVM running for 11.343) +2025-05-22 16:56:53.488 INFO 12916 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor' +2025-05-22 16:58:01.172 INFO 17372 --- [main] c.c.c.c.CurrencyControllerTests : Starting CurrencyControllerTests using Java 11.0.27 on DESKTOP-7MLLRMP with PID 17372 (started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 16:58:01.176 DEBUG 17372 --- [main] c.c.c.c.CurrencyControllerTests : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 16:58:01.180 INFO 17372 --- [main] c.c.c.c.CurrencyControllerTests : No active profile set, falling back to default profiles: default +2025-05-22 16:58:05.550 INFO 17372 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$c051c43d] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 16:58:07.234 INFO 17372 --- [main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@b5aa65b, org.springframework.security.web.context.SecurityContextPersistenceFilter@3a3b10f4, org.springframework.security.web.header.HeaderWriterFilter@3a0aaaf0, org.springframework.security.web.authentication.logout.LogoutFilter@69ed5ea2, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@2fd39436, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@6af609ea, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@76cdafa3, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@42fc4ac4, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@35145874, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@6b27b2d0, org.springframework.security.web.session.SessionManagementFilter@7c7e73c5, org.springframework.security.web.access.ExceptionTranslationFilter@4ae2e781, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@7f27f59b] +2025-05-22 16:58:07.865 INFO 17372 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 16:58:08.460 INFO 17372 --- [main] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet '' +2025-05-22 16:58:08.461 INFO 17372 --- [main] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet '' +2025-05-22 16:58:08.464 INFO 17372 --- [main] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 2 ms +2025-05-22 16:58:08.522 INFO 17372 --- [main] c.c.c.c.CurrencyControllerTests : Started CurrencyControllerTests in 8.779 seconds (JVM running for 12.019) +2025-05-22 16:58:09.481 INFO 17372 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor' +2025-05-22 17:01:20.618 INFO 17228 --- [main] c.c.c.c.CurrencyControllerTests : Starting CurrencyControllerTests using Java 11.0.27 on DESKTOP-7MLLRMP with PID 17228 (started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 17:01:20.623 DEBUG 17228 --- [main] c.c.c.c.CurrencyControllerTests : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 17:01:20.647 INFO 17228 --- [main] c.c.c.c.CurrencyControllerTests : No active profile set, falling back to default profiles: default +2025-05-22 17:01:24.864 INFO 17228 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$2b234e1b] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 17:01:26.897 INFO 17228 --- [main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@391515c7, org.springframework.security.web.context.SecurityContextPersistenceFilter@3a0aaaf0, org.springframework.security.web.header.HeaderWriterFilter@6a2d867d, org.springframework.security.web.authentication.logout.LogoutFilter@361cd35c, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@689faf79, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@43a4a9e5, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@5b0dbfb, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7c7e73c5, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@20a24edf, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@4b9dbf07, org.springframework.security.web.session.SessionManagementFilter@3830b06c, org.springframework.security.web.access.ExceptionTranslationFilter@5db948c9, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@69796bd0] +2025-05-22 17:01:27.673 INFO 17228 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 17:01:28.288 INFO 17228 --- [main] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet '' +2025-05-22 17:01:28.289 INFO 17228 --- [main] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet '' +2025-05-22 17:01:28.292 INFO 17228 --- [main] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 3 ms +2025-05-22 17:01:28.348 INFO 17228 --- [main] c.c.c.c.CurrencyControllerTests : Started CurrencyControllerTests in 9.01 seconds (JVM running for 12.003) +2025-05-22 17:01:28.645 INFO 17228 --- [main] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:01:28.740 INFO 17228 --- [main] c.c.c.c.CurrencyController : Fetching the list of Currencies +2025-05-22 17:01:28.793 INFO 17228 --- [main] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:01:29.121 ERROR 17228 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'date': rejected value [null]; codes [NotNull.FXRequestDto.date,NotNull.date,NotNull.java.time.LocalDate,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.date,date]; arguments []; default message [date]]; default message [Date is required] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithNullDateInput(CurrencyControllerTests.java:212) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:01:29.301 ERROR 17228 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character (']' (code 93)): expected a value; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Unexpected character (']' (code 93)): expected a value + at [Source: (PushbackInputStream); line: 6, column: 4] (through reference chain: com.crewmeister.cmcodingchallenge.currency.CurrencyWrapper["currencies"]) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:285) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:243) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:205) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testAddCurrencyWithInvalidInputCurrencies(CurrencyControllerTests.java:61) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] +Caused by: com.fasterxml.jackson.databind.JsonMappingException: Unexpected character (']' (code 93)): expected a value + at [Source: (PushbackInputStream); line: 6, column: 4] (through reference chain: com.crewmeister.cmcodingchallenge.currency.CurrencyWrapper["currencies"]) + at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:397) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:356) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1726) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:373) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:164) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4526) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3521) ~[jackson-databind-2.11.3.jar:2.11.3] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:274) ~[spring-web-5.3.2.jar:5.3.2] + ... 142 common frames omitted +Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character (']' (code 93)): expected a value + at [Source: (PushbackInputStream); line: 6, column: 4] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1851) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:707) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:632) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2653) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:865) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:757) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:281) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:249) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:26) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:371) ~[jackson-databind-2.11.3.jar:2.11.3] + ... 146 common frames omitted + +2025-05-22 17:01:29.346 ERROR 17228 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [0.0]; codes [Positive.FXRequestDto.amount,Positive.amount,Positive.double,Positive]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Amount must be a positive number] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithZeroAmountInput(CurrencyControllerTests.java:268) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:01:29.365 INFO 17228 --- [main] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:01:29.389 ERROR 17228 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'date': rejected value [16-05-2025]; codes [typeMismatch.FXRequestDto.date,typeMismatch.date,typeMismatch.java.time.LocalDate,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.date,date]; arguments []; default message [date]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDate' for property 'date'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.validation.constraints.NotNull @org.springframework.format.annotation.DateTimeFormat java.time.LocalDate] for value '16-05-2025'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [16-05-2025]] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithInValidDateInput(CurrencyControllerTests.java:246) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:01:29.411 ERROR 17228 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'currency': rejected value [INS]; codes [typeMismatch.FXRequestDto.currency,typeMismatch.currency,typeMismatch.com.crewmeister.cmcodingchallenge.currency.CurrencyConstants,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.currency,currency]; arguments []; default message [currency]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.crewmeister.cmcodingchallenge.currency.CurrencyConstants' for property 'currency'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.validation.constraints.NotNull com.crewmeister.cmcodingchallenge.currency.CurrencyConstants] for value 'INS'; nested exception is java.lang.IllegalArgumentException: No enum constant com.crewmeister.cmcodingchallenge.currency.CurrencyConstants.INS] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithInValidCurrencyInput(CurrencyControllerTests.java:257) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:01:29.469 ERROR 17228 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value []; codes [typeMismatch.FXRequestDto.amount,typeMismatch.amount,typeMismatch.double,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'double' for property 'amount'; nested exception is java.lang.NumberFormatException: empty String] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithNullAmountInput(CurrencyControllerTests.java:235) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:01:29.681 INFO 17228 --- [main] c.c.c.c.CurrencyController : Adding the list of Currency +2025-05-22 17:01:29.707 INFO 17228 --- [main] c.c.c.c.CurrencyController : Received FX request: com.crewmeister.cmcodingchallenge.currencydto.FXRequestDto@2b2b7e3c +2025-05-22 17:01:29.737 INFO 17228 --- [main] c.c.c.c.CurrencyController : Fetching the list of Currencies +2025-05-22 17:01:29.761 ERROR 17228 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [-500.0]; codes [Positive.FXRequestDto.amount,Positive.amount,Positive.double,Positive]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Amount must be a positive number] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithNegativeAmountInput(CurrencyControllerTests.java:280) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:01:29.781 INFO 17228 --- [main] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:01:29.831 INFO 17228 --- [main] c.c.c.c.CurrencyController : Adding the list of Currency +2025-05-22 17:01:29.859 INFO 17228 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor' +2025-05-22 17:02:38.548 INFO 13296 --- [main] c.c.c.c.CurrencyControllerTests : Starting CurrencyControllerTests using Java 11.0.27 on DESKTOP-7MLLRMP with PID 13296 (started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 17:02:38.553 DEBUG 13296 --- [main] c.c.c.c.CurrencyControllerTests : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 17:02:38.567 INFO 13296 --- [main] c.c.c.c.CurrencyControllerTests : No active profile set, falling back to default profiles: default +2025-05-22 17:02:42.598 INFO 13296 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$1ebe0129] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 17:02:44.265 INFO 13296 --- [main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@a2b54e3, org.springframework.security.web.context.SecurityContextPersistenceFilter@29962b2f, org.springframework.security.web.header.HeaderWriterFilter@58687fb7, org.springframework.security.web.authentication.logout.LogoutFilter@269222ae, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@4d518c66, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@4b03cbad, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@5c4cc644, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@5b733ef7, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@6af609ea, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@21f7e537, org.springframework.security.web.session.SessionManagementFilter@49580ca8, org.springframework.security.web.access.ExceptionTranslationFilter@6a98f353, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@6cc64028] +2025-05-22 17:02:45.153 INFO 13296 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 17:02:45.981 INFO 13296 --- [main] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet '' +2025-05-22 17:02:45.982 INFO 13296 --- [main] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet '' +2025-05-22 17:02:45.985 INFO 13296 --- [main] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 2 ms +2025-05-22 17:02:46.049 INFO 13296 --- [main] c.c.c.c.CurrencyControllerTests : Started CurrencyControllerTests in 8.771 seconds (JVM running for 11.696) +2025-05-22 17:02:46.414 INFO 13296 --- [main] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:02:46.529 INFO 13296 --- [main] c.c.c.c.CurrencyController : Fetching the list of Currencies +2025-05-22 17:02:46.597 INFO 13296 --- [main] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:02:47.089 ERROR 13296 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'date': rejected value [null]; codes [NotNull.FXRequestDto.date,NotNull.date,NotNull.java.time.LocalDate,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.date,date]; arguments []; default message [date]]; default message [Date is required] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithNullDateInput(CurrencyControllerTests.java:212) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:02:47.333 ERROR 13296 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character (']' (code 93)): expected a value; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Unexpected character (']' (code 93)): expected a value + at [Source: (PushbackInputStream); line: 6, column: 4] (through reference chain: com.crewmeister.cmcodingchallenge.currency.CurrencyWrapper["currencies"]) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:285) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:243) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:205) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testAddCurrencyWithInvalidInputCurrencies(CurrencyControllerTests.java:61) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] +Caused by: com.fasterxml.jackson.databind.JsonMappingException: Unexpected character (']' (code 93)): expected a value + at [Source: (PushbackInputStream); line: 6, column: 4] (through reference chain: com.crewmeister.cmcodingchallenge.currency.CurrencyWrapper["currencies"]) + at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:397) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:356) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1726) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:373) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:164) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4526) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3521) ~[jackson-databind-2.11.3.jar:2.11.3] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:274) ~[spring-web-5.3.2.jar:5.3.2] + ... 142 common frames omitted +Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character (']' (code 93)): expected a value + at [Source: (PushbackInputStream); line: 6, column: 4] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1851) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:707) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:632) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2653) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:865) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:757) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:281) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:249) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:26) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:371) ~[jackson-databind-2.11.3.jar:2.11.3] + ... 146 common frames omitted + +2025-05-22 17:02:47.386 ERROR 13296 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [0.0]; codes [Positive.FXRequestDto.amount,Positive.amount,Positive.double,Positive]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Amount must be a positive number] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithZeroAmountInput(CurrencyControllerTests.java:268) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:02:47.435 INFO 13296 --- [main] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:02:47.464 ERROR 13296 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'date': rejected value [16-05-2025]; codes [typeMismatch.FXRequestDto.date,typeMismatch.date,typeMismatch.java.time.LocalDate,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.date,date]; arguments []; default message [date]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDate' for property 'date'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.validation.constraints.NotNull @org.springframework.format.annotation.DateTimeFormat java.time.LocalDate] for value '16-05-2025'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [16-05-2025]] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithInValidDateInput(CurrencyControllerTests.java:246) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:02:47.499 ERROR 13296 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'currency': rejected value [INS]; codes [typeMismatch.FXRequestDto.currency,typeMismatch.currency,typeMismatch.com.crewmeister.cmcodingchallenge.currency.CurrencyConstants,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.currency,currency]; arguments []; default message [currency]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.crewmeister.cmcodingchallenge.currency.CurrencyConstants' for property 'currency'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.validation.constraints.NotNull com.crewmeister.cmcodingchallenge.currency.CurrencyConstants] for value 'INS'; nested exception is java.lang.IllegalArgumentException: No enum constant com.crewmeister.cmcodingchallenge.currency.CurrencyConstants.INS] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithInValidCurrencyInput(CurrencyControllerTests.java:257) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:02:47.575 ERROR 13296 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value []; codes [typeMismatch.FXRequestDto.amount,typeMismatch.amount,typeMismatch.double,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'double' for property 'amount'; nested exception is java.lang.NumberFormatException: empty String] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithNullAmountInput(CurrencyControllerTests.java:235) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:02:47.884 INFO 13296 --- [main] c.c.c.c.CurrencyController : Adding the list of Currency +2025-05-22 17:02:47.917 INFO 13296 --- [main] c.c.c.c.CurrencyController : Received FX request: com.crewmeister.cmcodingchallenge.currencydto.FXRequestDto@28519bfb +2025-05-22 17:02:47.957 INFO 13296 --- [main] c.c.c.c.CurrencyController : Fetching the list of Currencies +2025-05-22 17:02:47.988 ERROR 13296 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [-500.0]; codes [Positive.FXRequestDto.amount,Positive.amount,Positive.double,Positive]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Amount must be a positive number] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithNegativeAmountInput(CurrencyControllerTests.java:280) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:02:48.013 INFO 13296 --- [main] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:02:48.038 ERROR 13296 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'currency': rejected value [null]; codes [NotNull.FXRequestDto.currency,NotNull.currency,NotNull.com.crewmeister.cmcodingchallenge.currency.CurrencyConstants,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.currency,currency]; arguments []; default message [currency]]; default message [Currency is required] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithNullCurrencyInput(CurrencyControllerTests.java:224) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:02:48.056 INFO 13296 --- [main] c.c.c.c.CurrencyController : Adding the list of Currency +2025-05-22 17:02:48.093 INFO 13296 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor' +2025-05-22 17:05:27.934 INFO 12576 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 12576 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 17:05:27.939 DEBUG 12576 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 17:05:27.940 INFO 12576 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 17:05:28.040 INFO 12576 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 17:05:28.041 INFO 12576 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 17:05:29.317 INFO 12576 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 17:05:29.420 INFO 12576 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 89 ms. Found 2 JPA repository interfaces. +2025-05-22 17:05:29.928 INFO 12576 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$b0c2adfc] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 17:05:30.707 INFO 12576 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 17:05:30.725 INFO 12576 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 17:05:30.725 INFO 12576 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 17:05:30.859 INFO 12576 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 17:05:30.860 INFO 12576 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2817 ms +2025-05-22 17:05:30.934 INFO 12576 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 17:05:31.115 INFO 12576 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 17:05:31.125 INFO 12576 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 17:05:31.343 INFO 12576 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 17:05:31.452 INFO 12576 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 17:05:31.691 INFO 12576 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 17:05:31.872 INFO 12576 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 17:05:32.940 INFO 12576 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 17:05:32.966 INFO 12576 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 17:05:33.004 INFO 12576 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 17:05:33.927 WARN 12576 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 17:05:34.164 INFO 12576 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@7c45a479, org.springframework.security.web.context.SecurityContextPersistenceFilter@7fa6c1f5, org.springframework.security.web.header.HeaderWriterFilter@10395dab, org.springframework.security.web.authentication.logout.LogoutFilter@b27d78b, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@6bf12bcf, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@542d556c, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@1479ba3c, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@720c8832, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@361fbec1, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@490309a8, org.springframework.security.web.session.SessionManagementFilter@5bdf9336, org.springframework.security.web.access.ExceptionTranslationFilter@20d9757c, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@231bf5d2] +2025-05-22 17:05:34.372 INFO 12576 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 17:05:34.719 INFO 12576 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 17:05:34.736 INFO 12576 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 7.876 seconds (JVM running for 8.702) +2025-05-22 17:06:01.409 INFO 12576 --- [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 17:06:01.410 INFO 12576 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 17:06:01.413 INFO 12576 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms +2025-05-22 17:06:01.643 INFO 12576 --- [http-nio-8080-exec-1] c.c.c.c.CurrencyController : Adding the list of Currency +2025-05-22 17:06:01.692 WARN 12576 --- [http-nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [java.lang.IllegalArgumentException: Currency list must not be null or empty] +2025-05-22 17:06:09.682 ERROR 12576 --- [http-nio-8080-exec-2] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character (',' (code 44)): was expecting double-quote to start field name; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Unexpected character (',' (code 44)): was expecting double-quote to start field name + at [Source: (PushbackInputStream); line: 4, column: 20] (through reference chain: com.crewmeister.cmcodingchallenge.currency.CurrencyWrapper["currencies"]->java.util.ArrayList[0]) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:285) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:243) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:205) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] +Caused by: com.fasterxml.jackson.databind.JsonMappingException: Unexpected character (',' (code 44)): was expecting double-quote to start field name + at [Source: (PushbackInputStream); line: 4, column: 20] (through reference chain: com.crewmeister.cmcodingchallenge.currency.CurrencyWrapper["currencies"]->java.util.ArrayList[0]) + at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:397) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:368) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:306) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:249) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:26) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:371) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:164) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4526) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3521) ~[jackson-databind-2.11.3.jar:2.11.3] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:274) ~[spring-web-5.3.2.jar:5.3.2] + ... 95 common frames omitted +Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character (',' (code 44)): was expecting double-quote to start field name + at [Source: (PushbackInputStream); line: 4, column: 20] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1851) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:707) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:632) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleOddName(UTF8StreamJsonParser.java:2049) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._parseName(UTF8StreamJsonParser.java:1700) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextFieldName(UTF8StreamJsonParser.java:1038) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:378) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:164) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:290) ~[jackson-databind-2.11.3.jar:2.11.3] + ... 103 common frames omitted + +2025-05-22 17:06:09.691 WARN 12576 --- [http-nio-8080-exec-2] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character (',' (code 44)): was expecting double-quote to start field name; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Unexpected character (',' (code 44)): was expecting double-quote to start field name + at [Source: (PushbackInputStream); line: 4, column: 20] (through reference chain: com.crewmeister.cmcodingchallenge.currency.CurrencyWrapper["currencies"]->java.util.ArrayList[0])] +2025-05-22 17:06:15.843 INFO 12576 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyController : Adding the list of Currency +2025-05-22 17:06:25.705 INFO 12576 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyController : Fetching the list of Currencies +2025-05-22 17:06:41.395 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:06:41.411 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: AUD +2025-05-22 17:06:41.512 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.AUD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:43.602 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: BGN +2025-05-22 17:06:43.603 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BGN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:44.244 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: BRL +2025-05-22 17:06:44.244 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:44.902 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: CAD +2025-05-22 17:06:44.903 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CAD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:45.552 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: CHF +2025-05-22 17:06:45.552 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CHF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:46.341 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: CNY +2025-05-22 17:06:46.341 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CNY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:46.977 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: CYP +2025-05-22 17:06:46.978 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CYP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:47.310 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: CZK +2025-05-22 17:06:47.311 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CZK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:48.092 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: DKK +2025-05-22 17:06:48.093 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.DKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:50.048 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: EEK +2025-05-22 17:06:50.049 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.EEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:50.506 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: GBP +2025-05-22 17:06:50.507 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GBP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:51.155 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: GRD +2025-05-22 17:06:51.155 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GRD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:51.313 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: HKD +2025-05-22 17:06:51.314 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HKD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:51.936 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: HRK +2025-05-22 17:06:51.937 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HRK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:52.481 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: HUF +2025-05-22 17:06:52.481 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HUF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:53.201 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: IDR +2025-05-22 17:06:53.202 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.IDR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:54.025 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: ILS +2025-05-22 17:06:54.026 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ILS.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:54.815 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: INR +2025-05-22 17:06:54.816 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.INR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:55.453 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: ISK +2025-05-22 17:06:55.454 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ISK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:56.022 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: JPY +2025-05-22 17:06:56.023 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.JPY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:56.705 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: KRW +2025-05-22 17:06:56.705 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.KRW.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:57.273 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: LTL +2025-05-22 17:06:57.274 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:57.772 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: LVL +2025-05-22 17:06:57.773 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LVL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:58.146 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: MTL +2025-05-22 17:06:58.147 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:58.410 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: MXN +2025-05-22 17:06:58.411 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MXN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:59.047 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: MYR +2025-05-22 17:06:59.048 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MYR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:06:59.733 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: NOK +2025-05-22 17:06:59.733 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NOK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:00.300 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: NZD +2025-05-22 17:07:00.300 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NZD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:00.974 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: PHP +2025-05-22 17:07:00.974 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PHP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:01.543 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: PLN +2025-05-22 17:07:01.543 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PLN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:02.123 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: ROL +2025-05-22 17:07:02.124 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ROL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:02.359 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: RON +2025-05-22 17:07:02.360 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RON.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:02.882 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: RUB +2025-05-22 17:07:02.883 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RUB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:03.422 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: SEK +2025-05-22 17:07:03.423 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:04.139 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: SGD +2025-05-22 17:07:04.140 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SGD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:04.794 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: SIT +2025-05-22 17:07:04.794 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SIT.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:05.068 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: SKK +2025-05-22 17:07:05.068 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:05.410 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: THB +2025-05-22 17:07:05.411 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.THB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:06.105 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: TRL +2025-05-22 17:07:06.106 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:06.278 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: TRY +2025-05-22 17:07:06.278 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:06.722 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: USD +2025-05-22 17:07:06.723 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.USD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:07.452 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: ZAR +2025-05-22 17:07:07.453 INFO 12576 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ZAR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:52.843 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:07:52.959 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: AUD +2025-05-22 17:07:52.967 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.AUD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:54.348 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: BGN +2025-05-22 17:07:54.351 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BGN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:55.285 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: BRL +2025-05-22 17:07:55.291 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:56.017 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: CAD +2025-05-22 17:07:56.018 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CAD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:56.682 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: CHF +2025-05-22 17:07:56.684 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CHF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:57.103 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: CNY +2025-05-22 17:07:57.104 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CNY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:57.493 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: CYP +2025-05-22 17:07:57.494 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CYP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:57.666 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: CZK +2025-05-22 17:07:57.667 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CZK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:58.239 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: DKK +2025-05-22 17:07:58.240 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.DKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:58.824 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: EEK +2025-05-22 17:07:58.826 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.EEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:59.015 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: GBP +2025-05-22 17:07:59.016 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GBP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:59.646 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: GRD +2025-05-22 17:07:59.647 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GRD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:07:59.855 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: HKD +2025-05-22 17:07:59.856 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HKD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:00.489 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: HRK +2025-05-22 17:08:00.490 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HRK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:01.190 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: HUF +2025-05-22 17:08:01.191 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HUF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:02.520 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: IDR +2025-05-22 17:08:02.521 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.IDR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:03.596 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: ILS +2025-05-22 17:08:03.597 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ILS.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:04.284 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: INR +2025-05-22 17:08:04.285 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.INR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:05.010 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: ISK +2025-05-22 17:08:05.011 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ISK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:06.047 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: JPY +2025-05-22 17:08:06.049 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.JPY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:06.803 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: KRW +2025-05-22 17:08:06.804 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.KRW.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:07.549 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: LTL +2025-05-22 17:08:07.551 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:07.980 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: LVL +2025-05-22 17:08:07.980 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LVL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:08.435 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: MTL +2025-05-22 17:08:08.436 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:08.687 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: MXN +2025-05-22 17:08:08.688 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MXN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:09.319 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: MYR +2025-05-22 17:08:09.320 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MYR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:10.056 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: NOK +2025-05-22 17:08:10.057 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NOK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:10.750 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: NZD +2025-05-22 17:08:10.750 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NZD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:11.463 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: PHP +2025-05-22 17:08:11.464 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PHP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:12.057 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: PLN +2025-05-22 17:08:12.058 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PLN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:12.838 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: ROL +2025-05-22 17:08:12.838 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ROL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:13.202 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: RON +2025-05-22 17:08:13.207 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RON.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:14.601 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: RUB +2025-05-22 17:08:14.602 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RUB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:15.161 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: SEK +2025-05-22 17:08:15.162 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:15.795 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: SGD +2025-05-22 17:08:15.796 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SGD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:16.504 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: SIT +2025-05-22 17:08:16.505 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SIT.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:16.769 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: SKK +2025-05-22 17:08:16.770 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:17.027 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: THB +2025-05-22 17:08:17.028 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.THB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:17.691 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: TRL +2025-05-22 17:08:17.692 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:17.962 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: TRY +2025-05-22 17:08:17.963 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:18.436 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: USD +2025-05-22 17:08:18.437 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.USD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:19.097 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: ZAR +2025-05-22 17:08:19.098 INFO 12576 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ZAR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:08:32.743 WARN 12576 --- [http-nio-8080-exec-7] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.time.LocalDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat java.time.LocalDate] for value '22'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [22]] +2025-05-22 17:11:29.546 INFO 12576 --- [Thread-4] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor' +2025-05-22 17:11:29.735 INFO 12576 --- [Thread-4] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 17:11:30.174 WARN 12576 --- [Thread-4] o.s.b.f.support.DisposableBeanAdapter : Invocation of destroy method failed on bean with name 'inMemoryDatabaseShutdownExecutor': org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] +2025-05-22 17:11:30.181 INFO 12576 --- [Thread-4] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... +2025-05-22 17:11:30.211 INFO 12576 --- [Thread-4] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. +2025-05-22 17:11:31.378 INFO 12576 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 12576 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 17:11:31.378 DEBUG 12576 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 17:11:31.380 INFO 12576 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 17:11:32.229 INFO 12576 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 17:11:32.288 INFO 12576 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 56 ms. Found 2 JPA repository interfaces. +2025-05-22 17:11:32.469 INFO 12576 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$b0c2adfc] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 17:11:32.601 INFO 12576 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 17:11:32.604 INFO 12576 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 17:11:32.605 INFO 12576 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 17:11:32.668 INFO 12576 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 17:11:32.668 INFO 12576 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1276 ms +2025-05-22 17:11:32.748 INFO 12576 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-2 - Starting... +2025-05-22 17:11:32.758 INFO 12576 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-2 - Start completed. +2025-05-22 17:11:32.759 INFO 12576 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 17:11:32.834 INFO 12576 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 17:11:32.855 INFO 12576 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 17:11:33.009 INFO 12576 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 17:11:33.010 INFO 12576 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 17:11:33.025 INFO 12576 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 17:11:33.315 WARN 12576 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 17:11:33.386 INFO 12576 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5d5ef130, org.springframework.security.web.context.SecurityContextPersistenceFilter@44bbf95d, org.springframework.security.web.header.HeaderWriterFilter@36bd0da9, org.springframework.security.web.authentication.logout.LogoutFilter@6542c83b, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@10c74c8b, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@12368652, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@4f375309, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1f4e7797, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@4140e192, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@1b98439a, org.springframework.security.web.session.SessionManagementFilter@5570cab2, org.springframework.security.web.access.ExceptionTranslationFilter@37ad8075, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@2e2f5a97] +2025-05-22 17:11:33.506 INFO 12576 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 17:11:33.678 INFO 12576 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 17:11:33.690 INFO 12576 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 2.461 seconds (JVM running for 367.656) +2025-05-22 17:11:33.695 INFO 12576 --- [restartedMain] .ConditionEvaluationDeltaLoggingListener : Condition evaluation unchanged +2025-05-22 17:11:35.708 INFO 12576 --- [Thread-8] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor' +2025-05-22 17:11:35.714 INFO 12576 --- [Thread-8] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 17:11:35.927 WARN 12576 --- [Thread-8] o.s.b.f.support.DisposableBeanAdapter : Invocation of destroy method failed on bean with name 'inMemoryDatabaseShutdownExecutor': org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-200] +2025-05-22 17:11:35.928 INFO 12576 --- [Thread-8] com.zaxxer.hikari.HikariDataSource : HikariPool-2 - Shutdown initiated... +2025-05-22 17:11:35.931 INFO 12576 --- [Thread-8] com.zaxxer.hikari.HikariDataSource : HikariPool-2 - Shutdown completed. +2025-05-22 17:11:36.117 INFO 12576 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 12576 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 17:11:36.118 DEBUG 12576 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 17:11:36.118 INFO 12576 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 17:11:36.731 INFO 12576 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 17:11:36.782 INFO 12576 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 49 ms. Found 2 JPA repository interfaces. +2025-05-22 17:11:37.018 INFO 12576 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$b0c2adfc] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 17:11:37.197 INFO 12576 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 17:11:37.202 INFO 12576 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 17:11:37.204 INFO 12576 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 17:11:37.271 INFO 12576 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 17:11:37.272 INFO 12576 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1147 ms +2025-05-22 17:11:37.386 INFO 12576 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-3 - Starting... +2025-05-22 17:11:37.391 INFO 12576 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-3 - Start completed. +2025-05-22 17:11:37.392 INFO 12576 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 17:11:37.468 INFO 12576 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 17:11:37.491 INFO 12576 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 17:11:37.607 INFO 12576 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 17:11:37.607 INFO 12576 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 17:11:37.621 INFO 12576 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 17:11:37.951 WARN 12576 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 17:11:38.035 INFO 12576 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@4d89fe00, org.springframework.security.web.context.SecurityContextPersistenceFilter@3ad31647, org.springframework.security.web.header.HeaderWriterFilter@315ce335, org.springframework.security.web.authentication.logout.LogoutFilter@2e9f9bf8, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@6d3ca86, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@1aa7d2a3, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@1f916c97, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@38d5d715, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@6e46de71, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@44e120ae, org.springframework.security.web.session.SessionManagementFilter@7f31749e, org.springframework.security.web.access.ExceptionTranslationFilter@169292ca, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@f4a9c2f] +2025-05-22 17:11:38.188 INFO 12576 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 17:11:38.371 INFO 12576 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 17:11:38.383 INFO 12576 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 2.335 seconds (JVM running for 372.349) +2025-05-22 17:11:38.387 INFO 12576 --- [restartedMain] .ConditionEvaluationDeltaLoggingListener : Condition evaluation unchanged +2025-05-22 17:11:40.331 INFO 4944 --- [main] c.c.c.c.CurrencyControllerTests : Starting CurrencyControllerTests using Java 11.0.27 on DESKTOP-7MLLRMP with PID 4944 (started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 17:11:40.340 DEBUG 4944 --- [main] c.c.c.c.CurrencyControllerTests : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 17:11:40.348 INFO 4944 --- [main] c.c.c.c.CurrencyControllerTests : No active profile set, falling back to default profiles: default +2025-05-22 17:11:44.627 INFO 4944 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$7c6e07a2] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 17:11:46.734 INFO 4944 --- [main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@251d7fdd, org.springframework.security.web.context.SecurityContextPersistenceFilter@15214920, org.springframework.security.web.header.HeaderWriterFilter@1e00bfe2, org.springframework.security.web.authentication.logout.LogoutFilter@5e599100, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@2fd1ad8a, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@691541bc, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@78e68401, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@426131d7, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@525647f3, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@391515c7, org.springframework.security.web.session.SessionManagementFilter@73bb1337, org.springframework.security.web.access.ExceptionTranslationFilter@7d2c345d, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@1efac5b9] +2025-05-22 17:11:47.871 INFO 4944 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 17:11:48.741 INFO 4944 --- [main] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet '' +2025-05-22 17:11:48.742 INFO 4944 --- [main] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet '' +2025-05-22 17:11:48.745 INFO 4944 --- [main] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 2 ms +2025-05-22 17:11:48.856 INFO 4944 --- [main] c.c.c.c.CurrencyControllerTests : Started CurrencyControllerTests in 10.206 seconds (JVM running for 13.592) +2025-05-22 17:11:49.342 INFO 4944 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor' +2025-05-22 17:12:17.153 INFO 9748 --- [main] c.c.c.c.CurrencyControllerTests : Starting CurrencyControllerTests using Java 11.0.27 on DESKTOP-7MLLRMP with PID 9748 (started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 17:12:17.156 DEBUG 9748 --- [main] c.c.c.c.CurrencyControllerTests : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 17:12:17.162 INFO 9748 --- [main] c.c.c.c.CurrencyControllerTests : No active profile set, falling back to default profiles: default +2025-05-22 17:12:21.021 INFO 9748 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$690c8501] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 17:12:22.628 INFO 9748 --- [main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@118041c7, org.springframework.security.web.context.SecurityContextPersistenceFilter@20a24edf, org.springframework.security.web.header.HeaderWriterFilter@13cc0b90, org.springframework.security.web.authentication.logout.LogoutFilter@551be9f6, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@26be9a6, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@4ed18798, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@a2b54e3, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@691541bc, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@f245bdd, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@5c4cc644, org.springframework.security.web.session.SessionManagementFilter@3a3b10f4, org.springframework.security.web.access.ExceptionTranslationFilter@209f3887, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@3520958b] +2025-05-22 17:12:23.398 INFO 9748 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 17:12:24.130 INFO 9748 --- [main] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet '' +2025-05-22 17:12:24.132 INFO 9748 --- [main] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet '' +2025-05-22 17:12:24.135 INFO 9748 --- [main] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 3 ms +2025-05-22 17:12:24.202 INFO 9748 --- [main] c.c.c.c.CurrencyControllerTests : Started CurrencyControllerTests in 8.242 seconds (JVM running for 11.534) +2025-05-22 17:12:24.553 INFO 9748 --- [main] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:12:24.692 INFO 9748 --- [main] c.c.c.c.CurrencyController : Fetching the list of Currencies +2025-05-22 17:12:24.793 INFO 9748 --- [main] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:12:25.126 ERROR 9748 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'date': rejected value [null]; codes [NotNull.FXRequestDto.date,NotNull.date,NotNull.java.time.LocalDate,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.date,date]; arguments []; default message [date]]; default message [Date is required] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithNullDateInput(CurrencyControllerTests.java:212) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:12:25.352 ERROR 9748 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character (']' (code 93)): expected a value; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Unexpected character (']' (code 93)): expected a value + at [Source: (PushbackInputStream); line: 6, column: 4] (through reference chain: com.crewmeister.cmcodingchallenge.currency.CurrencyWrapper["currencies"]) + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:285) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:243) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:205) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testAddCurrencyWithInvalidInputCurrencies(CurrencyControllerTests.java:61) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] +Caused by: com.fasterxml.jackson.databind.JsonMappingException: Unexpected character (']' (code 93)): expected a value + at [Source: (PushbackInputStream); line: 6, column: 4] (through reference chain: com.crewmeister.cmcodingchallenge.currency.CurrencyWrapper["currencies"]) + at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:397) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:356) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1726) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:373) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:164) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4526) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3521) ~[jackson-databind-2.11.3.jar:2.11.3] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:274) ~[spring-web-5.3.2.jar:5.3.2] + ... 142 common frames omitted +Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character (']' (code 93)): expected a value + at [Source: (PushbackInputStream); line: 6, column: 4] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1851) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:707) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:632) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2653) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:865) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:757) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:281) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:249) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:26) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:371) ~[jackson-databind-2.11.3.jar:2.11.3] + ... 146 common frames omitted + +2025-05-22 17:12:25.416 ERROR 9748 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [0.0]; codes [Positive.FXRequestDto.amount,Positive.amount,Positive.double,Positive]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Amount must be a positive number] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithZeroAmountInput(CurrencyControllerTests.java:268) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:12:25.454 INFO 9748 --- [main] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:12:25.484 ERROR 9748 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'date': rejected value [16-05-2025]; codes [typeMismatch.FXRequestDto.date,typeMismatch.date,typeMismatch.java.time.LocalDate,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.date,date]; arguments []; default message [date]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDate' for property 'date'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.validation.constraints.NotNull @org.springframework.format.annotation.DateTimeFormat java.time.LocalDate] for value '16-05-2025'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [16-05-2025]] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithInValidDateInput(CurrencyControllerTests.java:246) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:12:25.526 ERROR 9748 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'currency': rejected value [INS]; codes [typeMismatch.FXRequestDto.currency,typeMismatch.currency,typeMismatch.com.crewmeister.cmcodingchallenge.currency.CurrencyConstants,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.currency,currency]; arguments []; default message [currency]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.crewmeister.cmcodingchallenge.currency.CurrencyConstants' for property 'currency'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.validation.constraints.NotNull com.crewmeister.cmcodingchallenge.currency.CurrencyConstants] for value 'INS'; nested exception is java.lang.IllegalArgumentException: No enum constant com.crewmeister.cmcodingchallenge.currency.CurrencyConstants.INS] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithInValidCurrencyInput(CurrencyControllerTests.java:257) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:12:25.673 ERROR 9748 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value []; codes [typeMismatch.FXRequestDto.amount,typeMismatch.amount,typeMismatch.double,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'double' for property 'amount'; nested exception is java.lang.NumberFormatException: empty String] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithNullAmountInput(CurrencyControllerTests.java:235) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:12:25.938 INFO 9748 --- [main] c.c.c.c.CurrencyController : Adding the list of Currency +2025-05-22 17:12:25.970 INFO 9748 --- [main] c.c.c.c.CurrencyController : Received FX request: com.crewmeister.cmcodingchallenge.currencydto.FXRequestDto@628b503a +2025-05-22 17:12:26.010 INFO 9748 --- [main] c.c.c.c.CurrencyController : Fetching the list of Currencies +2025-05-22 17:12:26.044 ERROR 9748 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [-500.0]; codes [Positive.FXRequestDto.amount,Positive.amount,Positive.double,Positive]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Amount must be a positive number] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithNegativeAmountInput(CurrencyControllerTests.java:280) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:12:26.081 INFO 9748 --- [main] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:12:26.107 ERROR 9748 --- [main] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'currency': rejected value [null]; codes [NotNull.FXRequestDto.currency,NotNull.currency,NotNull.com.crewmeister.cmcodingchallenge.currency.CurrencyConstants,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.currency,currency]; arguments []; default message [currency]]; default message [Currency is required] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:77) ~[spring-test-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) ~[spring-test-5.3.2.jar:5.3.2] + at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183) ~[spring-test-5.3.2.jar:5.3.2] + at com.crewmeister.cmcodingchallenge.controllertests.CurrencyControllerTests.testGetFXAmountWithNullCurrencyInput(CurrencyControllerTests.java:224) ~[test-classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) ~[junit-platform-commons-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) ~[junit-jupiter-engine-5.7.0.jar:5.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) ~[junit-platform-engine-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) ~[junit-platform-launcher-1.7.0.jar:1.7.0] + at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na] + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na] + +2025-05-22 17:12:26.134 INFO 9748 --- [main] c.c.c.c.CurrencyController : Adding the list of Currency +2025-05-22 17:12:26.211 INFO 9748 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor' +2025-05-22 17:12:57.547 INFO 3904 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Starting CmCodingChallengeApplication using Java 11.0.27 on DESKTOP-7MLLRMP with PID 3904 (C:\Users\LENOVO\IntellijProjects\java-coding-challenge\target\classes started by LENOVO in C:\Users\LENOVO\IntellijProjects\java-coding-challenge) +2025-05-22 17:12:57.552 DEBUG 3904 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Running with Spring Boot v2.4.1, Spring v5.3.2 +2025-05-22 17:12:57.553 INFO 3904 --- [restartedMain] c.c.c.CmCodingChallengeApplication : No active profile set, falling back to default profiles: default +2025-05-22 17:12:57.640 INFO 3904 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-05-22 17:12:57.642 INFO 3904 --- [restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-05-22 17:12:58.833 INFO 3904 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-05-22 17:12:58.944 INFO 3904 --- [restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 97 ms. Found 2 JPA repository interfaces. +2025-05-22 17:12:59.432 INFO 3904 --- [restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.retry.annotation.RetryConfiguration' of type [org.springframework.retry.annotation.RetryConfiguration$$EnhancerBySpringCGLIB$$a69c2e9a] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) +2025-05-22 17:13:00.205 INFO 3904 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) +2025-05-22 17:13:00.220 INFO 3904 --- [restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2025-05-22 17:13:00.221 INFO 3904 --- [restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41] +2025-05-22 17:13:00.339 INFO 3904 --- [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2025-05-22 17:13:00.340 INFO 3904 --- [restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2697 ms +2025-05-22 17:13:00.409 INFO 3904 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2025-05-22 17:13:00.596 INFO 3904 --- [restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2025-05-22 17:13:00.604 INFO 3904 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb' +2025-05-22 17:13:00.783 INFO 3904 --- [restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2025-05-22 17:13:00.866 INFO 3904 --- [restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.25.Final +2025-05-22 17:13:01.079 INFO 3904 --- [restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2025-05-22 17:13:01.262 INFO 3904 --- [restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2025-05-22 17:13:02.334 INFO 3904 --- [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-05-22 17:13:02.348 INFO 3904 --- [restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-05-22 17:13:02.381 INFO 3904 --- [restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2025-05-22 17:13:03.179 WARN 3904 --- [restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-05-22 17:13:03.443 INFO 3904 --- [restartedMain] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@6bf12bcf, org.springframework.security.web.context.SecurityContextPersistenceFilter@10395dab, org.springframework.security.web.header.HeaderWriterFilter@20d9757c, org.springframework.security.web.authentication.logout.LogoutFilter@29084c75, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@6e2eee7a, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@337a3543, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@2cf89598, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@5bdf9336, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3d0aaef4, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@46536e9d, org.springframework.security.web.session.SessionManagementFilter@6ca06e7f, org.springframework.security.web.access.ExceptionTranslationFilter@5da67142, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@7cb8446d] +2025-05-22 17:13:03.626 INFO 3904 --- [restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' +2025-05-22 17:13:03.930 INFO 3904 --- [restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' +2025-05-22 17:13:03.945 INFO 3904 --- [restartedMain] c.c.c.CmCodingChallengeApplication : Started CmCodingChallengeApplication in 7.072 seconds (JVM running for 8.112) +2025-05-22 17:13:35.648 INFO 3904 --- [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-05-22 17:13:35.651 INFO 3904 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2025-05-22 17:13:35.656 INFO 3904 --- [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms +2025-05-22 17:13:36.320 ERROR 3904 --- [http-nio-8080-exec-1] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected close marker ']': expected '}' (for Object starting at [Source: (PushbackInputStream); line: 1, column: 1]); nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected close marker ']': expected '}' (for Object starting at [Source: (PushbackInputStream); line: 1, column: 1]) + at [Source: (PushbackInputStream); line: 3, column: 4] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:285) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:243) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:205) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] +Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected close marker ']': expected '}' (for Object starting at [Source: (PushbackInputStream); line: 1, column: 1]) + at [Source: (PushbackInputStream); line: 3, column: 4] + at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1851) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:707) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.base.ParserBase._reportMismatchedEndMarker(ParserBase.java:1016) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._closeArrayScope(UTF8StreamJsonParser.java:3804) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:730) ~[jackson-core-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:160) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4526) ~[jackson-databind-2.11.3.jar:2.11.3] + at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3521) ~[jackson-databind-2.11.3.jar:2.11.3] + at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:274) ~[spring-web-5.3.2.jar:5.3.2] + ... 95 common frames omitted + +2025-05-22 17:13:36.510 WARN 3904 --- [http-nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected close marker ']': expected '}' (for Object starting at [Source: (PushbackInputStream); line: 1, column: 1]); nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected close marker ']': expected '}' (for Object starting at [Source: (PushbackInputStream); line: 1, column: 1]) + at [Source: (PushbackInputStream); line: 3, column: 4]] +2025-05-22 17:13:42.473 INFO 3904 --- [http-nio-8080-exec-2] c.c.c.c.CurrencyController : Adding the list of Currency +2025-05-22 17:13:42.491 WARN 3904 --- [http-nio-8080-exec-2] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [java.lang.IllegalArgumentException: Currency list must not be null or empty] +2025-05-22 17:13:47.650 INFO 3904 --- [http-nio-8080-exec-3] c.c.c.c.CurrencyController : Adding the list of Currency +2025-05-22 17:13:56.679 INFO 3904 --- [http-nio-8080-exec-4] c.c.c.c.CurrencyController : Fetching the list of Currencies +2025-05-22 17:14:02.094 WARN 3904 --- [http-nio-8080-exec-5] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.time.LocalDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat java.time.LocalDate] for value '2025-'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2025-]] +2025-05-22 17:14:09.304 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:14:09.322 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: AUD +2025-05-22 17:14:09.365 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.AUD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:13.491 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: BGN +2025-05-22 17:14:13.493 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BGN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:14.328 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: BRL +2025-05-22 17:14:14.329 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:14.944 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: CAD +2025-05-22 17:14:14.945 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CAD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:15.830 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: CHF +2025-05-22 17:14:15.831 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CHF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:16.539 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: CNY +2025-05-22 17:14:16.540 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CNY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:17.132 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: CYP +2025-05-22 17:14:17.133 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CYP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:17.431 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: CZK +2025-05-22 17:14:17.432 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CZK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:18.073 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: DKK +2025-05-22 17:14:18.076 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.DKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:19.268 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: EEK +2025-05-22 17:14:19.274 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.EEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:20.083 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: GBP +2025-05-22 17:14:20.112 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GBP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:21.819 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: GRD +2025-05-22 17:14:21.823 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GRD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:21.981 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: HKD +2025-05-22 17:14:21.983 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HKD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:22.571 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: HRK +2025-05-22 17:14:22.572 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HRK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:23.078 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: HUF +2025-05-22 17:14:23.079 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HUF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:23.818 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: IDR +2025-05-22 17:14:23.819 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.IDR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:24.394 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: ILS +2025-05-22 17:14:24.395 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ILS.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:25.006 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: INR +2025-05-22 17:14:25.007 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.INR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:25.622 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: ISK +2025-05-22 17:14:25.623 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ISK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:26.178 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: JPY +2025-05-22 17:14:26.179 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.JPY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:26.898 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: KRW +2025-05-22 17:14:26.899 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.KRW.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:27.507 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: LTL +2025-05-22 17:14:27.509 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:27.980 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: LVL +2025-05-22 17:14:27.981 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LVL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:28.241 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: MTL +2025-05-22 17:14:28.242 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:28.543 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: MXN +2025-05-22 17:14:28.544 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MXN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:29.085 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: MYR +2025-05-22 17:14:29.086 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MYR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:29.987 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: NOK +2025-05-22 17:14:29.988 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NOK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:30.763 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: NZD +2025-05-22 17:14:30.764 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NZD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:31.295 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: PHP +2025-05-22 17:14:31.296 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PHP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:31.881 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: PLN +2025-05-22 17:14:31.882 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PLN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:32.558 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: ROL +2025-05-22 17:14:32.559 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ROL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:32.756 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: RON +2025-05-22 17:14:32.757 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RON.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:33.272 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: RUB +2025-05-22 17:14:33.273 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RUB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:34.088 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: SEK +2025-05-22 17:14:34.090 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:35.251 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: SGD +2025-05-22 17:14:35.252 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SGD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:36.673 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: SIT +2025-05-22 17:14:36.674 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SIT.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:36.897 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: SKK +2025-05-22 17:14:36.902 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:37.177 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: THB +2025-05-22 17:14:37.177 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.THB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:37.861 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: TRL +2025-05-22 17:14:37.862 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:38.112 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: TRY +2025-05-22 17:14:38.113 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:38.423 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: USD +2025-05-22 17:14:38.424 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.USD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:14:38.937 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Processing currency: ZAR +2025-05-22 17:14:38.938 INFO 3904 --- [http-nio-8080-exec-6] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ZAR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:15:56.771 INFO 3904 --- [http-nio-8080-exec-8] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:15:57.225 WARN 3904 --- [http-nio-8080-exec-8] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [java.lang.RuntimeException: Invalid Currency Name as validated from db] +2025-05-22 17:16:09.120 INFO 3904 --- [http-nio-8080-exec-9] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:16:09.150 INFO 3904 --- [http-nio-8080-exec-9] c.c.c.c.CurrencyServiceImpl : Processing currency: INR +2025-05-22 17:16:09.160 INFO 3904 --- [http-nio-8080-exec-9] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.INR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:19.084 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyController : Fetching the fx rates of Currencies +2025-05-22 17:16:19.174 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: AUD +2025-05-22 17:16:19.176 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.AUD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:20.435 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: BGN +2025-05-22 17:16:20.436 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BGN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:20.843 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: BRL +2025-05-22 17:16:20.843 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.BRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:21.240 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: CAD +2025-05-22 17:16:21.241 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CAD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:22.073 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: CHF +2025-05-22 17:16:22.074 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CHF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:23.303 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: CNY +2025-05-22 17:16:23.304 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CNY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:24.041 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: CYP +2025-05-22 17:16:24.041 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CYP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:24.391 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: CZK +2025-05-22 17:16:24.392 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.CZK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:25.164 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: DKK +2025-05-22 17:16:25.165 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.DKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:25.877 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: EEK +2025-05-22 17:16:25.878 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.EEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:26.262 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: GBP +2025-05-22 17:16:26.263 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GBP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:27.015 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: GRD +2025-05-22 17:16:27.016 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.GRD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:27.183 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: HKD +2025-05-22 17:16:27.185 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HKD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:27.854 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: HRK +2025-05-22 17:16:27.855 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HRK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:28.858 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: HUF +2025-05-22 17:16:28.860 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.HUF.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:30.623 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: IDR +2025-05-22 17:16:30.624 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.IDR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:31.389 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: ILS +2025-05-22 17:16:31.390 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ILS.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:32.457 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: INR +2025-05-22 17:16:32.458 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.INR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:33.141 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: ISK +2025-05-22 17:16:33.142 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ISK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:33.797 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: JPY +2025-05-22 17:16:33.798 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.JPY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:34.330 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: KRW +2025-05-22 17:16:34.330 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.KRW.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:34.774 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: LTL +2025-05-22 17:16:34.775 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:35.162 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: LVL +2025-05-22 17:16:35.163 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.LVL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:35.610 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: MTL +2025-05-22 17:16:35.611 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MTL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:35.989 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: MXN +2025-05-22 17:16:35.990 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MXN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:36.671 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: MYR +2025-05-22 17:16:36.672 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.MYR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:37.345 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: NOK +2025-05-22 17:16:37.346 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NOK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:38.017 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: NZD +2025-05-22 17:16:38.018 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.NZD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:38.613 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: PHP +2025-05-22 17:16:38.613 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PHP.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:39.241 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: PLN +2025-05-22 17:16:39.242 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.PLN.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:39.812 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: ROL +2025-05-22 17:16:39.813 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ROL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:39.975 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: RON +2025-05-22 17:16:39.977 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RON.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:40.667 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: RUB +2025-05-22 17:16:40.669 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.RUB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:41.294 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: SEK +2025-05-22 17:16:41.296 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SEK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:41.972 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: SGD +2025-05-22 17:16:41.973 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SGD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:42.666 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: SIT +2025-05-22 17:16:42.667 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SIT.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:42.908 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: SKK +2025-05-22 17:16:42.909 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.SKK.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:43.449 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: THB +2025-05-22 17:16:43.450 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.THB.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:44.883 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: TRL +2025-05-22 17:16:44.900 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRL.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:45.209 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: TRY +2025-05-22 17:16:45.212 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.TRY.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:45.863 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: USD +2025-05-22 17:16:45.864 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.USD.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:16:46.536 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Processing currency: ZAR +2025-05-22 17:16:46.537 INFO 3904 --- [http-nio-8080-exec-10] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.ZAR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:17:02.365 ERROR 3904 --- [http-nio-8080-exec-1] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [null]; codes [NotNull.FXRequestDto.amount,NotNull.amount,NotNull.double,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [must not be null] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] + +2025-05-22 17:17:02.388 WARN 3904 --- [http-nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [null]; codes [NotNull.FXRequestDto.amount,NotNull.amount,NotNull.double,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [must not be null]] +2025-05-22 17:17:14.265 ERROR 3904 --- [http-nio-8080-exec-2] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'currency': rejected value [null]; codes [NotNull.FXRequestDto.currency,NotNull.currency,NotNull.com.crewmeister.cmcodingchallenge.currency.CurrencyConstants,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.currency,currency]; arguments []; default message [currency]]; default message [Currency is required] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] + +2025-05-22 17:17:14.280 WARN 3904 --- [http-nio-8080-exec-2] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'currency': rejected value [null]; codes [NotNull.FXRequestDto.currency,NotNull.currency,NotNull.com.crewmeister.cmcodingchallenge.currency.CurrencyConstants,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.currency,currency]; arguments []; default message [currency]]; default message [Currency is required]] +2025-05-22 17:17:20.178 ERROR 3904 --- [http-nio-8080-exec-3] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 3 errors +Field error in object 'FXRequestDto' on field 'currency': rejected value [null]; codes [NotNull.FXRequestDto.currency,NotNull.currency,NotNull.com.crewmeister.cmcodingchallenge.currency.CurrencyConstants,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.currency,currency]; arguments []; default message [currency]]; default message [Currency is required] +Field error in object 'FXRequestDto' on field 'amount': rejected value [null]; codes [NotNull.FXRequestDto.amount,NotNull.amount,NotNull.double,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [must not be null] +Field error in object 'FXRequestDto' on field 'date': rejected value [null]; codes [NotNull.FXRequestDto.date,NotNull.date,NotNull.java.time.LocalDate,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.date,date]; arguments []; default message [date]]; default message [Date is required] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] + +2025-05-22 17:17:20.184 WARN 3904 --- [http-nio-8080-exec-3] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 3 errors +Field error in object 'FXRequestDto' on field 'currency': rejected value [null]; codes [NotNull.FXRequestDto.currency,NotNull.currency,NotNull.com.crewmeister.cmcodingchallenge.currency.CurrencyConstants,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.currency,currency]; arguments []; default message [currency]]; default message [Currency is required] +Field error in object 'FXRequestDto' on field 'amount': rejected value [null]; codes [NotNull.FXRequestDto.amount,NotNull.amount,NotNull.double,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [must not be null] +Field error in object 'FXRequestDto' on field 'date': rejected value [null]; codes [NotNull.FXRequestDto.date,NotNull.date,NotNull.java.time.LocalDate,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.date,date]; arguments []; default message [date]]; default message [Date is required]] +2025-05-22 17:17:48.013 ERROR 3904 --- [http-nio-8080-exec-4] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'date': rejected value [2025-65-15]; codes [typeMismatch.FXRequestDto.date,typeMismatch.date,typeMismatch.java.time.LocalDate,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.date,date]; arguments []; default message [date]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDate' for property 'date'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.validation.constraints.NotNull @org.springframework.format.annotation.DateTimeFormat java.time.LocalDate] for value '2025-65-15'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2025-65-15]] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] + +2025-05-22 17:17:48.022 WARN 3904 --- [http-nio-8080-exec-4] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'date': rejected value [2025-65-15]; codes [typeMismatch.FXRequestDto.date,typeMismatch.date,typeMismatch.java.time.LocalDate,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.date,date]; arguments []; default message [date]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDate' for property 'date'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.validation.constraints.NotNull @org.springframework.format.annotation.DateTimeFormat java.time.LocalDate] for value '2025-65-15'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2025-65-15]]] +2025-05-22 17:18:01.164 INFO 3904 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyController : Received FX request: com.crewmeister.cmcodingchallenge.currencydto.FXRequestDto@6a71dc35 +2025-05-22 17:18:01.191 INFO 3904 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Processing currency: INR +2025-05-22 17:18:01.203 INFO 3904 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.INR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:18:01.958 INFO 3904 --- [http-nio-8080-exec-5] c.c.c.c.CurrencyServiceImpl : Conversion rate for INR on 2025-05-15 is 95.647 +2025-05-22 17:18:08.114 ERROR 3904 --- [http-nio-8080-exec-6] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [-20.0]; codes [Positive.FXRequestDto.amount,Positive.amount,Positive.double,Positive]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Amount must be a positive number] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] + +2025-05-22 17:18:08.123 WARN 3904 --- [http-nio-8080-exec-6] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [-20.0]; codes [Positive.FXRequestDto.amount,Positive.amount,Positive.double,Positive]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Amount must be a positive number]] +2025-05-22 17:18:18.698 ERROR 3904 --- [http-nio-8080-exec-7] c.c.c.exception.GlobalExceptionHandler : Validation failed + +org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [0.0]; codes [Positive.FXRequestDto.amount,Positive.amount,Positive.double,Positive]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Amount must be a positive number] + at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.2.jar:5.3.2] + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.2.jar:5.3.2] + at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.4.2.jar:5.4.2] + at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.2.jar:5.3.2] + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.2.jar:5.3.2] + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.41.jar:9.0.41] + at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] + +2025-05-22 17:18:18.704 WARN 3904 --- [http-nio-8080-exec-7] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors +Field error in object 'FXRequestDto' on field 'amount': rejected value [0.0]; codes [Positive.FXRequestDto.amount,Positive.amount,Positive.double,Positive]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FXRequestDto.amount,amount]; arguments []; default message [amount]]; default message [Amount must be a positive number]] +2025-05-22 17:18:23.598 INFO 3904 --- [http-nio-8080-exec-8] c.c.c.c.CurrencyController : Received FX request: com.crewmeister.cmcodingchallenge.currencydto.FXRequestDto@55fa9d36 +2025-05-22 17:18:23.598 INFO 3904 --- [http-nio-8080-exec-8] c.c.c.c.CurrencyServiceImpl : Processing currency: INR +2025-05-22 17:18:23.599 INFO 3904 --- [http-nio-8080-exec-8] c.c.c.c.CurrencyServiceImpl : Requesting FX data from URL: https://api.statistiken.bundesbank.de/rest/download/BBEX3/D.INR.EUR.BB.AC.000?format=sdmx&lang=en +2025-05-22 17:18:24.212 INFO 3904 --- [http-nio-8080-exec-8] c.c.c.c.CurrencyServiceImpl : Conversion rate for INR on 2025-05-15 is 95.647 +2025-05-22 17:18:39.352 WARN 3904 --- [http-nio-8080-exec-9] o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [506] milliseconds. diff --git a/pom.xml b/pom.xml index b3c1148..05d4434 100644 --- a/pom.xml +++ b/pom.xml @@ -35,6 +35,36 @@ spring-boot-starter-test test + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-validation + + + com.h2database + h2 + runtime + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + + + org.springframework.retry + spring-retry + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-security + + diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/CmCodingChallengeApplication.java b/src/main/java/com/crewmeister/cmcodingchallenge/CmCodingChallengeApplication.java index 409a877..32f28d7 100644 --- a/src/main/java/com/crewmeister/cmcodingchallenge/CmCodingChallengeApplication.java +++ b/src/main/java/com/crewmeister/cmcodingchallenge/CmCodingChallengeApplication.java @@ -2,8 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.retry.annotation.EnableRetry; @SpringBootApplication +@EnableRetry public class CmCodingChallengeApplication { public static void main(String[] args) { diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/RestTemplateConfig.java b/src/main/java/com/crewmeister/cmcodingchallenge/RestTemplateConfig.java new file mode 100644 index 0000000..8dc45c0 --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/RestTemplateConfig.java @@ -0,0 +1,28 @@ +package com.crewmeister.cmcodingchallenge; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class RestTemplateConfig { + + @Value("${rest.template.connection.timeout}") + private int connectionTimeout; + + @Value("${rest.template.read.timeout}") + private int readTimeout; + + @Bean + public RestTemplate restTemplate() { + SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); + factory.setConnectTimeout(connectionTimeout); // in milliseconds + factory.setReadTimeout(readTimeout); // in milliseconds + RestTemplate restTemplate = new RestTemplate(factory); + restTemplate.getMessageConverters().add(new MappingJackson2XmlHttpMessageConverter()); + return restTemplate; + } +} diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/currency/Currency.java b/src/main/java/com/crewmeister/cmcodingchallenge/currency/Currency.java new file mode 100644 index 0000000..f98fbfe --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/currency/Currency.java @@ -0,0 +1,41 @@ +package com.crewmeister.cmcodingchallenge.currency; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.validation.constraints.NotBlank; + +@Entity +public class Currency { + + @Id + @GeneratedValue + private Long currencyId; + + @NotBlank(message = "Currency name must not be blank") + private String currencyName; + + public Currency() { + } + + public Currency(Long currencyId, String currencyName) { + this.currencyId = currencyId; + this.currencyName = currencyName; + } + + public Long getCurrencyId() { + return currencyId; + } + + public void setCurrencyId(Long currencyId) { + this.currencyId = currencyId; + } + + public String getCurrencyName() { + return currencyName; + } + + public void setCurrencyName(String currencyName) { + this.currencyName = currencyName; + } +} diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/currency/CurrencyConstants.java b/src/main/java/com/crewmeister/cmcodingchallenge/currency/CurrencyConstants.java new file mode 100644 index 0000000..fdfcb70 --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/currency/CurrencyConstants.java @@ -0,0 +1,47 @@ +package com.crewmeister.cmcodingchallenge.currency; + +public enum CurrencyConstants { + AUD, + BGN, + BRL, + CAD, + CHF, + CNY, + CYP, + CZK, + DKK, + EEK, + GBP, + GRD, + HKD, + HRK, + HUF, + IDR, + ILS, + INR, + ISK, + JPY, + KRW, + LTL, + LVL, + MTL, + MXN, + MYR, + NOK, + NZD, + PHP, + PLN, + ROL, + RON, + RUB, + SEK, + SGD, + SIT, + SKK, + THB, + TRL, + TRY, + USD, + ZAR + + } diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/currency/CurrencyController.java b/src/main/java/com/crewmeister/cmcodingchallenge/currency/CurrencyController.java deleted file mode 100644 index d69be89..0000000 --- a/src/main/java/com/crewmeister/cmcodingchallenge/currency/CurrencyController.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.crewmeister.cmcodingchallenge.currency; - -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.ArrayList; - -@RestController() -@RequestMapping("/api") -public class CurrencyController { - - @GetMapping("/currencies") - public ResponseEntity> getCurrencies() { - ArrayList currencyConversionRates = new ArrayList(); - currencyConversionRates.add(new CurrencyConversionRates(2.5)); - - return new ResponseEntity>(currencyConversionRates, HttpStatus.OK); - } -} diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/currency/CurrencyWrapper.java b/src/main/java/com/crewmeister/cmcodingchallenge/currency/CurrencyWrapper.java new file mode 100644 index 0000000..dbd3fb2 --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/currency/CurrencyWrapper.java @@ -0,0 +1,19 @@ +package com.crewmeister.cmcodingchallenge.currency; + +import javax.validation.Valid; +import java.util.List; + +public class CurrencyWrapper { + + @Valid + private List currencies; + + public List getCurrencies() { + return currencies; + } + + public void setCurrencies(List currencies) { + this.currencies = currencies; + } +} + diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/currencycontroller/CurrencyController.java b/src/main/java/com/crewmeister/cmcodingchallenge/currencycontroller/CurrencyController.java new file mode 100644 index 0000000..1de79e9 --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/currencycontroller/CurrencyController.java @@ -0,0 +1,68 @@ +package com.crewmeister.cmcodingchallenge.currencycontroller; + +import com.crewmeister.cmcodingchallenge.currency.Currency; +import com.crewmeister.cmcodingchallenge.currency.CurrencyConstants; +import com.crewmeister.cmcodingchallenge.currency.CurrencyWrapper; +import com.crewmeister.cmcodingchallenge.currencydto.FXRequestDto; +import com.crewmeister.cmcodingchallenge.currencyservice.CurrencyService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import javax.validation.Valid; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@RestController() +@RequestMapping("/cmfxapi") +public class CurrencyController { + + private static final Logger logger = LoggerFactory.getLogger(CurrencyController.class); + @Autowired + CurrencyService currencyService; + + @PostMapping("/addCurrencies") + public List addCurrency(@RequestBody @Valid CurrencyWrapper currency) { + logger.info("Adding the list of Currency"); + if (currency.getCurrencies() == null || currency.getCurrencies().isEmpty()) { + throw new IllegalArgumentException("Currency list must not be null or empty"); + } + return currencyService.addCurrency(currency.getCurrencies()); + } + + @GetMapping("/getAllAvailableCurrencies") + public ResponseEntity> getListOfAvailableCurrencies() { + logger.info("Fetching the list of Currencies"); + List currencies = currencyService.getListOfAvailableCurrencies(); + List getCurrencyValues = new ArrayList<>(); + if(!currencies.isEmpty()) + getCurrencyValues =currencies.stream().map(x -> x.getCurrencyName()) + .collect(Collectors.toList()); + else { //if db doesnt have data , we have retrieved data from enum + for(CurrencyConstants ccy: CurrencyConstants.values()) + getCurrencyValues.add(ccy.name()); + } + return new ResponseEntity>(getCurrencyValues, HttpStatus.OK); + } + + @GetMapping("/getAllFXRates") + public ResponseEntity>> getAllFXRates(@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date, @RequestParam(required = false) String currency) { + logger.info("Fetching the fx rates of Currencies"); + Map> fxRates = currencyService.getFXRates(date != null ? date.toString() : null,currency); + return new ResponseEntity>>(fxRates, HttpStatus.OK); + } + + @GetMapping("/getFXAmount") + public ResponseEntity getFXAmount(@Valid FXRequestDto request) { + logger.info("Received FX request: {}", request); + double fxAmount = currencyService.getFXAmount(request.getDate().toString(),request.getCurrency().name(), request.getAmount()); + return new ResponseEntity(fxAmount, HttpStatus.OK); + } +} diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/currencydto/FXRequestDto.java b/src/main/java/com/crewmeister/cmcodingchallenge/currencydto/FXRequestDto.java new file mode 100644 index 0000000..d98401d --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/currencydto/FXRequestDto.java @@ -0,0 +1,46 @@ +package com.crewmeister.cmcodingchallenge.currencydto; + +import com.crewmeister.cmcodingchallenge.currency.CurrencyConstants; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Positive; +import java.time.LocalDate; + +public class FXRequestDto { + + @NotNull(message = "Date is required") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate date; + + @NotNull(message = "Currency is required") + private CurrencyConstants currency; + + @NotNull + @Positive(message = "Amount must be a positive number") + private Double amount; + + public LocalDate getDate() { + return date; + } + + public void setDate(LocalDate date) { + this.date = date; + } + + public CurrencyConstants getCurrency() { + return currency; + } + + public void setCurrency(CurrencyConstants currency) { + this.currency = currency; + } + + public double getAmount() { + return amount; + } + + public void setAmount(double amount) { + this.amount = amount; + } +} diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/currencyrepository/CurrencyRepository.java b/src/main/java/com/crewmeister/cmcodingchallenge/currencyrepository/CurrencyRepository.java new file mode 100644 index 0000000..fb37309 --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/currencyrepository/CurrencyRepository.java @@ -0,0 +1,16 @@ +package com.crewmeister.cmcodingchallenge.currencyrepository; + + +import com.crewmeister.cmcodingchallenge.currency.Currency; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.Optional; + + +public interface CurrencyRepository extends JpaRepository { + + @Query("SELECT c FROM Currency c WHERE c.currencyName = :currency") + Optional findCurrencyName(@Param("currency") String currency); +} diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/currencyservice/CurrencyService.java b/src/main/java/com/crewmeister/cmcodingchallenge/currencyservice/CurrencyService.java new file mode 100644 index 0000000..60af73b --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/currencyservice/CurrencyService.java @@ -0,0 +1,18 @@ +package com.crewmeister.cmcodingchallenge.currencyservice; + +import com.crewmeister.cmcodingchallenge.currency.Currency; + +import java.util.List; +import java.util.Map; + + +public interface CurrencyService { + + public List getListOfAvailableCurrencies(); + + public List addCurrency(List currency); + + public Map> getFXRates(String date,String currency); + + public double getFXAmount(String date, String currency, double amount); +} diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/currencyservice/CurrencyServiceImpl.java b/src/main/java/com/crewmeister/cmcodingchallenge/currencyservice/CurrencyServiceImpl.java new file mode 100644 index 0000000..640d037 --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/currencyservice/CurrencyServiceImpl.java @@ -0,0 +1,179 @@ +package com.crewmeister.cmcodingchallenge.currencyservice; + +import com.crewmeister.cmcodingchallenge.currency.CurrencyConversionRates; +import com.crewmeister.cmcodingchallenge.exception.InvalidRequestException; +import com.crewmeister.cmcodingchallenge.xmldata.GenericData; +import com.crewmeister.cmcodingchallenge.currency.Currency; +import com.crewmeister.cmcodingchallenge.currencyrepository.CurrencyRepository; +import com.crewmeister.cmcodingchallenge.xmldata.Observation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.retry.annotation.Backoff; +import org.springframework.retry.annotation.Retryable; +import org.springframework.stereotype.Service; +import org.springframework.web.client.ResourceAccessException; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.net.SocketTimeoutException; +import java.util.*; + +@Service +public class CurrencyServiceImpl implements CurrencyService { + + private static final Logger logger = LoggerFactory.getLogger(CurrencyServiceImpl.class); + private final RestTemplate restTemplate; + + private static final int RETRY_ATTEMPTS = 3; + private static final long DELAY = 2000L; + + @Value("${bundesbank.api.base.url}") + private String bundesBaseUrl; + + @Value("${bundesbank.api.key}") + private String bundesApiKey; + + @Value("${bundesbank.api.format}") + private String bundesApiFormat; + + @Value("${bundesbank.api.lang}") + private String bundesApiLang; + + + private final CurrencyRepository currencyRepository; + + public CurrencyServiceImpl(RestTemplate restTemplate, CurrencyRepository currencyRepository) { + this.restTemplate = restTemplate; + this.currencyRepository = currencyRepository; + } + + + @Cacheable("availableCurrencies") + @Override + public List getListOfAvailableCurrencies() { + return currencyRepository.findAll(); + } + + @CacheEvict(value = "availableCurrencies", allEntries = true) + @Override + public List addCurrency(List currency) { + return currencyRepository.saveAll(currency); + } + + @Cacheable(value = "currencyByName", key = "currencyName") + public Optional getCurrencyByName(String currencyName) { + return currencyRepository.findCurrencyName(currencyName); + } + + @Override + public Map> getFXRates(String date,String currency) { + List currencies = new ArrayList<>(); + if(currency==null || currency.isEmpty() ) + currencies= getListOfAvailableCurrencies();//Assuming DB has values; if not insert values from controller + else { + Optional ccy = getCurrencyByName(currency); + if(ccy.isPresent()) + currencies.add(ccy.get()); + else{ + throw new RuntimeException("Invalid Currency Name as validated from db"); + } + + } + Map> fxMapResult = new TreeMap<>(); + for(Currency fxcurrency: currencies) { + logger.info("Processing currency: {}",fxcurrency.getCurrencyName()); + String url = buildUrl(fxcurrency.getCurrencyName()); + logger.info("Requesting FX data from URL: {} ", url); + GenericData genericData = fetchRates(url, fxcurrency.getCurrencyName()); + if (genericData == null || genericData.dataSet == null || genericData.dataSet.series == null) { + logger.warn("Received empty response for currency {}", fxcurrency.getCurrencyName()); + continue; + } + Map fxMap = new TreeMap<>(); + + + for (Observation obs : genericData.dataSet.series.observations) { + if (date == null || date.isEmpty()) { + if (obs.value == null) + continue; + fxMap.put(obs.dimension.date, obs.value.rate); + } else { + if (obs.dimension.date.equals(date) && obs.value != null) { + fxMap.put(obs.dimension.date, obs.value.rate); + break; + } + else if (obs.dimension.date.equals(date) && obs.value == null) { + fxMap.put(date, "Rate cannot be fetched as it is weekend or public holiday"); + break; + } + } + } + fxMapResult.put(fxcurrency.getCurrencyName(), fxMap); + } + + return fxMapResult; + } + + @Override + public double getFXAmount(String date, String currency, double amount) { + + logger.info("Processing currency: {}",currency); + CurrencyConversionRates ccr = null; + String url = buildUrl(currency); + logger.info("Requesting FX data from URL: {} ", url); + GenericData genericData = fetchRates(url,currency); + if (genericData == null || genericData.dataSet == null || genericData.dataSet.series == null) { + logger.error("Received empty response for currency {}", currency); + throw new RuntimeException("Generic data is unavailable for currency: " + currency); + } + for (Observation obs : genericData.dataSet.series.observations) { + if (obs.dimension.date.equals(date) && obs.value != null) { + ccr = new CurrencyConversionRates(Double.parseDouble(obs.value.rate)); + break; + } + } + + if (ccr == null) { + throw new IllegalArgumentException("Conversion rate not found for date " + date); + } + logger.info("Conversion rate for {} on {} is {}",currency,date,ccr.getConversionRate()); + double exchangedAmount = new BigDecimal(amount/ccr.getConversionRate()).setScale(4, RoundingMode.HALF_UP).doubleValue() ; + + return exchangedAmount; + } + + private String buildUrl(String currencyName) { + String apiKey = String.format(bundesApiKey, currencyName); + return UriComponentsBuilder + .fromHttpUrl(bundesBaseUrl.endsWith("/") ? bundesBaseUrl : bundesBaseUrl + "/") + .pathSegment(apiKey) + .queryParam("format", bundesApiFormat) + .queryParam("lang", bundesApiLang) + .build() + .toUriString(); + } + @Retryable( + value = { ResourceAccessException.class, SocketTimeoutException.class }, + maxAttempts = RETRY_ATTEMPTS, + backoff = @Backoff(delay = DELAY) + ) + private GenericData fetchRates(String url,String currency) { + try { + var response = restTemplate.getForEntity(url, GenericData.class); + GenericData genericData = response.getBody(); + return genericData; + } + catch (Exception e) { + logger.error("Failed to fetch data from Bundesbank for currency {}: {}", currency, e.getMessage()); + throw new InvalidRequestException("Unable to retrieve FX rate data, please check logs for more details"); + } + + } + +} diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/exception/GlobalExceptionHandler.java b/src/main/java/com/crewmeister/cmcodingchallenge/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..a0a7399 --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/exception/GlobalExceptionHandler.java @@ -0,0 +1,90 @@ +package com.crewmeister.cmcodingchallenge.exception; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.validation.BindException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.MissingServletRequestParameterException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; + +import java.util.HashMap; +import java.util.Map; + +@ControllerAdvice +public class GlobalExceptionHandler { + + private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); + + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseEntity handleValidationErrors(MethodArgumentNotValidException ex) { + Map errors = new HashMap<>(); + + ex.getBindingResult().getFieldErrors().forEach(error -> + errors.put(error.getField(), error.getDefaultMessage()) + ); + + return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST); + } + + @ExceptionHandler({BindException.class}) + public ResponseEntity> handleBindExceptions(BindException ex) { + logger.error("Validation failed", ex); + Map errors = new HashMap<>(); + ex.getBindingResult().getFieldErrors().forEach(error -> { + if ("date".equals(error.getField()) && error.getRejectedValue() != null) { + errors.put("date", "Date must be a LocalDate in format yyyy-MM-dd"); + } else { + errors.put(error.getField(), error.getDefaultMessage()); + } + }); + return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST); + } + + @ExceptionHandler(HttpMessageNotReadableException.class) + public ResponseEntity handleInvalidInput(HttpMessageNotReadableException ex) { + logger.error("Validation failed", ex); + Map response = new HashMap<>(); + response.put("error", "Invalid json input"); + return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST); + } + + @ExceptionHandler(MissingServletRequestParameterException.class) + public ResponseEntity handleMissingParams(MissingServletRequestParameterException ex) { + return ResponseEntity.badRequest().body( + Map.of("error", "Missing required parameter: " + ex.getParameterName()) + ); + } + + @ExceptionHandler(InvalidRequestException.class) + public ResponseEntity handleInvalidRequest(InvalidRequestException ex) { + return ResponseEntity + .badRequest() + .body(Map.of("error", ex.getMessage())); + } + + @ExceptionHandler(IllegalArgumentException.class) + public ResponseEntity handleIllegalArguments(IllegalArgumentException ex) { + return ResponseEntity + .badRequest() + .body(Map.of("error", ex.getMessage())); + } + + @ExceptionHandler(MethodArgumentTypeMismatchException.class) + public ResponseEntity handleTypeMismatch(MethodArgumentTypeMismatchException ex) { + String error = String.format("Invalid value '%s' for parameter '%s'. Expected format is yyyy-MM-dd and type: %s", + ex.getValue(), ex.getName(), ex.getRequiredType().getSimpleName()); + return new ResponseEntity<>(Map.of("error", error), HttpStatus.BAD_REQUEST); + } + + @ExceptionHandler(RuntimeException.class) + public ResponseEntity handleRuntimeException(RuntimeException ex) { + Map error = new HashMap<>(); + error.put("error", ex.getMessage()); + return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST); + } +} diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/exception/InvalidRequestException.java b/src/main/java/com/crewmeister/cmcodingchallenge/exception/InvalidRequestException.java new file mode 100644 index 0000000..312a39a --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/exception/InvalidRequestException.java @@ -0,0 +1,8 @@ +package com.crewmeister.cmcodingchallenge.exception; + +public class InvalidRequestException extends RuntimeException { + public InvalidRequestException(String message) { + super(message); + } +} + diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/security/ApiUsers.java b/src/main/java/com/crewmeister/cmcodingchallenge/security/ApiUsers.java new file mode 100644 index 0000000..ea5848b --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/security/ApiUsers.java @@ -0,0 +1,51 @@ +package com.crewmeister.cmcodingchallenge.security; + +import javax.persistence.*; + +@Entity +@Table(name = "users") +public class ApiUsers { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String username; + + private String password; + + private String role; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + } +} + diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/security/MyUserDetailsService.java b/src/main/java/com/crewmeister/cmcodingchallenge/security/MyUserDetailsService.java new file mode 100644 index 0000000..f6bd31b --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/security/MyUserDetailsService.java @@ -0,0 +1,37 @@ +package com.crewmeister.cmcodingchallenge.security; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.security.core.userdetails.User; + +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; + +@Service +public class MyUserDetailsService implements UserDetailsService { + + @Autowired + UserRepository userRepository; + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + ApiUsers appUser = userRepository.findByUsername(username) + .orElseThrow(() -> new UsernameNotFoundException("Invalid User")); + + return User.withUsername(appUser.getUsername()) + .password(appUser.getPassword()) + .roles(appUser.getRole()) + .build(); + } + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } +} + + diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/security/SecurityConfig.java b/src/main/java/com/crewmeister/cmcodingchallenge/security/SecurityConfig.java new file mode 100644 index 0000000..f96d68d --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/security/SecurityConfig.java @@ -0,0 +1,41 @@ +package com.crewmeister.cmcodingchallenge.security; + +import com.crewmeister.cmcodingchallenge.security.MyUserDetailsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.crypto.password.PasswordEncoder; + +@Configuration +@EnableWebSecurity +public class SecurityConfig extends WebSecurityConfigurerAdapter { + + @Autowired + private MyUserDetailsService userDetailsService; + + @Autowired + private PasswordEncoder passwordEncoder; + + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { + auth.userDetailsService(userDetailsService) + .passwordEncoder(passwordEncoder); + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + http + .csrf().disable() + .headers().frameOptions().disable() + .and() + .authorizeRequests() + .antMatchers("/cmfxapi/**").permitAll() + .antMatchers("/h2-console/**").permitAll() + .anyRequest().authenticated() + .and() + .formLogin(); + } +} diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/security/UserRepository.java b/src/main/java/com/crewmeister/cmcodingchallenge/security/UserRepository.java new file mode 100644 index 0000000..92eec5a --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/security/UserRepository.java @@ -0,0 +1,9 @@ +package com.crewmeister.cmcodingchallenge.security; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface UserRepository extends JpaRepository { + Optional findByUsername(String username); +} diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/DataSet.java b/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/DataSet.java new file mode 100644 index 0000000..2a4f93e --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/DataSet.java @@ -0,0 +1,9 @@ +package com.crewmeister.cmcodingchallenge.xmldata; + +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; + +public class DataSet { + + @JacksonXmlProperty(localName = "Series", namespace = "http://www.sdmx.org/resources/sdmxml/schemas/v2_1/data/generic") + public Series series; +} diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/GenericData.java b/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/GenericData.java new file mode 100644 index 0000000..c82705f --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/GenericData.java @@ -0,0 +1,13 @@ +package com.crewmeister.cmcodingchallenge.xmldata; + +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; + +@JacksonXmlRootElement(localName = "GenericData", namespace = "http://www.sdmx.org/resources/sdmxml/schemas/v2_1/message") +public class GenericData { + + @JacksonXmlProperty(localName = "DataSet", namespace = "http://www.sdmx.org/resources/sdmxml/schemas/v2_1/message") + public DataSet dataSet; +} + + diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/ObsDimension.java b/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/ObsDimension.java new file mode 100644 index 0000000..5c5f030 --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/ObsDimension.java @@ -0,0 +1,8 @@ +package com.crewmeister.cmcodingchallenge.xmldata; + +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; + +public class ObsDimension { + @JacksonXmlProperty(isAttribute = true, localName = "value") + public String date; +} diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/ObsValue.java b/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/ObsValue.java new file mode 100644 index 0000000..45831b3 --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/ObsValue.java @@ -0,0 +1,8 @@ +package com.crewmeister.cmcodingchallenge.xmldata; + +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; + +public class ObsValue { + @JacksonXmlProperty(isAttribute = true, localName = "value") + public String rate; +} diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/Observation.java b/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/Observation.java new file mode 100644 index 0000000..ec206fa --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/Observation.java @@ -0,0 +1,12 @@ +package com.crewmeister.cmcodingchallenge.xmldata; + +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; + +public class Observation { + + @JacksonXmlProperty(localName = "ObsDimension", namespace = "http://www.sdmx.org/resources/sdmxml/schemas/v2_1/data/generic") + public ObsDimension dimension; + + @JacksonXmlProperty(localName = "ObsValue", namespace = "http://www.sdmx.org/resources/sdmxml/schemas/v2_1/data/generic") + public ObsValue value; +} diff --git a/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/Series.java b/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/Series.java new file mode 100644 index 0000000..e599836 --- /dev/null +++ b/src/main/java/com/crewmeister/cmcodingchallenge/xmldata/Series.java @@ -0,0 +1,13 @@ +package com.crewmeister.cmcodingchallenge.xmldata; + +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; + +import java.util.List; + +public class Series { + + @JacksonXmlElementWrapper(useWrapping = false) + @JacksonXmlProperty(localName = "Obs", namespace = "http://www.sdmx.org/resources/sdmxml/schemas/v2_1/data/generic") + public List observations; +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 8b13789..8e3e2a8 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1,29 @@ +# H2 Database Configuration + +spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.username=sa +spring.datasource.password= +spring.h2.console.enabled=true +spring.h2.console.path=/h2-console +spring.datasource.initialization-mode=always + +# JPA / Hibernate +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +spring.jpa.hibernate.ddl-auto=update + +#BundesBank API URL +bundesbank.api.base.url=https://api.statistiken.bundesbank.de/rest/download/ +bundesbank.api.key=BBEX3/D.%s.EUR.BB.AC.000 +bundesbank.api.format=sdmx +bundesbank.api.lang=en + +#Timeout +rest.template.connection.timeout=10000 +rest.template.read.timeout=10000 + +#Logging +logging.level.root=INFO +logging.level.com.crewmeister=DEBUG +logging.file.name=logDetails.log diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql new file mode 100644 index 0000000..2bf4451 --- /dev/null +++ b/src/main/resources/data.sql @@ -0,0 +1,3 @@ +delete from users; +INSERT INTO users (username, password, role) VALUES +('user1', '$2a$12$c7yg/wiUDQBr1oaD4Y6amug2E3eTYEWTOlvYPI.5xCb5LELEBK9Yq', 'USER'); --password123 \ No newline at end of file diff --git a/src/test/java/com/crewmeister/cmcodingchallenge/CmCodingChallengeApplicationTests.java b/src/test/java/com/crewmeister/cmcodingchallenge/CmCodingChallengeApplicationTests.java index 0ca0d16..e8b23fd 100644 --- a/src/test/java/com/crewmeister/cmcodingchallenge/CmCodingChallengeApplicationTests.java +++ b/src/test/java/com/crewmeister/cmcodingchallenge/CmCodingChallengeApplicationTests.java @@ -2,8 +2,11 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cache.annotation.EnableCaching; @SpringBootTest +@EnableCaching + class CmCodingChallengeApplicationTests { @Test diff --git a/src/test/java/com/crewmeister/cmcodingchallenge/controllertests/CurrencyControllerTests.java b/src/test/java/com/crewmeister/cmcodingchallenge/controllertests/CurrencyControllerTests.java new file mode 100644 index 0000000..13a6e15 --- /dev/null +++ b/src/test/java/com/crewmeister/cmcodingchallenge/controllertests/CurrencyControllerTests.java @@ -0,0 +1,313 @@ +package com.crewmeister.cmcodingchallenge.controllertests; + +import com.crewmeister.cmcodingchallenge.security.MyUserDetailsService; +import com.crewmeister.cmcodingchallenge.currency.CurrencyConstants; +import com.crewmeister.cmcodingchallenge.currencycontroller.CurrencyController; +import com.crewmeister.cmcodingchallenge.currencyservice.CurrencyService; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import com.crewmeister.cmcodingchallenge.currency.Currency; +import org.springframework.http.MediaType; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import java.util.*; + +import java.util.stream.Collectors; + +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +@WebMvcTest(CurrencyController.class) +public class CurrencyControllerTests { + + @Autowired + private MockMvc mvc; + + @MockBean + CurrencyService currencyService; + + @MockBean + private MyUserDetailsService userDetailsService; + + @MockBean + private PasswordEncoder passwordEncoder; + + @Test + public void testAddCurrencyWithNoCurrencies() throws Exception { + mvc.perform(MockMvcRequestBuilders + .post("/cmfxapi/addCurrencies") + .contentType(MediaType.APPLICATION_JSON) + .content("{}") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()) + .andExpect(content().string("{\"error\":\"Currency list must not be null or empty\"}")); + } + + @Test + public void testAddCurrencyWithInvalidInputCurrencies() throws Exception { + String payLoad="{\n" + + " \"currencies\": [\n" + + " {\n" + + "\t\t\"currencyId\": 1,\n" + + "\t\t\"currencyName\":\"AUD\"\n" + + "},]\n" + //extra comma is added for malforming json + "}"; + + mvc.perform(MockMvcRequestBuilders + .post("/cmfxapi/addCurrencies") + .contentType(MediaType.APPLICATION_JSON) + .content(payLoad) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()) + .andExpect(content().string("{\"error\":\"Invalid json input\"}")); + } + + @Test + public void testAddCurrencyWithValidInputCurrencies() throws Exception { + String payLoad="{\n" + + " \"currencies\": [\n" + + " {\n" + + "\t\t\"currencyId\": 1,\n" + + "\t\t\"currencyName\":\"AUD\"\n" + + "},\n" + + "{\n" + + "\t\t\"currencyId\": 2,\n" + + "\t\t\"currencyName\":\"BGN\"\n" + + "}]\n" + + "}"; + + mvc.perform(MockMvcRequestBuilders + .post("/cmfxapi/addCurrencies") + .contentType(MediaType.APPLICATION_JSON) + .content(payLoad) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + void testGetAvailableCurrenciesFromDB() throws Exception { + List currencyList = new ArrayList<>(); + currencyList.add(new Currency(1L, "AUD")); + currencyList.add(new Currency(2L, "CHF")); + + String expected ="[\"AUD\",\"CHF\"]"; + + Mockito.when(currencyService.getListOfAvailableCurrencies()).thenReturn(currencyList); + + mvc.perform(MockMvcRequestBuilders + .get("/cmfxapi/getAllAvailableCurrencies")) + .andExpect(status().isOk()) + .andExpect(content().string(expected)); + } + + @Test + void testGetAvailableCurrenciesFromEnum() throws Exception { + Mockito.when(currencyService.getListOfAvailableCurrencies()).thenReturn(Collections.emptyList()); + + List enumCurrencies = Arrays.stream(CurrencyConstants.values()) + .map(Enum::name) + .collect(Collectors.toList()); + + String expected = new ObjectMapper().writeValueAsString(enumCurrencies); + mvc.perform(MockMvcRequestBuilders + .get("/cmfxapi/getAllAvailableCurrencies") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().string(expected)); + } + + @Test + void testGetAllFXRatesWhenDateAndCurrencyAreNull() throws Exception { + Map> fxRateMock = Map.of( + "GBP", Map.of("2025-05-16", "0.84270"), + "INR", Map.of("2025-05-15", "95.8200") + ); + Mockito.when(currencyService.getFXRates(null, null)).thenReturn(fxRateMock); + + String expected = new ObjectMapper().writeValueAsString(fxRateMock); + + mvc.perform(MockMvcRequestBuilders + .get("/cmfxapi/getAllFXRates") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().string(expected)); + } + + @Test + void testGetAllFXRatesWhenDateExistsAndCurrencyIsNull() throws Exception { + String date = "2025-05-16"; + Map> fxRateMock = Map.of( + "GBP", Map.of("2025-05-16", "0.84270"), + "INR", Map.of("2025-05-16", "95.8200") + ); + Mockito.when(currencyService.getFXRates(date, null)).thenReturn(fxRateMock); + + String expected = new ObjectMapper().writeValueAsString(fxRateMock); + + mvc.perform(MockMvcRequestBuilders + .get("/cmfxapi/getAllFXRates") + .param("date", date) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().string(expected)); + } + + @Test + void testGetAllFXRatesWhenDateisNullAndCurrencyExists() throws Exception { + String currency = "INR"; + Map> fxRateMock = Map.of( + "INR", Map.of("2025-05-16", "0.84270","2025-05-15","95.6470") + ); + Mockito.when(currencyService.getFXRates(null, currency)).thenReturn(fxRateMock); + + String expected = new ObjectMapper().writeValueAsString(fxRateMock); + + mvc.perform(MockMvcRequestBuilders + .get("/cmfxapi/getAllFXRates") + .param("currency", currency) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().string(expected)); + } + + @Test + void testGetAllFXRatesWhenDateAndCurrencyExists() throws Exception { + String currency = "INR"; + String date = "2025-05-16"; + Map> fxRateMock = Map.of( + "INR", Map.of("2025-05-16", "0.84270") + ); + Mockito.when(currencyService.getFXRates(date, currency)).thenReturn(fxRateMock); + + String expected = new ObjectMapper().writeValueAsString(fxRateMock); + + mvc.perform(MockMvcRequestBuilders + .get("/cmfxapi/getAllFXRates") + .param("date", date) + .param("currency", currency) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().string(expected)); + } + + @Test + void testGetAllFXRatesWithInvalidDateFormat() throws Exception { + String expected="{\"error\":\"Invalid value '05-05-2025' for parameter 'date'. Expected format is yyyy-MM-dd and type: LocalDate\"}"; + mvc.perform(MockMvcRequestBuilders + .get("/cmfxapi/getAllFXRates") + .param("date", "05-05-2025") // invalid format + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()) + .andExpect(content().string(expected)); + } + + @Test + void testGetFXAmountWithNullDateInput() throws Exception { + String expected="{\"date\":\"Date is required\"}"; + mvc.perform(MockMvcRequestBuilders + .get("/cmfxapi/getFXAmount") + .param("date", "") + .param("currency", "INR") + .param("amount", "500.0")) + .andExpect(status().isBadRequest()) + .andExpect(content().string(expected)); + } + + @Test + void testGetFXAmountWithNullCurrencyInput() throws Exception { + String expected="{\"currency\":\"Currency is required\"}"; + mvc.perform(MockMvcRequestBuilders + .get("/cmfxapi/getFXAmount") + .param("date", "2025-05-16") + .param("currency", "") + .param("amount", "500.0")) + .andExpect(status().isBadRequest()) + .andExpect(content().string(expected)); + } + @Test + void testGetFXAmountWithNullAmountInput() throws Exception { + String expected="{\"amount\":\"Failed to convert property value of type 'java.lang.String' to required type 'double' for property 'amount'; nested exception is java.lang.NumberFormatException: empty String\"}"; + mvc.perform(MockMvcRequestBuilders + .get("/cmfxapi/getFXAmount") + .param("date", "2025-05-16") + .param("currency", "INR") + .param("amount", "")) + .andExpect(status().isBadRequest()) + .andExpect(content().string(expected)); + } + @Test + void testGetFXAmountWithInValidDateInput() throws Exception { + String expected="{\"date\":\"Date must be a LocalDate in format yyyy-MM-dd\"}"; + mvc.perform(MockMvcRequestBuilders + .get("/cmfxapi/getFXAmount") + .param("date", "16-05-2025") + .param("currency", "INR") + .param("amount", "500.0")) + .andExpect(status().isBadRequest()) + .andExpect(content().string(expected)); + } + @Test + void testGetFXAmountWithInValidCurrencyInput() throws Exception { + String expected="{\"currency\":\"Failed to convert property value of type 'java.lang.String' to required type 'com.crewmeister.cmcodingchallenge.currency.CurrencyConstants' for property 'currency'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.validation.constraints.NotNull com.crewmeister.cmcodingchallenge.currency.CurrencyConstants] for value 'INS'; nested exception is java.lang.IllegalArgumentException: No enum constant com.crewmeister.cmcodingchallenge.currency.CurrencyConstants.INS\"}"; + mvc.perform(MockMvcRequestBuilders + .get("/cmfxapi/getFXAmount") + .param("date", "2025-05-16") + .param("currency", "INS") + .param("amount", "500.0")) + .andExpect(status().isBadRequest()) + .andExpect(content().string(expected)); + } + @Test + void testGetFXAmountWithZeroAmountInput() throws Exception { + String expected="{\"amount\":\"Amount must be a positive number\"}"; + mvc.perform(MockMvcRequestBuilders + .get("/cmfxapi/getFXAmount") + .param("date", "2025-05-16") + .param("currency", "INR") + .param("amount", "0")) + .andExpect(status().isBadRequest()) + .andExpect(content().string(expected)); + } + + @Test + void testGetFXAmountWithNegativeAmountInput() throws Exception { + String expected="{\"amount\":\"Amount must be a positive number\"}"; + mvc.perform(MockMvcRequestBuilders + .get("/cmfxapi/getFXAmount") + .param("date", "2025-05-16") + .param("currency", "INR") + .param("amount", "-500")) + .andExpect(status().isBadRequest()) + .andExpect(content().string(expected)); + } + @Test + void testGetFXAmountWithValidInputs() throws Exception { + double expectedAmount = 5.1966; + + Mockito.when(currencyService.getFXAmount("2025-05-16", "INR", 500.0)) + .thenReturn(expectedAmount); + + mvc.perform(MockMvcRequestBuilders + .get("/cmfxapi/getFXAmount") + .param("date", "2025-05-16") + .param("currency", "INR") + .param("amount", "500.0")) + .andExpect(status().isOk()) + .andExpect(content().string("5.1966")); + + } + + @Test + void givenDifferentUrlRequiresAuthCheck() throws Exception { + mvc.perform(MockMvcRequestBuilders + .get("/secure/test")) + .andExpect(status().is3xxRedirection()) + .andExpect(redirectedUrlPattern("**/login")); + } + +} diff --git a/src/test/java/com/crewmeister/cmcodingchallenge/servicetests/CurrencyServiceImplTest.java b/src/test/java/com/crewmeister/cmcodingchallenge/servicetests/CurrencyServiceImplTest.java new file mode 100644 index 0000000..bf624c9 --- /dev/null +++ b/src/test/java/com/crewmeister/cmcodingchallenge/servicetests/CurrencyServiceImplTest.java @@ -0,0 +1,359 @@ +package com.crewmeister.cmcodingchallenge.servicetests; + +import com.crewmeister.cmcodingchallenge.currency.Currency; +import com.crewmeister.cmcodingchallenge.currencyrepository.CurrencyRepository; +import com.crewmeister.cmcodingchallenge.currencyservice.CurrencyServiceImpl; +import com.crewmeister.cmcodingchallenge.exception.InvalidRequestException; +import com.crewmeister.cmcodingchallenge.xmldata.*; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.web.client.ResourceAccessException; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +public class CurrencyServiceImplTest { + + @Mock + private CurrencyRepository currencyRepository; + + @Mock + private RestTemplate restTemplate; + + @InjectMocks + private CurrencyServiceImpl currencyService; + + @BeforeEach + void setUp() { + ReflectionTestUtils.setField(currencyService, "bundesBaseUrl", "https://api.statistiken.bundesbank.de/rest/download/"); + ReflectionTestUtils.setField(currencyService, "bundesApiKey", "BBEX3/D.%s.EUR.BB.AC.000"); + ReflectionTestUtils.setField(currencyService, "bundesApiFormat", "sdmx"); + ReflectionTestUtils.setField(currencyService, "bundesApiLang", "en"); + } + + @Test + void testGetListOfAvailableCurrencies() { + List mockList = List.of(new Currency(1L, "AUD"), new Currency(2L, "BGN")); + when(currencyRepository.findAll()).thenReturn(mockList); + + List result = currencyService.getListOfAvailableCurrencies(); + assertEquals(2, result.size()); + verify(currencyRepository, times(1)).findAll(); + } + + @Test + void testAddCurrency() { + List input = List.of(new Currency(3L, "BRL")); + when(currencyRepository.saveAll(input)).thenReturn(input); + + List result = currencyService.addCurrency(input); + assertEquals("BRL", result.get(0).getCurrencyName()); + verify(currencyRepository, times(1)).saveAll(input); + } + + @Test + void testGetCurrencyByName() { + Currency currency = new Currency(4L, "CAD"); + when(currencyRepository.findCurrencyName("CAD")).thenReturn(Optional.of(currency)); + + Optional result = currencyService.getCurrencyByName("CAD"); + assertTrue(result.isPresent()); + assertEquals("CAD", result.get().getCurrencyName()); + } + + @Test + void testGetFXRatesWithValidCurrencyAndDate() { + Currency ccy = new Currency(1L, "INR"); + when(currencyRepository.findCurrencyName("INR")).thenReturn(Optional.of(ccy)); + + ObsValue obsValue = new ObsValue(); + obsValue.rate="95.8200"; + ObsDimension obsDimension = new ObsDimension(); + obsDimension.date="2025-05-16"; + + Observation obs = new Observation(); + obs.value = obsValue; + obs.dimension = obsDimension; + + Series series = new Series(); + series.observations = List.of(obs); + + DataSet dataSet = new DataSet(); + dataSet.series = series; + + GenericData genericData = new GenericData(); + genericData.dataSet = dataSet; + + + + when(restTemplate.getForEntity(anyString(), eq(GenericData.class))) + .thenReturn(new ResponseEntity<>(genericData, HttpStatus.OK)); + + Map> result = currencyService.getFXRates("2025-05-16", "INR"); + + assertTrue(result.containsKey("INR")); + assertEquals("95.8200", result.get("INR").get("2025-05-16")); + } + + @Test + void testGetFXRatesWithValidCurrencyAndWeekendDate() { + Currency ccy = new Currency(1L, "INR"); + when(currencyRepository.findCurrencyName("INR")).thenReturn(Optional.of(ccy)); + + + ObsDimension obsDimension = new ObsDimension(); + obsDimension.date="2025-05-16"; + + Observation obs = new Observation(); + obs.dimension = obsDimension; + + Series series = new Series(); + series.observations = List.of(obs); + + DataSet dataSet = new DataSet(); + dataSet.series = series; + + GenericData genericData = new GenericData(); + genericData.dataSet = dataSet; + + + + when(restTemplate.getForEntity(anyString(), eq(GenericData.class))) + .thenReturn(new ResponseEntity<>(genericData, HttpStatus.OK)); + + Map> result = currencyService.getFXRates("2025-05-16", "INR"); + + assertTrue(result.containsKey("INR")); + assertEquals("Rate cannot be fetched as it is weekend or public holiday", result.get("INR").get("2025-05-16")); + } + + @Test + void testGetFXRatesWithValidDateAndCurrencyAsNull() { + List mockList = List.of(new Currency(1L, "INR"), new Currency(2L, "GBP")); + when(currencyService.getListOfAvailableCurrencies()).thenReturn(mockList); + + ObsValue obsValue1 = new ObsValue(); + obsValue1.rate="95.8201"; + ObsDimension obsDimension1 = new ObsDimension(); + obsDimension1.date="2025-05-16"; + + ObsValue obsValue2 = new ObsValue(); + obsValue2.rate="0.8427"; + ObsDimension obsDimension2 = new ObsDimension(); + obsDimension2.date="2025-05-16"; + + Observation obs1 = new Observation(); + obs1.dimension = obsDimension1; + obs1.value = obsValue1; + + Observation obs2 = new Observation(); + obs2.dimension = obsDimension2; + obs2.value = obsValue2; + + Series series1 = new Series(); + Series series2 = new Series(); + series1.observations = List.of(obs1); + series2.observations = List.of(obs2); + + DataSet dataSet1 = new DataSet(); + DataSet dataSet2 = new DataSet(); + dataSet1.series = series1; + dataSet2.series = series2; + + GenericData genericData1 = new GenericData(); + GenericData genericData2 = new GenericData(); + genericData1.dataSet = dataSet1; + genericData2.dataSet = dataSet2; + + when(restTemplate.getForEntity(anyString(), eq(GenericData.class))) + .thenAnswer(invocation -> { + String url = invocation.getArgument(0, String.class); + if (url.contains("INR")) { + return new ResponseEntity<>(genericData1, HttpStatus.OK); + } else if (url.contains("GBP")) { + return new ResponseEntity<>(genericData2, HttpStatus.OK); + } else { + return new ResponseEntity<>(null, HttpStatus.NOT_FOUND); + } + }); + + Map> result = currencyService.getFXRates("2025-05-16", ""); + System.out.println(result); + assertEquals(2, result.size()); + assertEquals(result.get("INR").get("2025-05-16"),"95.8201"); + assertEquals(result.get("GBP").get("2025-05-16"),"0.8427"); + } + + @Test + void testGetFXRatesWithDateAndCurrencyBothAsNull() { + List mockList = List.of(new Currency(1L, "INR"), new Currency(2L, "GBP")); + when(currencyService.getListOfAvailableCurrencies()).thenReturn(mockList); + + ObsValue obsValue1 = new ObsValue(); + obsValue1.rate="95.8201"; + ObsDimension obsDimension1 = new ObsDimension(); + obsDimension1.date="2025-05-15"; + + ObsValue obsValue2 = new ObsValue(); + obsValue2.rate="0.8427"; + ObsDimension obsDimension2 = new ObsDimension(); + obsDimension2.date="2025-05-16"; + + Observation obs1 = new Observation(); + obs1.dimension = obsDimension1; + obs1.value = obsValue1; + + Observation obs2 = new Observation(); + obs2.dimension = obsDimension2; + obs2.value = obsValue2; + + Series series1 = new Series(); + Series series2 = new Series(); + series1.observations = List.of(obs1); + series2.observations = List.of(obs2); + + DataSet dataSet1 = new DataSet(); + DataSet dataSet2 = new DataSet(); + dataSet1.series = series1; + dataSet2.series = series2; + + GenericData genericData1 = new GenericData(); + GenericData genericData2 = new GenericData(); + genericData1.dataSet = dataSet1; + genericData2.dataSet = dataSet2; + + when(restTemplate.getForEntity(anyString(), eq(GenericData.class))) + .thenAnswer(invocation -> { + String url = invocation.getArgument(0, String.class); + if (url.contains("INR")) { + return new ResponseEntity<>(genericData1, HttpStatus.OK); + } else if (url.contains("GBP")) { + return new ResponseEntity<>(genericData2, HttpStatus.OK); + } else { + return new ResponseEntity<>(null, HttpStatus.NOT_FOUND); + } + }); + + Map> result = currencyService.getFXRates(null, ""); + assertEquals(2, result.size()); + assertEquals("95.8201",result.get("INR").get("2025-05-15")); + assertEquals("0.8427",result.get("GBP").get("2025-05-16")); + } + + @Test + void testGetFXAmountWithValidInputs() { + ObsValue obsValue = new ObsValue(); + obsValue.rate="95.8200"; + ObsDimension obsDimension = new ObsDimension(); + obsDimension.date="2025-05-16"; + + Observation obs = new Observation(); + obs.dimension = obsDimension; + obs.value = obsValue; + + Series series = new Series(); + series.observations = List.of(obs); + + DataSet dataSet = new DataSet(); + dataSet.series = series; + + GenericData genericData = new GenericData(); + genericData.dataSet = dataSet; + + + + when(restTemplate.getForEntity(anyString(), eq(GenericData.class))) + .thenReturn(new ResponseEntity<>(genericData, HttpStatus.OK)); + + double result = currencyService.getFXAmount("2025-05-16","INR",500); + assertEquals(5.2181,result); + } + + @Test + void testGetFXAmountWithGenericDataAsNull() { + GenericData genericData = new GenericData(); + when(restTemplate.getForEntity(anyString(), eq(GenericData.class))) + .thenReturn(new ResponseEntity<>(genericData, HttpStatus.OK)); + RuntimeException exception = assertThrows(RuntimeException.class, () -> + currencyService.getFXAmount("2025-05-16", "INR", 500.00) + ); + + assertEquals("Generic data is unavailable for currency: INR", exception.getMessage()); + } + + @Test + void testGetFXAmountWithRateAsNull() { + + ObsDimension obsDimension = new ObsDimension(); + obsDimension.date="2025-05-16"; + + Observation obs = new Observation(); + obs.dimension = obsDimension; + obs.value = null; + + Series series = new Series(); + series.observations = List.of(obs); + + DataSet dataSet = new DataSet(); + dataSet.series = series; + + GenericData genericData = new GenericData(); + genericData.dataSet = dataSet; + + + + when(restTemplate.getForEntity(anyString(), eq(GenericData.class))) + .thenReturn(new ResponseEntity<>(genericData, HttpStatus.OK)); + + RuntimeException exception = assertThrows(IllegalArgumentException.class, () -> + currencyService.getFXAmount("2025-05-16", "INR", 500.00) + ); + + assertEquals("Conversion rate not found for date 2025-05-16", exception.getMessage()); + } + + @Test + void testFetchRatesThrowsException() { + when(restTemplate.getForEntity(anyString(), eq(GenericData.class))) + .thenThrow(new RestClientException("Invalid URL")); + + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + currencyService.getFXAmount("2025-05-16", "INR", 500.00) + ); + + assertEquals("Unable to retrieve FX rate data, please check logs for more details", exception.getMessage()); + } + + @Test + void testRestTemplateTimeout() { + when(currencyRepository.findCurrencyName("INR")) + .thenReturn(Optional.of(new Currency(1L, "INR"))); + when(restTemplate.getForEntity(anyString(), eq(GenericData.class))) + .thenThrow(new ResourceAccessException("Read timed out")); + + assertThrows( + RuntimeException.class, + () -> currencyService.getFXRates("2025-05-16", "INR"), + "Expected timeout to result in RuntimeException" + ); + + verify(restTemplate, atLeast(1)).getForEntity(anyString(), eq(GenericData.class)); + } + + +} +