zkoss / zkspringboot

ZK - Spring Boot integration
Apache License 2.0
53 stars 56 forks source link

3.0.0-SNAPSHOT is gone, the dependency failed. #37

Closed benyaminl closed 11 months ago

benyaminl commented 11 months ago

On the folder https://mavensync.zkoss.org/maven2/org/zkoss/zkspringboot/zkspringboot-starter/, there are no -SNAPSHOT, seems this need to be changed to 3.0.0 only

And I'm finding problem when using -eval on the version, the demo project failed to launch for full blown spring. I tried to search the books and docs, I really can't comprehend why it's broken...

This cause @WireVariable can't work :'(

benyaminl commented 11 months ago

I tried to ask on forum, but failed

So here we go

I need some help folks, I try to follow https://www.zkoss.org/wiki/ZK_Installation_Guide/Quick_Start/Create_and_Run_Your_First_ZK_Application_with_Spring_Boot

And if I only add zkspringboot, it will works. But I really need Database Access in the Backend (I tried to follow https://books.zkoss.org/zkessentials-book/master/spring_integration/wire_spring_beans.html), but ends up failed because I can't even add zkplus and use @VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)

This is my maven dependencies

  <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.zkoss.zkspringboot</groupId>
        <artifactId>zkspringboot-starter</artifactId>
        <type>pom</type>
        <version>${zkspringboot.version}</version>
    </dependency>

    <dependency>
        <groupId>org.zkoss.zk</groupId>
        <artifactId>zkbind</artifactId>
        <version>${zkoss.version}</version>
    </dependency>
    <dependency>
        <groupId>org.zkoss.zk</groupId>
        <artifactId>zkplus</artifactId>
        <version>${zkoss.version}</version>
    </dependency>

</dependencies>

And The error output is

java.lang.IllegalStateException: Failed to introspect Class [org.zkoss.zkspringboot.ZkAutoConfiguration] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@5cb0d902]
    at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:483) ~[spring-core-6.0.13.jar:6.0.13]
    at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:360) ~[spring-core-6.0.13.jar:6.0.13]
    at org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:417) ~[spring-core-6.0.13.jar:6.0.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.lambda$getTypeForFactoryMethod$1(AbstractAutowireCapableBeanFactory.java:748) ~[spring-beans-6.0.13.jar:6.0.13]
    at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) ~[na:na]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:747) ~[spring-beans-6.0.13.jar:6.0.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:680) ~[spring-beans-6.0.13.jar:6.0.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:651) ~[spring-beans-6.0.13.jar:6.0.13]
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1630) ~[spring-beans-6.0.13.jar:6.0.13]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:560) ~[spring-beans-6.0.13.jar:6.0.13]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:532) ~[spring-beans-6.0.13.jar:6.0.13]
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:119) ~[spring-context-6.0.13.jar:6.0.13]
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:779) ~[spring-context-6.0.13.jar:6.0.13]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) ~[spring-context-6.0.13.jar:6.0.13]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.1.5.jar:3.1.5]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:738) ~[spring-boot-3.1.5.jar:3.1.5]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:440) ~[spring-boot-3.1.5.jar:3.1.5]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) ~[spring-boot-3.1.5.jar:3.1.5]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-3.1.5.jar:3.1.5]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-3.1.5.jar:3.1.5]
    at id.salt.malang.fif.FifApplication.main(FifApplication.java:10) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[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:568) ~[na:na]
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.1.5.jar:3.1.5]
Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletRequestAttributeListener
    at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na]
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017) ~[na:na]
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) ~[na:na]
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862) ~[na:na]
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760) ~[na:na]
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681) ~[na:na]
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639) ~[na:na]
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[na:na]
    at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na]
    at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3402) ~[na:na]
    at java.base/java.lang.Class.getDeclaredMethods(Class.java:2504) ~[na:na]
    at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:465) ~[spring-core-6.0.13.jar:6.0.13]
    ... 25 common frames omitted
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletRequestAttributeListener
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[na:na]
    ... 38 common frames omitted

2023-11-07T15:00:23.005+07:00  WARN 187405 --- [  restartedMain] o.s.boot.SpringApplication               : Unable to close ApplicationContext

java.lang.IllegalStateException: Failed to introspect Class [org.zkoss.zkspringboot.ZkAutoConfiguration] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@5cb0d902]
    at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:483) ~[spring-core-6.0.13.jar:6.0.13]
    at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:360) ~[spring-core-6.0.13.jar:6.0.13]
    at org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:417) ~[spring-core-6.0.13.jar:6.0.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.lambda$getTypeForFactoryMethod$1(AbstractAutowireCapableBeanFactory.java:748) ~[spring-beans-6.0.13.jar:6.0.13]
    at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) ~[na:na]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:747) ~[spring-beans-6.0.13.jar:6.0.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:680) ~[spring-beans-6.0.13.jar:6.0.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:651) ~[spring-beans-6.0.13.jar:6.0.13]
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1630) ~[spring-beans-6.0.13.jar:6.0.13]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:560) ~[spring-beans-6.0.13.jar:6.0.13]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:532) ~[spring-beans-6.0.13.jar:6.0.13]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:659) ~[spring-beans-6.0.13.jar:6.0.13]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:651) ~[spring-beans-6.0.13.jar:6.0.13]
    at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1312) ~[spring-context-6.0.13.jar:6.0.13]
    at org.springframework.boot.SpringApplication.getExitCodeFromMappedException(SpringApplication.java:867) ~[spring-boot-3.1.5.jar:3.1.5]
    at org.springframework.boot.SpringApplication.getExitCodeFromException(SpringApplication.java:855) ~[spring-boot-3.1.5.jar:3.1.5]
    at org.springframework.boot.SpringApplication.handleExitCode(SpringApplication.java:842) ~[spring-boot-3.1.5.jar:3.1.5]
    at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:782) ~[spring-boot-3.1.5.jar:3.1.5]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:329) ~[spring-boot-3.1.5.jar:3.1.5]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-3.1.5.jar:3.1.5]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-3.1.5.jar:3.1.5]
    at id.salt.malang.fif.FifApplication.main(FifApplication.java:10) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[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:568) ~[na:na]
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.1.5.jar:3.1.5]
Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletRequestAttributeListener
    at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na]
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017) ~[na:na]
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) ~[na:na]
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862) ~[na:na]
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760) ~[na:na]
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681) ~[na:na]
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639) ~[na:na]
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[na:na]
    at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na]
    at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3402) ~[na:na]
    at java.base/java.lang.Class.getDeclaredMethods(Class.java:2504) ~[na:na]
    at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:465) ~[spring-core-6.0.13.jar:6.0.13]
    ... 26 common frames omitted
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletRequestAttributeListener
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[na:na]
    ... 39 common frames omitted

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.662 s
[INFO] Finished at: 2023-11-07T15:00:23+07:00
[INFO] ------------------------------------------------------------------------

Any pointer or help is appreciated. I use 9.6.3-Eval version. We want to proceed with spring and use spring validation, jpa, security, and others. with zkoss UI.

Thank you

mduchemin commented 11 months ago

quick check first, could you send your pom's (to check the versions).

That error message looks like you are trying to mix Jakarta and Java dependencies, so it could be caused by your ${zkoss.version} property not targetting a -jakarta version. To note: Spring 6.X (and spring-boot 3.X) have switched from java servlet to jakarta servlet. As a result, if your container uses jakarta, you need to use the -jakarta version of the ZK dependencies.

https://www.zkoss.org/wiki/ZK_Installation_Guide/Servlet_Specification/Getting_started_with_ZK-Jakarta

benyaminl commented 11 months ago

Hello @mduchemin Thanks for replying.

For the -jakarta, is there any -eval that I can test? Thank you

mduchemin commented 11 months ago

Hey @benyaminl,

there is. Current latest is 9.6.4 You will need to add the Eval repository to your pom. https://mavensync.zkoss.org/eval/org/zkoss/zk/zk/9.6.4-jakarta-Eval/

You can also find the latest CE version here: https://mavensync.zkoss.org/maven2/org/zkoss/zk/zk/9.6.0.2-jakarta/

mduchemin commented 11 months ago

To clarify the use case of ZK with version-jakarta:

ZK uses the servlet API for a number of features. Because of this, the ZK dependencies require either javax.servlet or jakarta.servlet to be available on your web container.

A number of vendors (including Spring) are moving from Java to Jakarta in their more recent releases. In the case of Spring, Spring 5.X and lower, as well as spring-boot 2.X and lower use the javax.servlet specs However, Spring 6 (and spring-boot 3) have transitioned to jakarta.servlet specs.

(even though you may not be manually configuring a web container for your spring-boot project, internally spring-boot will provide one with the matching servlet implementation).

Because of all of that, ZK has been providing "dual" versions of recent ZK releases: without suffix, ex: zk-9.6.4.jar <- the javax.servlet implementation with -jakarta suffix, ex zk-9.6.4-jakarta <- the jakarta.servlet implementation

This way, you can select the version of ZK which matches your web container's servlet implementation.

A warning regarding your ZK dependencies, since you are loading some manually in addition to the ones provided by the zk spring boot starter project: You should make sure that all of your ZK dependencies use the same version.

ZK springboot 3.0.0 uses: 9.6.0-jakarta</zk.version> https://github.com/zkoss/zkspringboot/blob/master/zkspringboot-starter/pom.xml#L51C21-L51C21

If you manually load zkplus-9.6.4-jakarta, you will have jars from 2 different versions in your build, which is going to cause issues. You will need to choose which ZK version you want to use, and either use maven dependency management to force all ZK jars to 9.6.4, or downgrade your manually loaded zkplus to 9.0.0

mduchemin commented 11 months ago

I suggest running a mvn dependency:tree command on your project to verify that your dependencies are loaded as expected

benyaminl commented 11 months ago

I suggest running a mvn dependency:tree command on your project to verify that your dependencies are loaded as expected

[INFO] id.salt.malang:fif:jar:0.0.1-SNAPSHOT [INFO] +- org.springframework.boot:spring-boot-starter-web:jar:3.1.5:compile [INFO] | +- org.springframework.boot:spring-boot-starter:jar:3.1.5:compile [INFO] | | +- org.springframework.boot:spring-boot-starter-logging:jar:3.1.5:compile [INFO] | | | +- ch.qos.logback:logback-classic:jar:1.4.11:compile [INFO] | | | | - ch.qos.logback:logback-core:jar:1.4.11:compile [INFO] | | | +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.20.0:compile [INFO] | | | | - org.apache.logging.log4j:log4j-api:jar:2.20.0:compile [INFO] | | | - org.slf4j:jul-to-slf4j:jar:2.0.9:compile [INFO] | | +- jakarta.annotation:jakarta.annotation-api:jar:2.1.1:compile [INFO] | | - org.yaml:snakeyaml:jar:1.33:compile [INFO] | +- org.springframework.boot:spring-boot-starter-json:jar:3.1.5:compile [INFO] | | +- com.fasterxml.jackson.core:jackson-databind:jar:2.15.3:compile [INFO] | | +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.15.3:compile [INFO] | | +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.15.3:compile [INFO] | | - com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.15.3:compile [INFO] | +- org.springframework.boot:spring-boot-starter-tomcat:jar:3.1.5:compile [INFO] | | +- org.apache.tomcat.embed:tomcat-embed-core:jar:10.1.15:compile [INFO] | | - org.apache.tomcat.embed:tomcat-embed-websocket:jar:10.1.15:compile [INFO] | +- org.springframework:spring-web:jar:6.0.13:compile [INFO] | | +- org.springframework:spring-beans:jar:6.0.13:compile [INFO] | | - io.micrometer:micrometer-observation:jar:1.11.5:compile [INFO] | | - io.micrometer:micrometer-commons:jar:1.11.5:compile [INFO] | - org.springframework:spring-webmvc:jar:6.0.13:compile [INFO] | +- org.springframework:spring-context:jar:6.0.13:compile [INFO] | - org.springframework:spring-expression:jar:6.0.13:compile [INFO] +- org.springframework.boot:spring-boot-starter-data-jpa:jar:3.1.5:compile [INFO] | +- org.springframework.boot:spring-boot-starter-aop:jar:3.1.5:compile [INFO] | | - org.aspectj:aspectjweaver:jar:1.9.20:compile [INFO] | +- org.springframework.boot:spring-boot-starter-jdbc:jar:3.1.5:compile [INFO] | | +- com.zaxxer:HikariCP:jar:5.0.1:compile [INFO] | | - org.springframework:spring-jdbc:jar:6.0.13:compile [INFO] | +- org.hibernate.orm:hibernate-core:jar:6.2.13.Final:compile [INFO] | | +- jakarta.persistence:jakarta.persistence-api:jar:3.1.0:compile [INFO] | | +- jakarta.transaction:jakarta.transaction-api:jar:2.0.1:compile [INFO] | | +- org.jboss.logging:jboss-logging:jar:3.5.3.Final:compile [INFO] | | +- org.hibernate.common:hibernate-commons-annotations:jar:6.0.6.Final:runtime [INFO] | | +- io.smallrye:jandex:jar:3.0.5:runtime [INFO] | | +- com.fasterxml:classmate:jar:1.5.1:compile [INFO] | | +- net.bytebuddy:byte-buddy:jar:1.14.9:runtime [INFO] | | +- org.glassfish.jaxb:jaxb-runtime:jar:4.0.3:runtime [INFO] | | | - org.glassfish.jaxb:jaxb-core:jar:4.0.3:runtime [INFO] | | | +- org.eclipse.angus:angus-activation:jar:2.0.1:runtime [INFO] | | | +- org.glassfish.jaxb:txw2:jar:4.0.3:runtime [INFO] | | | - com.sun.istack:istack-commons-runtime:jar:4.1.2:runtime [INFO] | | +- jakarta.inject:jakarta.inject-api:jar:2.0.1:runtime [INFO] | | - org.antlr:antlr4-runtime:jar:4.10.1:compile [INFO] | +- org.springframework.data:spring-data-jpa:jar:3.1.5:compile [INFO] | | +- org.springframework.data:spring-data-commons:jar:3.1.5:compile [INFO] | | +- org.springframework:spring-orm:jar:6.0.13:compile [INFO] | | +- org.springframework:spring-tx:jar:6.0.13:compile [INFO] | | - org.slf4j:slf4j-api:jar:2.0.9:compile [INFO] | - org.springframework:spring-aspects:jar:6.0.13:compile [INFO] +- org.springframework.boot:spring-boot-starter-security:jar:3.1.5:compile [INFO] | +- org.springframework:spring-aop:jar:6.0.13:compile [INFO] | +- org.springframework.security:spring-security-config:jar:6.1.5:compile [INFO] | - org.springframework.security:spring-security-web:jar:6.1.5:compile [INFO] +- org.springframework.boot:spring-boot-starter-validation:jar:3.1.5:compile [INFO] | +- org.apache.tomcat.embed:tomcat-embed-el:jar:10.1.15:compile [INFO] | - org.hibernate.validator:hibernate-validator:jar:8.0.1.Final:compile [INFO] | - jakarta.validation:jakarta.validation-api:jar:3.0.2:compile [INFO] +- org.springframework.boot:spring-boot-devtools:jar:3.1.5:runtime [INFO] | +- org.springframework.boot:spring-boot:jar:3.1.5:compile [INFO] | - org.springframework.boot:spring-boot-autoconfigure:jar:3.1.5:compile [INFO] +- org.springframework.boot:spring-boot-starter-test:jar:3.1.5:test [INFO] | +- org.springframework.boot:spring-boot-test:jar:3.1.5:test [INFO] | +- org.springframework.boot:spring-boot-test-autoconfigure:jar:3.1.5:test [INFO] | +- com.jayway.jsonpath:json-path:jar:2.8.0:test [INFO] | +- jakarta.xml.bind:jakarta.xml.bind-api:jar:4.0.1:runtime [INFO] | | - jakarta.activation:jakarta.activation-api:jar:2.1.2:runtime [INFO] | +- net.minidev:json-smart:jar:2.4.11:test [INFO] | | - net.minidev:accessors-smart:jar:2.4.11:test [INFO] | | - org.ow2.asm:asm:jar:9.3:test [INFO] | +- org.assertj:assertj-core:jar:3.24.2:test [INFO] | +- org.hamcrest:hamcrest:jar:2.2:test [INFO] | +- org.junit.jupiter:junit-jupiter:jar:5.9.3:test [INFO] | | +- org.junit.jupiter:junit-jupiter-api:jar:5.9.3:test [INFO] | | | +- org.opentest4j:opentest4j:jar:1.2.0:test [INFO] | | | +- org.junit.platform:junit-platform-commons:jar:1.9.3:test [INFO] | | | - org.apiguardian:apiguardian-api:jar:1.1.2:test [INFO] | | +- org.junit.jupiter:junit-jupiter-params:jar:5.9.3:test [INFO] | | - org.junit.jupiter:junit-jupiter-engine:jar:5.9.3:test [INFO] | | - org.junit.platform:junit-platform-engine:jar:1.9.3:test [INFO] | +- org.mockito:mockito-core:jar:5.3.1:test [INFO] | | +- net.bytebuddy:byte-buddy-agent:jar:1.14.9:test [INFO] | | - org.objenesis:objenesis:jar:3.3:test [INFO] | +- org.mockito:mockito-junit-jupiter:jar:5.3.1:test [INFO] | +- org.skyscreamer:jsonassert:jar:1.5.1:test [INFO] | | - com.vaadin.external.google:android-json:jar:0.0.20131108.vaadin1:test [INFO] | +- org.springframework:spring-core:jar:6.0.13:compile [INFO] | | - org.springframework:spring-jcl:jar:6.0.13:compile [INFO] | +- org.springframework:spring-test:jar:6.0.13:test [INFO] | - org.xmlunit:xmlunit-core:jar:2.9.1:test [INFO] +- org.springframework.security:spring-security-test:jar:6.1.5:test [INFO] | - org.springframework.security:spring-security-core:jar:6.1.5:compile [INFO] | - org.springframework.security:spring-security-crypto:jar:6.1.5:compile [INFO] +- org.postgresql:postgresql:jar:42.6.0:runtime [INFO] | - org.checkerframework:checker-qual:jar:3.31.0:runtime [INFO] +- org.zkoss.zkspringboot:zkspringboot-starter:pom:3.0.0:compile [INFO] | +- org.zkoss.zkspringboot:zkspringboot-autoconfig:jar:3.0.0:compile [INFO] | +- com.google.code.gson:gson:jar:2.10.1:compile [INFO] | +- com.fasterxml.jackson.core:jackson-core:jar:2.15.3:compile [INFO] | - com.fasterxml.jackson.core:jackson-annotations:jar:2.15.3:compile [INFO] +- org.zkoss.zk:zkbind:jar:9.6.3-jakarta-Eval:compile [INFO] | +- org.zkoss.zk:zul:jar:9.6.3-jakarta-Eval:compile [INFO] | | - org.zkoss.zk:zk:jar:9.6.3-jakarta-Eval:compile [INFO] | | +- org.zkoss.common:zweb:jar:9.6.3-jakarta-Eval:compile [INFO] | | | - org.zkoss.common:zcommon:jar:9.6.3-jakarta-Eval:compile [INFO] | | | +- org.zkoss.common:zel:jar:9.6.3-jakarta-Eval:compile [INFO] | | | - org.apache-extras.beanshell:bsh:jar:2.0b6:compile [INFO] | | +- org.zkoss.zk:zkwebfragment:jar:9.6.3-jakarta-Eval:compile [INFO] | | +- commons-fileupload:commons-fileupload:jar:1.4:compile [INFO] | | - commons-io:commons-io:jar:2.8.0:compile [INFO] | - org.javassist:javassist:jar:3.28.0-GA:compile [INFO] - org.zkoss.zk:zkplus:jar:9.6.3-jakarta-Eval:compile

Seems the dependencies loaded correctly, and now I can run it with Spring Boot 3.1.5, but the autowiring using @WireVariable seems still cause zero result and result in blank service haha... *sad...

It Works, but sadly, I need to define the service name directly in order to make it work. I do have service with @Service annotation with no name, but it's the real implementation. Seems the name should be the same? hmm...

I also already add the WEB-INF with the applicationContext.xml (i'm not sure it's even called on new Spring boot 3)

And I tried the demo-jar, the /mvvm result in error

2023-11-07T22:37:02.009+07:00  INFO 225844 --- [nio-8080-exec-1] o.z.util.resource.impl.LabelLoaderImpl   : Opening file:/home/ben/Code/zkspringboot-demo-jar/target/classes/metainfo/zk-label.properties
2023-11-07T22:37:02.034+07:00 ERROR 225844 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[DHtmlUpdateServlet]   : Servlet.service() for servlet [DHtmlUpdateServlet] threw exception

java.lang.ClassNotFoundException: org.zkoss.zkex.rt.Runtime
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[na:na]
    at java.base/java.lang.Class.forName0(Native Method) ~[na:na]
    at java.base/java.lang.Class.forName(Class.java:467) ~[na:na]
    at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) ~[spring-boot-devtools-3.0.0.jar:3.0.0]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[na:na]
    at org.zkoss.zuti.zul.TemplateBasedShadowElement.docheck0(TemplateBasedShadowElement.java:209) ~[zuti-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zuti.zul.TemplateBasedShadowElement.afterCompose(TemplateBasedShadowElement.java:74) ~[zuti-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:855) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:824) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:742) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0(UiEngineImpl.java:936) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:891) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:778) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:838) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:796) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:742) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage0(UiEngineImpl.java:463) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage(UiEngineImpl.java:371) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.http.ZumlExtendlet.process(ZumlExtendlet.java:144) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.http.ZumlExtendlet.service(ZumlExtendlet.java:115) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.web.util.resource.ClassWebResource.web0(ClassWebResource.java:615) ~[zweb-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.web.util.resource.ClassWebResource.web(ClassWebResource.java:602) ~[zweb-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.web.util.resource.ClassWebResource.service(ClassWebResource.java:282) ~[zweb-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.au.http.DHtmlResourceServlet.doGet0(DHtmlResourceServlet.java:117) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:397) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:705) ~[tomcat-embed-core-10.1.1.jar:6.0]
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:814) ~[tomcat-embed-core-10.1.1.jar:6.0]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:223) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) ~[spring-web-6.0.2.jar:6.0.2]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) ~[spring-web-6.0.2.jar:6.0.2]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) ~[spring-web-6.0.2.jar:6.0.2]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:441) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:367) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:295) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:171) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:314) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1414) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1158) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1097) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:973) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1003) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:895) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:705) ~[tomcat-embed-core-10.1.1.jar:6.0]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:880) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:814) ~[tomcat-embed-core-10.1.1.jar:6.0]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:223) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.0.2.jar:6.0.2]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.2.jar:6.0.2]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.0.2.jar:6.0.2]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.2.jar:6.0.2]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.0.2.jar:6.0.2]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.2.jar:6.0.2]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:119) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:400) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1739) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]

2023-11-07T22:37:02.040+07:00 ERROR 225844 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Servlet execution threw an exception] with root cause

java.lang.ClassNotFoundException: org.zkoss.zkex.rt.Runtime
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[na:na]
    at java.base/java.lang.Class.forName0(Native Method) ~[na:na]
    at java.base/java.lang.Class.forName(Class.java:467) ~[na:na]
    at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) ~[spring-boot-devtools-3.0.0.jar:3.0.0]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[na:na]
    at org.zkoss.zuti.zul.TemplateBasedShadowElement.docheck0(TemplateBasedShadowElement.java:209) ~[zuti-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zuti.zul.TemplateBasedShadowElement.afterCompose(TemplateBasedShadowElement.java:74) ~[zuti-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:855) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:824) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:742) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0(UiEngineImpl.java:936) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:891) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:778) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:838) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:796) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:742) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage0(UiEngineImpl.java:463) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage(UiEngineImpl.java:371) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.http.ZumlExtendlet.process(ZumlExtendlet.java:144) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.ui.http.ZumlExtendlet.service(ZumlExtendlet.java:115) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.web.util.resource.ClassWebResource.web0(ClassWebResource.java:615) ~[zweb-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.web.util.resource.ClassWebResource.web(ClassWebResource.java:602) ~[zweb-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.web.util.resource.ClassWebResource.service(ClassWebResource.java:282) ~[zweb-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.au.http.DHtmlResourceServlet.doGet0(DHtmlResourceServlet.java:117) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:397) ~[zk-9.6.0-jakarta-Eval.jar:9.6.0-migrated-1.0.0]
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:705) ~[tomcat-embed-core-10.1.1.jar:6.0]
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:814) ~[tomcat-embed-core-10.1.1.jar:6.0]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:223) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) ~[spring-web-6.0.2.jar:6.0.2]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) ~[spring-web-6.0.2.jar:6.0.2]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:110) ~[spring-web-6.0.2.jar:6.0.2]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:441) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:367) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:295) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:171) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:314) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1414) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1158) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1097) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:973) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1003) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:895) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:705) ~[tomcat-embed-core-10.1.1.jar:6.0]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:880) ~[spring-webmvc-6.0.2.jar:6.0.2]
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:814) ~[tomcat-embed-core-10.1.1.jar:6.0]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:223) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.0.2.jar:6.0.2]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.2.jar:6.0.2]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.0.2.jar:6.0.2]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.2.jar:6.0.2]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.0.2.jar:6.0.2]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.2.jar:6.0.2]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:119) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:400) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1739) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-10.1.1.jar:10.1.1]
    at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
mduchemin commented 11 months ago

it looks like you are using a shadow element, but don't have the dependencies loaded for that. To use shadow elements, you need zuti, which itself requires zkex

(shadow elements are these utility elements for MVVM: https://books.zkoss.org/zk-mvvm-book/8.0/syntax/shadow_elements.html <apply>, <choose>, <foreach>, <if>, <when>

Both of these are missing from your dependency tree, which means that they are not available in your application after maven build.

benyaminl commented 11 months ago

Ok Thanks @mduchemin This is really helpful, thank you. I will close this.

mduchemin commented 11 months ago

FYI, the 3.0.0-SNAPSHOT has been corrected to intended 3.0.0 in the master branch

benyaminl commented 11 months ago

it looks like you are using a shadow element, but don't have the dependencies loaded for that. To use shadow elements, you need zuti, which itself requires zkex

(shadow elements are these utility elements for MVVM: https://books.zkoss.org/zk-mvvm-book/8.0/syntax/shadow_elements.html <apply>, <choose>, <foreach>, <if>, <when>

Both of these are missing from your dependency tree, which means that they are not available in your application after maven build.

Sorry, for keep asking again, then when using shadow elements, we, must have Enterprise License right? We can't have simple CE package because zuti and zkex is part EE or PE? Is that correct?

mduchemin commented 11 months ago

Hey @benyaminl,

Yes, the Zkex and Zuti packages are part of the Enterprise Edition (EE) package. MVVM is possible with CE / PE, but the extra features such as the shadow components help a lot with flexibility.

I think it'd be nicer to have the demos point to the -eval versions by default since the projects use features from this edition, will update that shortly.

You can test it with an evalutation version, which is available in Maven or through direct download, buy using the target version ending with -eval

You can find the full list of the difference between the EE, PE and CE editions here: https://www.zkoss.org/whyzk/Features