CAS overlay from master failed to start

167 views
Skip to first unread message

Hartmut Trüe

unread,
Oct 25, 2023, 6:15:01 AM10/25/23
to CAS Community
Hello,

my CAS overlay (build from master) fails to run in external tomcat due to a missing dependency:

CAS Version: 7.0.0-SNAPSHOT
CAS Branch: master
CAS Commit Id: 888edfa4dc5da86b988a1c662a102318a555dfdd
CAS Build Date/Time: 2023-10-25T06:28:56Z
Spring Boot Version: 3.2.0-M3
Spring Version: 6.1.0-M5
Java Home: /usr/lib/jvm/java-21-openjdk-amd64
Java Vendor: Private Build
Java Version: 21-ea
Servlet Version: null
JVM Free Memory: 84 MB
JVM Maximum Memory: 5 GB
JVM Total Memory: 316 MB
OS Architecture: amd64
OS Name: Linux
OS Version: 6.2.0-35-generic
OS Date/Time: 2023-10-25T11:19:33.679732155
OS Temp Directory: /tmp
...
2023-10-25 11:19:38,166 ERROR [org.springframework.boot.SpringApplication] - <Application run failed>
org.springframework.context.ApplicationContextException: Unable to start web server
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:165) ~[spring-boot-3.2.0-M3.jar:3.2.0-M3]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:602) ~[spring-context-6.1.0-M5.jar:6.1.0-M5]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.2.0-M3.jar:3.2.0-M3]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) ~[spring-boot-3.2.0-M3.jar:3.2.0-M3]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) ~[spring-boot-3.2.0-M3.jar:3.2.0-M3]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-3.2.0-M3.jar:3.2.0-M3]
        at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:174) ~[spring-boot-3.2.0-M3.jar:3.2.0-M3]
        at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:154) ~[spring-boot-3.2.0-M3.jar:3.2.0-M3]
        at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:96) ~[spring-boot-3.2.0-M3.jar:3.2.0-M3]
        at org.apereo.cas.util.spring.boot.AbstractCasSpringBootServletInitializer.onStartup(AbstractCasSpringBootServletInitializer.java:34) ~[cas-server-core-util-api-7.0.0-SNAPSHOT.jar:7.0.0-SNAPSHOT]
        at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:171) ~[spring-web-6.1.0-M5.jar:6.1.0-M5]
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4875) ~[tomcat10-catalina-10.1.6.jar:10.1.6]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat10-catalina-10.1.6.jar:10.1.6]
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332) ~[tomcat10-catalina-10.1.6.jar:10.1.6]
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322) ~[tomcat10-catalina-10.1.6.jar:10.1.6]
        at java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[?:?]
        at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat10-util-10.1.6.jar:10.1.6]
        at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) ~[?:?]
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:871) ~[tomcat10-catalina-10.1.6.jar:10.1.6]
        at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:846) ~[tomcat10-catalina-10.1.6.jar:10.1.6]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat10-catalina-10.1.6.jar:10.1.6]
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332) ~[tomcat10-catalina-10.1.6.jar:10.1.6]
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322) ~[tomcat10-catalina-10.1.6.jar:10.1.6]
        at java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[?:?]
        at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat10-util-10.1.6.jar:10.1.6]
        at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) ~[?:?]
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:871) ~[tomcat10-catalina-10.1.6.jar:10.1.6]
        at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:241) ~[tomcat10-catalina-10.1.6.jar:10.1.6]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat10-catalina-10.1.6.jar:10.1.6]
        at org.apache.catalina.core.StandardService.startInternal(StandardService.java:428) ~[tomcat10-catalina-10.1.6.jar:10.1.6]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat10-catalina-10.1.6.jar:10.1.6]
        at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:912) ~[tomcat10-catalina-10.1.6.jar:10.1.6]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat10-catalina-10.1.6.jar:10.1.6]
        at org.apache.catalina.startup.Catalina.start(Catalina.java:795) ~[tomcat10-catalina-10.1.6.jar:10.1.6]
        at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:578) ~[?:?]
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:347) ~[bootstrap.jar:10.1.6]
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:482) ~[bootstrap.jar:10.1.6]
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'casCorsFilter' defined in class path resource [org/apereo/cas/config/CasFiltersConfiguration$CasFiltersCorsConfiguration.class]: Unsatisfied dependency expressed through method 'casCorsFilter' parameter 1: Error creating bean with name 'corsHttpWebRequestConfigurationSource' defined in class path resource [org/apereo/cas/config/CasFiltersConfiguration$CasFiltersCorsConfiguration.class]: Unsatisfied dependency expressed through method 'corsHttpWebRequestConfigurationSource' parameter 3: Error creating bean with name 'servicesManager' defined in class path resource [org/apereo/cas/config/CasCoreServicesConfiguration$CasCoreServicesManagerConfiguration.class]: Unsatisfied dependency expressed through method 'servicesManager' parameter 0: Error creating bean with name 'defaultServicesManagerExecutionPlanConfigurer' defined in class path resource [org/apereo/cas/config/CasCoreServicesConfiguration$CasCoreServicesManagerExecutionPlanConfiguration.class]: Unsatisfied dependency expressed through method 'defaultServicesManagerExecutionPlanConfigurer' parameter 1: Error creating bean with name 'servicesManagerConfigurationContext' defined in class path resource [org/apereo/cas/config/CasCoreServicesConfiguration$CasCoreServicesManagerExecutionPlanConfiguration.class]: Unsatisfied dependency expressed through method 'servicesManagerConfigurationContext' parameter 1: Error creating bean with name 'serviceRegistry' defined in class path resource [org/apereo/cas/config/CasCoreServicesConfiguration$CasCoreServiceRegistryConfiguration.class]: Unsatisfied dependency expressed through method 'serviceRegistry' parameter 2: Error creating bean with name 'serviceRegistryExecutionPlan' defined in class path resource [org/apereo/cas/config/CasCoreServicesConfiguration$CasCoreServiceRegistryPlanConfiguration.class]: Failed to instantiate [org.apereo.cas.services.ServiceRegistryExecutionPlan]: Factory method 'serviceRegistryExecutionPlan' threw exception with message: Error creating bean with name 'jsonServiceRegistryExecutionPlanConfigurer' defined in class path resource [org/apereo/cas/config/JsonServiceRegistryConfiguration.class]: Unsatisfied dependency expressed through method 'jsonServiceRegistryExecutionPlanConfigurer' parameter 1: Error creating bean with name 'jsonServiceRegistry' defined in class path resource [org/apereo/cas/config/JsonServiceRegistryConfiguration.class]: Failed to instantiate [org.apereo.cas.services.ServiceRegistry]: Factory method 'jsonServiceRegistry' threw exception with message: 'java.lang.Object java.util.List.getFirst()'
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:801) ~[spring-beans-6.1.0-M5.jar:6.1.0-M5]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:545) ~[spring-beans-6.1.0-M5.jar:6.1.0-M5]
...

Regards,
Hartmut

Frédéric Dussurget

unread,
Oct 25, 2023, 9:45:16 AM10/25/23
to CAS Community, Hartmut Trüe
Hi,
do you have this one in your build.gradle : implementation "org.apereo.cas:cas-server-support-json-service-registry" ?
you also might need the dependency linked to your backend (redis, backend, hazelcast etc.) for your service registry. Eg, for redis : implementation "org.apereo.cas:cas-server-support-redis-service-registry"
regards,

Hartmut Trüe

unread,
Oct 26, 2023, 4:22:03 AM10/26/23
to CAS Community, Frédéric Dussurget, Hartmut Trüe
Frédéric, yes, i do. I use the json registry and a similar configuration works fine with 6.6.

For me it looks more like a problem with a missing web request filter (CORS) library.

Regards,
Hartmut

Hartmut Trüe

unread,
Nov 28, 2023, 6:04:04 AM11/28/23
to CAS Community, Hartmut Trüe, Frédéric Dussurget
Hello,

any ideas to this issue?

I have reduced my config to a minimum, but i always get the same error:

Error creating bean with name 'serviceRegistryExecutionPlan' defined in class path resource [org/apereo/cas/config/CasCoreServicesConfiguration$CasCoreServiceRegistryPlanConfiguration.class]: Failed to instantiate [org.apereo.cas.services.ServiceRegistryExecutionPlan]: Factory method 'serviceRegistryExecutionPlan' threw exception with message: Error creating bean with name 'jsonServiceRegistryExecutionPlanConfigurer' defined in class path resource [org/apereo/cas/config/JsonServiceRegistryConfiguration.class]: Unsatisfied dependency expressed through method 'jsonServiceRegistryExecutionPlanConfigurer' parameter 1: Error creating bean with name 'jsonServiceRegistry' defined in class path resource [org/apereo/cas/config/JsonServiceRegistryConfiguration.class]: Failed to instantiate [org.apereo.cas.services.ServiceRegistry]: Factory method 'jsonServiceRegistry' threw exception with message: 'java.lang.Object java.util.List.getFirst()'

I tried with json support in build.gradle, with yaml support, with both, without them, with empty directory for services,  some services in directory,  initFromJson=false, initFromJson=true ...

No matter, always the same error. With 6.6 the same configs are working fine.

What is missing? 

Regards,
Hartmut

Petr Bodnár

unread,
Dec 2, 2023, 2:35:56 AM12/2/23
to CAS Community, Hartmut Trüe, Frédéric Dussurget
Hi Hartmut,

the reason behind the error you see is probably that you are running CAS with an old Java:

The latest versions of CAS 7 have switched to Java 21 and the method java.util.List.getFirst() from the exception message is not available in older Java versions. (So you most probably get NoSuchMethodError here. Unfortunately, CAS usually doesn't log exception names, that's why the error log might look a little bit cryptic...)

Regards
Petr

Hartmut Trüe

unread,
Dec 2, 2023, 5:54:10 AM12/2/23
to CAS Community, Petr Bodnár, Hartmut Trüe, Frédéric Dussurget
Hi Petr,

that's a good point ... as you can see from my first post, it is Java 21:

Java Home: /usr/lib/jvm/java-21-openjdk-amd64
Java Vendor: Private Build
Java Version: 21-ea

It is a JDK 21 from Ubuntu 23.10 repository, but the name suggests it is early access (ea) and may be incomplete.

I will try another version and report back here.

Thank you for taking care of it.

Regards,
Hartmut

Hartmut Trüe

unread,
Dec 4, 2023, 4:29:06 AM12/4/23
to CAS Community, Hartmut Trüe, Petr Bodnár, Frédéric Dussurget
Hi Petr,

thanks for your tip, that showed me the way. Now it is:

Java Home: /opt/jdk-21.0.1
Java Vendor: Oracle Corporation
Java Version: 21.0.1

from https://jdk.java.net/21/ and CAS 7.0 is up and running!

Thank you very much!

Best regards,
Hartmut
Reply all
Reply to author
Forward
0 new messages