If a serialized JSON stream has an enum type, the deserializer fails. Enums do not have a null constructor so the ReflectionHelper at line 343 fails.
net.sf.sojo.core.ConversionException: Can't create a Bean from class: class com.domain.entity.AddressType
at net.sf.sojo.core.conversion.IterateableMap2BeanConversion.convert(IterateableMap2BeanConversion.java:67)
at net.sf.sojo.core.Converter.convertInternal(Converter.java:183)
at net.sf.sojo.core.Converter$InternalRecursiveConverterExtension.convert(Converter.java:241)
at net.sf.sojo.core.conversion.IterateableMap2BeanConversion.doConvert(IterateableMap2BeanConversion.java:95)
at net.sf.sojo.core.ConversionIterator.iterate(ConversionIterator.java:115)
at net.sf.sojo.core.conversion.IterateableMap2BeanConversion.convert(IterateableMap2BeanConversion.java:77)
at net.sf.sojo.core.Converter.convertInternal(Converter.java:183)
...
Logged In: YES
user_id=1287898
Originator: NO
Hi,
two problems:
1. SOJO convert only JavaBeans. This means, bean must have a constructor with out parameters.
2. SOJO support jdk 1.4. SOJO don't know Enums (Java 5)
Regards
Mario
Logged In: NO
I updated the code to support enums. I don't know the sojo source very well so it may be a bit of a hack. If anyone is interested I can submit a patch.
### Eclipse Workspace Patch 1.0
#P sojo
Index: src/main/java/net/sf/sojo/core/reflect/ReflectionHelper.java
===================================================================
--- src/main/java/net/sf/sojo/core/reflect/ReflectionHelper.java (revision 242)
+++ src/main/java/net/sf/sojo/core/reflect/ReflectionHelper.java (working copy)
@@ -353,7 +353,11 @@
Object lvBeanObject = null;
try {
- lvBeanObject = lvBeanType.newInstance();
+ if (lvBeanType.isEnum()) {
+ lvBeanObject = Enum.valueOf(lvBeanType, (String) pvMap.get("name"));
+ } else {
+ lvBeanObject = lvBeanType.newInstance();
+ }
} catch (InstantiationException e) {
throw new InstantiationException("Can't create a Bean from class: " + lvBeanType);
} catch (IllegalAccessException e) {
Index: src/main/java/net/sf/sojo/core/conversion/ComplexBean2MapConversion.java
===================================================================
--- src/main/java/net/sf/sojo/core/conversion/ComplexBean2MapConversion.java (revision 242)
+++ src/main/java/net/sf/sojo/core/conversion/ComplexBean2MapConversion.java (working copy)
@@ -79,8 +79,11 @@
String lvUniqueId = pvConverter.getUniqueId(pvObject);
lvBeanMap.put(UniqueIdGenerator.UNIQUE_ID_PROPERTY, lvUniqueId);
}
-
+ if (pvObject instanceof Enum) {
+ lvBeanMap.put("name", ((Enum)pvObject).name());
+ }
+
Iterator it = lvGetterMap.entrySet().iterator();
lvBeanMap = (Map) super.iterate(pvObject, lvBeanMap, it, pvConverter);
} catch (Exception e) {