in src/main/java/org/apache/sling/event/impl/support/ResourceHelper.java [172:241]
public static Map<String, Object> cloneValueMap(final ValueMap vm) throws InstantiationException {
List<Exception> hasReadError = null;
try {
final Map<String, Object> result = new HashMap<>(vm);
for(final Map.Entry<String, Object> entry : result.entrySet()) {
if ( entry.getKey().equals(PROPERTY_SCHEDULE_INFO) ) {
final String[] infoArray = vm.get(entry.getKey(), String[].class);
if ( infoArray == null || infoArray.length == 0 ) {
if ( hasReadError == null ) {
hasReadError = new ArrayList<>();
}
hasReadError.add(new Exception("Unable to deserialize property '" + entry.getKey() + "' : " + entry.getValue()));
} else {
final List<ScheduleInfo> infos = new ArrayList<>();
for(final String i : infoArray) {
final ScheduleInfoImpl info = ScheduleInfoImpl.deserialize(i);
if ( info != null ) {
infos.add(info);
}
}
if ( infos.size() < infoArray.length ) {
if ( hasReadError == null ) {
hasReadError = new ArrayList<>();
}
hasReadError.add(new Exception("Unable to deserialize property '" + entry.getKey() + "' : " + Arrays.toString(infoArray)));
} else {
entry.setValue(infos);
}
}
}
if ( entry.getValue() instanceof InputStream ) {
final Object value = vm.get(entry.getKey(), Serializable.class);
if ( value != null ) {
entry.setValue(value);
} else {
if ( hasReadError == null ) {
hasReadError = new ArrayList<>();
}
// let's find out which class might be missing
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream((InputStream)entry.getValue());
ois.readObject();
hasReadError.add(new Exception("Unable to deserialize property '" + entry.getKey() + "'"));
} catch (final ClassNotFoundException cnfe) {
hasReadError.add(new Exception("Unable to deserialize property '" + entry.getKey() + "'", cnfe));
} catch (final IOException ioe) {
hasReadError.add(new RuntimeException("Unable to deserialize property '" + entry.getKey() + "'", ioe));
} finally {
if ( ois != null ) {
try {
ois.close();
} catch (IOException ignore) {
// ignore
}
}
}
}
}
}
if ( hasReadError != null ) {
result.put(PROPERTY_MARKER_READ_ERROR_LIST, hasReadError);
}
return result;
} catch ( final IllegalArgumentException iae) {
// the JCR implementation might throw an IAE if something goes wrong
throw (InstantiationException)new InstantiationException(iae.getMessage()).initCause(iae);
}
}