Uploaded image for project: 'Flink'
  1. Flink
  2. FLINK-5070

Unable to use Scala's BeanProperty with classes

    XMLWordPrintableJSON

Details

    Description

      When using Scala class with with property (both var and val) annotated as BeanProperty, throws an exception java.lang.IllegalStateException: Detected more than one getter.

      The simple code which follows throws that exception:

      class SomeClass(@BeanProperty var prop: Int)
      
      object SampleBeanProperty {
          def main(args: Array[String]): Unit = {
              val env = StreamExecutionEnvironment.createLocalEnvironment()
      
              // Create a DataSet from a list of elements
              env.fromElements(1,2)
                  .map(new SomeClass(_))
                  .print
      
              env.execute()
          }
      }
      

      Full exception:

      Exception in thread "main" java.lang.IllegalStateException: Detected more than one setter
      	at org.apache.flink.api.java.typeutils.TypeExtractor.isValidPojoField(TypeExtractor.java:1646)
      	at org.apache.flink.api.java.typeutils.TypeExtractor.analyzePojo(TypeExtractor.java:1692)
      	at org.apache.flink.api.java.typeutils.TypeExtractor.privateGetForClass(TypeExtractor.java:1580)
      	at org.apache.flink.api.java.typeutils.TypeExtractor.privateGetForClass(TypeExtractor.java:1479)
      	at org.apache.flink.api.java.typeutils.TypeExtractor.createTypeInfoWithTypeHierarchy(TypeExtractor.java:737)
      	at org.apache.flink.api.java.typeutils.TypeExtractor.privateCreateTypeInfo(TypeExtractor.java:543)
      	at org.apache.flink.api.java.typeutils.TypeExtractor.createTypeInfo(TypeExtractor.java:497)
      	at org.apache.flink.api.java.typeutils.TypeExtractor.createTypeInfo(TypeExtractor.java:493)
      	at SampleBeanProperty$.main(SampleBeanProperty.scala:18)
      	at SampleBeanProperty.main(SampleBeanProperty.scala)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
      

      If the class is changed into case class, code with BeanProperty works fine.

      Attachments

        Issue Links

          Activity

            People

              twalthr Timo Walther
              jsnowacki Jakub Nowacki
              Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: