Daniel Lopes created FLINK-37297:
------------------------------------

             Summary: Either type Pojo deserialization fails with NPE
                 Key: FLINK-37297
                 URL: https://issues.apache.org/jira/browse/FLINK-37297
             Project: Flink
          Issue Type: Bug
          Components: API / Core
    Affects Versions: 1.20.0
            Reporter: Daniel Lopes


To replicate:

When running a local test with StreamExecutionEnvironment with generic types 
turned off and using a lombok POJO with four different Either fields.

When these fields are null or containing a Left instance, the POJO fails 
deserialization at this 
[line|https://github.com/apache/flink/blob/9b411b3f1f7f2caae7e653e7630386376e13bcc3/flink-core/src/main/java/org/apache/flink/api/java/typeutils/runtime/EitherSerializer.java#L88-L88]
 of the code where EitherSerializer "always creates a Right value instance", 
thus throwing NullPointerException in this circumstance.

This behavior is not observed when composing/wrapping Either types inside Java 
Records.

Stack trace:
{code:java}
Caused by: java.lang.RuntimeException: Cannot instantiate class.
        at 
org.apache.flink.api.java.typeutils.runtime.PojoSerializer.createInstance(PojoSerializer.java:214)
        at 
org.apache.flink.api.java.typeutils.runtime.PojoSerializer.deserialize(PojoSerializer.java:446)
        at 
org.apache.flink.streaming.runtime.streamrecord.StreamElementSerializer.deserialize(StreamElementSerializer.java:204)
        at 
org.apache.flink.streaming.runtime.streamrecord.StreamElementSerializer.deserialize(StreamElementSerializer.java:44)
        at 
org.apache.flink.runtime.plugable.NonReusingDeserializationDelegate.read(NonReusingDeserializationDelegate.java:53)
        at 
org.apache.flink.runtime.io.network.api.serialization.NonSpanningWrapper.readInto(NonSpanningWrapper.java:337)
        at 
org.apache.flink.runtime.io.network.api.serialization.SpillingAdaptiveSpanningRecordDeserializer.readNonSpanningRecord(SpillingAdaptiveSpanningRecordDeserializer.java:128)
        at 
org.apache.flink.runtime.io.network.api.serialization.SpillingAdaptiveSpanningRecordDeserializer.readNextRecord(SpillingAdaptiveSpanningRecordDeserializer.java:103)
        at 
org.apache.flink.runtime.io.network.api.serialization.SpillingAdaptiveSpanningRecordDeserializer.getNextRecord(SpillingAdaptiveSpanningRecordDeserializer.java:93)
        at 
org.apache.flink.streaming.runtime.io.AbstractStreamTaskNetworkInput.emitNext(AbstractStreamTaskNetworkInput.java:103)
        at 
org.apache.flink.streaming.runtime.io.StreamOneInputProcessor.processInput(StreamOneInputProcessor.java:65)
        at 
org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:638)
        at 
org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMailboxLoop(MailboxProcessor.java:231)
        at 
org.apache.flink.streaming.runtime.tasks.StreamTask.runMailboxLoop(StreamTask.java:973)
        at 
org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:917)
        at 
org.apache.flink.runtime.taskmanager.Task.runWithSystemExitMonitoring(Task.java:970)
        at 
org.apache.flink.runtime.taskmanager.Task.restoreAndInvoke(Task.java:949)
        at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:763)
        at org.apache.flink.runtime.taskmanager.Task.run(Task.java:575)
        at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.NullPointerException
        at java.base/java.util.Objects.requireNonNull(Objects.java:209)
        at org.apache.flink.types.Either$Right.<init>(Either.java:146)
        at org.apache.flink.types.Either.Right(Either.java:46)
        at 
org.apache.flink.api.java.typeutils.runtime.EitherSerializer.createInstance(EitherSerializer.java:89)
        at 
org.apache.flink.api.java.typeutils.runtime.EitherSerializer.createInstance(EitherSerializer.java:38)
        at 
org.apache.flink.api.java.typeutils.runtime.PojoSerializer.initializeFields(PojoSerializer.java:222)
        at 
org.apache.flink.api.java.typeutils.runtime.PojoSerializer.createInstance(PojoSerializer.java:211)
        ... 19 more
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to