You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "Robert Metzger (JIRA)" <ji...@apache.org> on 2019/02/28 12:54:00 UTC

[jira] [Updated] (FLINK-10296) TypeExtractor only validates/matches exact POJO classes

     [ https://issues.apache.org/jira/browse/FLINK-10296?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Robert Metzger updated FLINK-10296:
-----------------------------------
    Component/s:     (was: Core)
                 API / Type Serialization System

> TypeExtractor only validates/matches exact POJO classes
> -------------------------------------------------------
>
>                 Key: FLINK-10296
>                 URL: https://issues.apache.org/jira/browse/FLINK-10296
>             Project: Flink
>          Issue Type: Bug
>          Components: API / Type Serialization System
>    Affects Versions: 1.5.1, 1.6.0
>            Reporter: James Morgan
>            Priority: Minor
>         Attachments: PojoTest.java
>
>
> I have a workflow that processes a stream of objects that implement an
>  interface.  The primary implementation was not a POJO and worked fine.
>  When I added an implementation that was a POJO, the workflow fails with
>  an error of Input mismatch; namely our POJO does not match the interface.
> The exception is thrown in TypeExtractor#validateInfo when the type it
>  checks is an instanceof PojoTypeInfo (line 1456).  When the object is
>  _not_ a POJO, it is GenericTypeInfo (line 1476) and passes this validation.
>  The difference between these two handling blocks is the POJO test is
>  testing that the typeInfo's type class is _the same as_ the class of the
>  type desired by the next step in the workflow.  The Generic block tests
>  that the class of the type _is assignable from_ the typeInfo's type class.
> Attached is a JUnit5 test that illustrates the issue.  The testPojo()
>  test will fail as written and indicates the mismatch of FooPojo and Foo.
> I believe that changing the block for the PojoTypeInfo to act like the
>  GenericTypeInfo block would fix this but I don't know if there is a
>  specific reason to treat POJOs differently here.  (For example, if the
>  Foo array in the test is changed to FooPojo[], then there is a compile
>  time argument mismatch: TestMapFunction cannot be converted to
>  MapFunction<FooPojo,R>.)
> Workarounds:
>  1. Avoid POJOs when using interfaces as part of the steps of the workflow.
> 2. Modify the map function to be a generic class with T extends Foo:
>     TestMapFunction<T extends Foo> implements MapFunction<T, String>



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)