Feedback needed: Vaadin Quarkus add-on, Jackson 3 and native builds

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.

:gear: 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.

:jigsaw: 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.

:test_tube: 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.

:question:What We’d Like to Know From You

To assess the real-world impact, we’d appreciate your feedback on the following:

  1. Are you using native builds with Vaadin and Quarkus?
  2. 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)?
  3. If so, could you share a minimal example or a brief description of your setup?

Thanks for helping us in advance.

Quarkus PR regarding Jackson 3 support: WIP: Bump jackson to 3.0.0 by manofthepeace · Pull Request #50473 · quarkusio/quarkus · GitHub

1 Like

Discussion on the Quarkus users channel

1 Like

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 :

<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="com.fasterxml.jackson.core.jackson-annotations"/>
        </exclusions>
    </deployment>
</jboss-deployment-structure>

Seems to work. Don’t know yet if it might cause other problems

1 Like

You can follow this Issue with JacksonUtils when deploying in Wildfly 31 or JBoss 8 · Issue #8152 · vaadin/platform · GitHub

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.

 <jboss-deployment-structure>
   <deployment>
     <exclude-subsystems>
       <subsystem name="jaxrs" />
     </exclude-subsystems>
   </deployment>
 </jboss-deployment-structure>

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.

It looks like Wildfly 39 (currently in beta) will upgrade to Jackson 2.20 that should be compatible with Vaadin 25/Jackson 3

Final 39.0.0 was just released some hours ago :saluting_face:

1 Like

yeah I was looking at wildfly 39 to see if maybe it updated to jackson 3, but yes, you are right 2.20 only :(

Technically Jackson 2 and 3 can be used at the same time - just make sure the correct / latest annotation jar is used.

interesting I’ll revisit just excluding the jackson-annotations only.1

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.

If wildfly ships Jackson annotations 2.20, Vaadin 25 should work fine and there will be no conflict between Jackson 3 and 2

1 Like
2 Likes

I ran Vaadin CDI tests with Wildfly 39 after removing the Jackson/Jaxrs exclusion and could not see the incompatibility error anymore.