A potential breaking change would be the case when Java 8 support module hasn't 
been registered and Jackson seems to serialize and de-serialize the objects 
successfully, but with a obscure JSON structure.

Jackson 2.12 introduced a solution to prevent this from happening for Java 8 
date/time types. (Jackson change: 
https://github.com/FasterXML/jackson-databind/issues/2683)
Jackson 2.12 was first used in Pulsar 2.8.0 (Jackson upgrade 2.11 -> 2.12 in 
https://github.com/apache/pulsar/pull/10782).

If you try to use Java 8 date/time types with Jackson, you will get this 
exception unless the Java 8 support modules are registered:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time 
type `java.time.Instant` not supported by default: add Module 
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling

An example where Jackson doesn't fail at serialization time, is the usage of 
java.util.Optional . However, the value doesn't get serialized at all and 
deserialization fails. 

The risk of this being a breaking change is low since there doesn't seem to be 
cases where serialization and de-serialization would work without the Java 8 
support modules using a bad JSON structure.


> Context question since I'm not familiar with functions: How does a function
> author use Jackson provided by Pulsar? Why does pulsar provide Jackson to
> function?

The Pulsar Functions will use JSON serialization/deserialization by default. 
(documented in https://pulsar.apache.org/docs/2.10.x/functions-develop/#serde 
). The runtime uses Jackson for this purpose. 

-Lari

On 2023/01/17 07:01:13 Asaf Mesika wrote:
> Can the scenarios of breaking changes for users be described in the PIP if
> they exist? If this is a breaking change, it might be a good thing to point
> it out in the PIP and in the release notes ("If you did this, then perhaps
> you want to do that").
> 
> Context question since I'm not familiar with functions: How does a function
> author use Jackson provided by Pulsar? Why does pulsar provide Jackson to
> function?
> 
> 
> On Mon, Jan 16, 2023 at 12:12 PM Lari Hotari <lhot...@apache.org> wrote:
> 
> > I created PIP-243, https://github.com/apache/pulsar/issues/19243 . Since
> > this is already discussed in this thread, I'll open it directly for voting.
> >
> > -Lari
> >
> > On 2023/01/09 11:05:35 Lari Hotari wrote:
> > > Hi all,
> > >
> > > Jackson has a separate Java 8 support modules for adding support for
> > proper serialization and deserialization of new classes that were added in
> > Java 8 (Java 8 was released in 2014).
> > >
> > > These Jackson Java 8 support modules haven't been used in the Pulsar
> > code base. This is a pity. This causes a lot of pain when using Java Time
> > classes in Pulsar applications or Pulsar Functions. There are ways to get
> > the classes working for applications, but the documentation is missing. It
> > would make things easier if the Java 8 support modules for Jackson would be
> > included and registered by default.
> > >
> > > I have created a PR to register Jackson Java 8 support modules by
> > default for all Pulsar components. The PR is
> > https://github.com/apache/pulsar/pull/19161 .
> > >
> > > Please review and provide feedback. Do we need a PIP for this change?
> > >
> > > -Lari
> > >
> >
> 

Reply via email to