Hey Brian,

I can't remember exactly, I think that's exactly what I did in point #1 but
forgot to mention that I also decorated with
@DefaultSchema(JavaBeanSchema.class) . So to be clear, I used both
@DefaultSchema(JavaBeanSchema.class) and
@SchemaCaseFormat(CaseFormat.UPPER_UNDERSCORE) and got null getters/setters.

I can write up a small project to illustrate the scenarios and confirm
exactly how things work.

On Tue, Sep 28, 2021 at 2:00 PM Brian Hulette <bhule...@google.com> wrote:

> > 1. Decorate my class with @SchemaCaseFormat(CaseFormat.UPPER_UNDERSCORE)
> and have my fields/getters/setters follow camelCase naming. Unfortunately,
> JavaBeanUtils.validateJavaBean sees all the setters as NULL. I'm not sure
> why. I could investigate after I deliver a few things.
>
> I think this is what you need, your use-case sounds like the exact case
> that SchemaCaseFormat was created for. Did you try using
> @SchemaCaseFormat(CaseFormat.UPPER_UNDERSCORE) in conjunction with
> camel-cased getters/setters, i.e.:
>
> @DefaultSchema(JavaBeanSchema.class)
> @SchemaCaseFormat(CaseFormat.UPPER_UNDERSCORE)
> public class Foo {
>   public String getActionId(){..}
>   private void  setActionId(String actionId){..}
> }
>
> Brian
>
> On Sun, Sep 12, 2021 at 9:16 AM Cristian Constantinescu <zei...@gmail.com>
> wrote:
>
>> Hey all,
>>
>> I might have found a bug in the way we create schemas from Java Beans.
>>
>> My schema has to have uppercase field names.
>>
>> So I have something like :
>>
>> @DefaultSchema(JavaBeanSchema.class)
>> public class Foo {
>> private String ACTION_ID;
>>
>> private String getACTION_ID(){..}
>> private void  setACTION_ID(String ACTION_ID){..}
>> }
>>
>> Problem is that once the schema is parsed, all the fields have their
>> first letter lowercased. I think it's because of the
>> ReflectUtils.stripPrefix method.
>>
>> As workarounds, I have tried:
>>
>> 1. Decorate my class with @SchemaCaseFormat(CaseFormat.UPPER_UNDERSCORE)
>> and have my fields/getters/setters follow camelCase naming. Unfortunately,
>> JavaBeanUtils.validateJavaBean sees all the setters as NULL. I'm not sure
>> why. I could investigate after I deliver a few things.
>>
>> 2. Use AutoValue. Unfortunately with Flink, I get things like this:
>> Failed to access class package.AutoValue_Foo$Builder from class
>> package.SchemaUserTypeCreator@SchemaCodeGen$someRandomString
>> package.AutoValue_Foo$Builder is in unnamed module of loader 'app';
>> package.SchemaUserTypeCreator@SchemaCodeGen$someRandomString is in
>> unnamed module of loader org.apache.flink.util.ChildFirstClassLoader . I
>> would love for this to work. Very sad it doesn't.
>>
>> 3. Use Pojos with @DefaultSchema(JavaFieldSchema.class), this seems to
>> work as expected, not 100% sure yet.
>>
>> If this is indeed a bug, could someone create a Jira and I could have a
>> look into it in the near future.
>>
>> Thanks,
>> Cristian
>>
>

Reply via email to