Under unfavorable circumstances method getMungedConstructor in Sun14ReflectionProvider class might return null, what leads to NullPointerException in method newInstance. It occurs when GC has cleared the WeakReference. See stack trace below:
...
Caused by: java.lang.NullPointerException
at com.thoughtworks.xstream.converters.reflection.Sun14ReflectionProvider.newInstance(Sun14ReflectionProvider.java:74)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.instantiateNewInstance(AbstractReflectionConverter.java:2
79)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:149)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:81)
... 49 more
This happens as well with current SVN release (rev 1488)
Proposed fix:
private Constructor getMungedConstructor(Class type) throws NoSuchMethodException {
final WeakReference ref = (WeakReference)constructorCache.get(type);
Constructor ctor = null;
if(ref != null) {
ctor = (Constructor) ref.get();
}
if (ctor == null) {
ctor = reflectionFactory.newConstructorForSerialization(type, Object.class.getDeclaredConstructor(new Class[0]));
constructorCache.put(type, new WeakReference(ctor));
}
return ctor;
}