in core/src/main/java/org/apache/sling/cms/core/internal/FileMetadataExtractorImpl.java [127:155]
public Map<String, Object> extractMetadata(Resource resource)
throws IOException, SAXException, TikaException, RepositoryException, LoginException {
log.info("Extracting metadata from {}", resource.getPath());
Map<String, Object> properties = new HashMap<>();
try (InputStream is = resource.adaptTo(InputStream.class)) {
Parser parser = new AutoDetectParser();
BodyContentHandler handler = new BodyContentHandler();
Metadata md = new Metadata();
ParseContext context = new ParseContext();
try {
parser.parse(is, handler, md, context);
} catch (SAXException se) {
// unfortunately, we can't use instanceof to check as the class is not exported
if ("WriteLimitReachedException".equals(se.getClass().getSimpleName())) { // NOSONAR
log.info("Write limit reached for {}", resource.getPath());
} else {
throw se;
}
}
try (ResourceResolver adminResolver = resolverFactory.getAdministrativeResourceResolver(null)) {
NamespaceRegistry registry = adminResolver.adaptTo(Session.class).getWorkspace().getNamespaceRegistry();
for (String name : md.names()) {
putMetadata(properties, name, md, registry);
}
}
}
return properties;
}