I am trying to load an EnumSet using YAML, and get an exception "Cannot create property=setOfDays for JavaBean...". Please can you tell me what am I doing something wrong? Are EnumSets not supported?
import com....exploration.Day;
public class YamlEnumSetTest {
Day day;
EnumSet<Day> setOfDays;
public Day getDay() {
return this.day;
}
public void setDay(Day day) {
this.day = day;
}
public EnumSet<Day> getSetOfDays() {
return this.setOfDays;
}
public void setSetOfDays(EnumSet<Day> setOfDays) {
this.setOfDays = setOfDays;
}
public static void main(String[] args) {
YamlEnumSetTest yEST = new YamlEnumSetTest();
yEST.day = Day.SUNDAY;
yEST.setOfDays = EnumSet.of(Day.MONDAY, Day.WEDNESDAY, Day.FRIDAY);
System.out.println(yEST.day + " : " + yEST.setOfDays);
Yaml yaml = new Yaml();
String output = yaml.dump(yEST);
System.out.println(output);
YamlEnumSetTest newYEST = (YamlEnumSetTest) yaml.load(output);
System.out.println(newYEST.day + " : " + newYEST.setOfDays);
}
}
SUNDAY : [MONDAY, WEDNESDAY, FRIDAY]
!!com....exploration.YamlEnumSetTest
day: SUNDAY
setOfDays: !!set {!!com....exploration.Day 'MONDAY': null,
!!com....exploration.Day 'WEDNESDAY': null, !!com....exploration.Day 'FRIDAY': null}
Exception in thread "main" Cannot create property=setOfDays for JavaBean=com....exploration.YamlEnumSetTest@782830e
in 'string', line 1, column 1:
!!com.... ...
^
argument type mismatch
in 'string', line 3, column 12:
setOfDays: !!set {!!com.... ...
^
at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.constructJavaBean2ndStep(Constructor.java:312)
at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.construct(Constructor.java:189)
at org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.construct(Constructor.java:345)
at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:182)
at org.yaml.snakeyaml.constructor.BaseConstructor.constructDocument(BaseConstructor.java:141)
at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:127)
at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:450)
at org.yaml.snakeyaml.Yaml.load(Yaml.java:369)
at com.cyphergenomics.qa.framework.exploration.YamlEnumSetTest.main(YamlEnumSetTest.java:34) <-- The yaml.load(output) line
Caused by: java.lang.IllegalArgumentException: argument type mismatch
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:497)
at org.yaml.snakeyaml.introspector.MethodProperty.set(MethodProperty.java:48)
at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.constructJavaBean2ndStep(Constructor.java:310)
... 8 more
Thanks in advance for your help.