Skip to content

Commit 3b62983

Browse files
committed
fix #133
1 parent 336df6a commit 3b62983

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

nitrite/src/main/java/org/dizitart/no2/mapper/AbstractMapper.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ public <T> Document asDocument(T object) {
6868
public <T> T asObject(Document document, Class<T> type) {
6969
if (Mappable.class.isAssignableFrom(type)) {
7070
T item = newInstance(type);
71-
((Mappable) item).read(this, document);
71+
if (item != null) {
72+
((Mappable) item).read(this, document);
73+
}
7274
return item;
7375
}
7476
return asObjectInternal(document, type);

nitrite/src/main/java/org/dizitart/no2/util/ObjectUtils.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@
2727
import org.dizitart.no2.exceptions.NotIdentifiableException;
2828
import org.dizitart.no2.mapper.NitriteMapper;
2929
import org.dizitart.no2.objects.*;
30+
import org.objenesis.Objenesis;
3031
import org.objenesis.ObjenesisStd;
32+
import org.objenesis.instantiator.ObjectInstantiator;
3133

3234
import java.lang.reflect.Field;
3335
import java.util.*;
@@ -36,13 +38,9 @@
3638
import static org.dizitart.no2.exceptions.ErrorCodes.*;
3739
import static org.dizitart.no2.exceptions.ErrorMessage.*;
3840
import static org.dizitart.no2.objects.filters.ObjectFilters.eq;
39-
import static org.dizitart.no2.util.ReflectionUtils.findAnnotations;
40-
import static org.dizitart.no2.util.ReflectionUtils.getField;
41-
import static org.dizitart.no2.util.ReflectionUtils.getFieldsUpto;
41+
import static org.dizitart.no2.util.ReflectionUtils.*;
4242
import static org.dizitart.no2.util.StringUtils.isNullOrEmpty;
43-
import static org.dizitart.no2.util.ValidationUtils.notEmpty;
44-
import static org.dizitart.no2.util.ValidationUtils.notNull;
45-
import static org.dizitart.no2.util.ValidationUtils.validateObjectIndexField;
43+
import static org.dizitart.no2.util.ValidationUtils.*;
4644

4745
/**
4846
* A utility class for {@link Object}.
@@ -53,6 +51,9 @@
5351
@UtilityClass
5452
@Slf4j
5553
public class ObjectUtils {
54+
private static Map<String, ObjectInstantiator> constructorCache = new HashMap<>();
55+
private static Objenesis objenesis = new ObjenesisStd();
56+
5657
/**
5758
* Generates the name of an {@link org.dizitart.no2.objects.ObjectRepository}.
5859
*
@@ -215,11 +216,20 @@ public static boolean isKeyedObjectStore(String collectionName) {
215216
}
216217
}
217218

219+
@SuppressWarnings("unchecked")
218220
public static <T> T newInstance(Class<T> type) {
219221
try {
220-
return type.newInstance();
222+
String clazz = type.getName();
223+
ObjectInstantiator instantiator = constructorCache.get(clazz);
224+
if (instantiator == null) {
225+
instantiator = objenesis.getInstantiatorOf(type);
226+
constructorCache.put(clazz, instantiator);
227+
}
228+
229+
return (T) instantiator.newInstance();
221230
} catch (Exception e) {
222-
return new ObjenesisStd().newInstance(type);
231+
log.error("Error while creating instance of " + type.getName(), e);
232+
return null;
223233
}
224234
}
225235

0 commit comments

Comments
 (0)