Hi Arvid,
Thanks for replying. But I have all the getters and setters in the example.
As you can see, the val2 field is commented and hence its getter and setter
are commented out. When restoring from a savepoint, I uncomment these and
get errors.
If I remove reference to the enum RuleType from the Rule class, then
everything works fine. So it's definitely a enum issue.
What I am looking for is, why doesn't flink recognize enum for POJO
serializer ?

Thanks,
Tejas


On Tue, May 10, 2022 at 2:06 AM Arvid Heise <ar...@apache.org> wrote:

> Is this your whole Rule class? If so, then the issue is not the type of
> the field but that you haven't added a setter and getter for it.
>
> On Tue, May 10, 2022 at 7:23 AM Tejas B <tejasub1...@gmail.com> wrote:
>
>> Hi,
>> I am trying to get flink schema evolution to work for me using POJO
>> serializer. But I found out that if an enum is present in the POJO then the
>> POJO serializer is not used. Example of my POJO is as follows :
>>
>> public class Rule {
>> String id;int val;
>> RuleType ruleType;//Newly added field//int val2 = 0;
>> public Rule() {}
>> public Rule(String id, int val, RuleType ruleType) {
>>     this.id = id;
>>     this.val = val;
>>     this.ruleType = ruleType;
>>     //this.val2 = val2;
>> }
>> public String getId() {
>>     return id;
>> }
>> public void setId(String id) {
>>     this.id = id;
>> }
>> public int getVal() {
>>     return val;
>> }
>> public void setVal(int val) {
>>     this.val = val;
>> }
>> public RuleType getRuleType() {
>>     return ruleType;
>> }
>> public void setRuleType(RuleType ruleType) {
>>     this.ruleType = ruleType;
>> }
>> //public int getVal2() {//    return val2;//}
>> //public void setVal2(int val2) {//    this.val2 = val2;//}
>> @Overridepublic boolean equals(Object o) {
>>     if (this == o) return true;
>>     if (o == null || getClass() != o.getClass()) return false;
>>     Rule rule = (Rule) o;
>>     return val == rule.val && id.equals(rule.id) && ruleType == 
>> rule.ruleType;
>> }
>> @Overridepublic int hashCode() {
>>     return Objects.hash(id, val, ruleType);
>> }
>> @Overridepublic String toString() {
>>     return "Rule{" +
>>             "name='" + id + '\'' +
>>             ", val=" + val +
>>             ", ruleType=" + ruleType +
>>             '}';
>> }
>>
>> }
>>
>> RuleType is an enum class as follows :
>>
>> public enum RuleType {
>>     X,
>>     Y,
>>     Z
>>
>> }
>>
>> Now for the Rule class the schema evolution (Adding a new field called
>> val2), works only if I write a custom typeFactory for this class.
>>
>> Is there a way that I can write typeFactory for the enum class ? Why does
>> the flink not recognize enum in a POJO class ?
>>
>

Reply via email to