public Map extractMetadata()

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;
    }