We’re currently evaluating the Vaadin Quarkus add-on compatibility in light of the Jackson 3 upgrade in Vaadin 25, and we’d like to collect feedback from the community - especially from those who are using native builds.
Why This Change Is Happening
Starting with Vaadin 25, we upgrade to Jackson 3 to be up-to-date with it, improve our API and because Spring Boot 4 requires it.
Even though Vaadin-Quarkus users don’t necessarily use Spring Boot directly, this dependency upgrade affects the overall Vaadin ecosystem - including add-ons like Vaadin-Quarkus.
Why We Think There May Be an Issue
The potential issue lies in the lack of a dedicated Quarkus extension for Jackson 3.
Quarkus Jackson extension includes build steps that instruct the native build process on how to handle reflection for Jackson types.
Because there is currently no equivalent extension for Jackson 3, the native build or executable may fail due to missing reflection configuration.
What We’ve Seen So Far
Preliminary testing indicates that simple native builds may still work fine - even when reflection is involved, as long as the code uses basic Jackson functionality (e.g., deserializing simple records or lists).
However, issues could arise for more complex cases, such as:
Using Jackson annotations like @JsonTypeInfo
Custom serializers or polymorphic type handling
Frameworks or libraries depending on advanced Jackson reflection behavior
Interestingly, Jackson 3 still uses jackson-annotations version 2, which might explain why some basic use cases continue to work without changes.
What We’d Like to Know From You
To assess the real-world impact, we’d appreciate your feedback on the following:
Are you using native builds with Vaadin and Quarkus?
Have you experienced any serialization/deserialization, or reflection issues after upgrading to Vaadin 25.0.0 pre-release (latest is 25.0.0-alpha14 at the moment, 25.0.0-beta1 is expected on week 42)?
If so, could you share a minimal example or a brief description of your setup?
Related issue with Wildfly 37.0.1.Final and Jackson 3.0 in Vaadin 25 beta:
Caused by: java.lang.NoSuchFieldError: Class com.fasterxml.jackson.annotation.JsonFormat$Shape does not have member field 'com.fasterxml.jackson.annotation.JsonFormat$Shape POJO'
at deployment.ptsmc.ear//tools.jackson.databind.ser.BasicSerializerFactory.buildCollectionSerializer(BasicSerializerFactory.java:586)
...
at deployment.ptsmc.ear//com.vaadin.flow.data.renderer.Renderer.render(Renderer.java:57)
at deployment.ptsmc.ear//com.vaadin.flow.component.grid.Grid$Column.<init>(Grid.java:480)
at deployment.ptsmc.ear//com.vaadin.flow.component.grid.Grid.createColumn(Grid.java:2082)
at deployment.ptsmc.ear//com.vaadin.flow.component.grid.Grid.addColumn(Grid.java:2028)
at deployment.ptsmc.ear//com.vaadin.flow.component.grid.Grid.addColumn(Grid.java:1990)
at deployment.ptsmc.ear//com.vaadin.flow.component.treegrid.TreeGrid.addHierarchyColumn(TreeGrid.java:500)
at deployment.ptsmc.ear.ptsmc-core.jar//com.ec.ptsmc.TreeView.<init>(TreeView.java:484)
Wildfly comes with an older version of jackson provided.
This is not a problem for main jackson as they have a new package, but it is a problem with annotations, as 3.0 is using the old names and comes with version 2.20, while wildfly has 2.18 I believe?
Have gotten around that for now with ptsmc.ear\META-INF\jboss-deployment-structure.xml :
Yeah, excluding only the jackson-annotations module proved not to work.
Currently, the workaround (also documented in release notes and following the issue linked by @knoobie) is to exclude the jaxrs subsystem, which is the one importing Jackson 2.
I’m in a bit of a dependency hell with this.
I have three applications that use Wildfly 38 + Vaadin 24.9.x
We also make use of jaxrs. Disabling jaxrs via the jboss-deployment-structure xml breaks webservices. Wildfly uses resteasy to provide jaxrs and that has a dependency on jackson 2.x. We also use swagger to do some code generation, which also uses jackson 2.x.
We will likely have to hold off upgrading to vaadin 25.x until we can harmonize our version of jackson.
I’m still seeing that wildfly 39 is Beta 1 according to their website. Either way it’s still using 2.x jackson. I have use of both jaxrs(resteasy) and swagger. I haven’t tried excluding only the jackson-annotations dep yet(been in meetings all morning), but it remains to be seen if I’ll be able to upgrade to vaadin 25 in the near term. I normally upgrade pretty quickly when new versions of vaadin com out so this has been annoying.