in src/main/java/org/apache/sling/event/dea/impl/DistributedEventSender.java [138:178]
private Event readEvent(final Resource eventResource) {
try {
final ValueMap vm = ResourceHelper.getValueMap(eventResource);
final String topic = vm.get(EventConstants.EVENT_TOPIC, String.class);
if ( topic == null ) {
// no topic should never happen as we check the resource type before
logger.error("Unable to read distributed event from " + eventResource.getPath() + " : no topic property available.");
} else {
final Map<String, Object> properties = ResourceHelper.cloneValueMap(vm);
// only send event if there are no read errors, otherwise discard it
@SuppressWarnings("unchecked")
final List<Exception> readErrorList = (List<Exception>) properties.remove(ResourceHelper.PROPERTY_MARKER_READ_ERROR_LIST);
if ( readErrorList == null ) {
properties.remove(EventConstants.EVENT_TOPIC);
properties.remove(DEAConstants.PROPERTY_DISTRIBUTE);
final Object oldRT = properties.remove("event.dea." + ResourceResolver.PROPERTY_RESOURCE_TYPE);
if ( oldRT != null ) {
properties.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, oldRT);
} else {
properties.remove(ResourceResolver.PROPERTY_RESOURCE_TYPE);
}
try {
final Event event = new Event(topic, properties);
return event;
} catch (final IllegalArgumentException iae) {
// this exception occurs if the topic is not correct (it should never happen,
// but you never know)
logger.error("Unable to read event: " + iae.getMessage(), iae);
}
} else {
for(final Exception e : readErrorList) {
logger.warn("Unable to read distributed event from " + eventResource.getPath(), e);
}
}
}
} catch (final InstantiationException ie) {
// something happened with the resource in the meantime
this.ignoreException(ie);
}
return null;
}