Menu

#49 JYaml fails when serializing a Byte bean property.

open
nobody
None
5
2009-08-24
2009-08-24
Anonymous
No

With simple bean with one Byte property, setializing fails with the following stacktrace:

org.ho.yaml.exception.ObjectCreationException: Error near line 0: Can't create object of type class java.lang.Byte using default constructor.
at org.ho.yaml.wrapper.AbstractWrapper.createObject(AbstractWrapper.java:59)
at org.ho.yaml.wrapper.AbstractWrapper.createPrototype(AbstractWrapper.java:95)
at org.ho.yaml.wrapper.DefaultBeanWrapper.keys(DefaultBeanWrapper.java:131)
at org.ho.yaml.YamlEncoder.traverseAndCountMap(YamlEncoder.java:155)
at org.ho.yaml.YamlEncoder.traverseAndCount(YamlEncoder.java:144)
at org.ho.yaml.YamlEncoder.traverseAndCountMap(YamlEncoder.java:158)
at org.ho.yaml.YamlEncoder.traverseAndCount(YamlEncoder.java:144)
at org.ho.yaml.YamlEncoder.writeObject(YamlEncoder.java:192)
at org.ho.yaml.YamlConfig.dump(YamlConfig.java:537)
at com.yjamldebug.Application.main(Application.java:17)
Caused by: org.ho.yaml.exception.ObjectCreationException: Error near line 0: Default constructor for class java.lang.Byte is not accessible.
at org.ho.yaml.wrapper.AbstractWrapper.createObject(AbstractWrapper.java:56)
at org.ho.yaml.wrapper.AbstractWrapper.createPrototype(AbstractWrapper.java:95)
at org.ho.yaml.wrapper.DefaultBeanWrapper.keys(DefaultBeanWrapper.java:131)
at org.ho.yaml.YamlEncoder.traverseAndCountMap(YamlEncoder.java:155)
at org.ho.yaml.YamlEncoder.traverseAndCount(YamlEncoder.java:144)
at org.ho.yaml.YamlEncoder.traverseAndCountMap(YamlEncoder.java:158)
at org.ho.yaml.YamlEncoder.traverseAndCount(YamlEncoder.java:144)
at org.ho.yaml.YamlEncoder.writeObject(YamlEncoder.java:192)
at org.ho.yaml.YamlConfig.dump(YamlConfig.java:537)

this can be easily solved by adding Byte.class to the isSimpleType(Class c) method of org.ho.yaml.ReflectionUtil

public static boolean isSimpleType(Class c) {
return c.isPrimitive() || c == String.class || c == Integer.class || c == Long.class || c == Short.class || c == Double.class || c == Float.class || c == Boolean.class || c == Character.class || c == Byte.class;
}

I am not sure if it has to be added on several other places where I've seen some primitive type wrapper's class objects declared. Anyway, the mentioned fix works for me here.

Discussion


Log in to post a comment.