private static List loadCoreProviders()

in tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerProcess.java [346:440]


    private static List<ResourceProvider> loadCoreProviders(TikaServerConfig tikaServerConfig, ServerStatus serverStatus) throws TikaException, IOException, SAXException {
        List<ResourceProvider> resourceProviders = new ArrayList<>();
        boolean addAsyncResource = false;
        boolean addPipesResource = false;
        if (tikaServerConfig
                .getEndpoints()
                .size() == 0) {
            resourceProviders.add(new SingletonResourceProvider(new MetadataResource()));
            resourceProviders.add(new SingletonResourceProvider(new RecursiveMetadataResource()));
            resourceProviders.add(new SingletonResourceProvider(new DetectorResource(serverStatus)));
            resourceProviders.add(new SingletonResourceProvider(new LanguageResource()));
            resourceProviders.add(new SingletonResourceProvider(new TranslateResource(serverStatus, tikaServerConfig.getTaskTimeoutMillis())));
            resourceProviders.add(new SingletonResourceProvider(new TikaResource()));
            resourceProviders.add(new SingletonResourceProvider(new UnpackerResource()));
            resourceProviders.add(new SingletonResourceProvider(new TikaMimeTypes()));
            resourceProviders.add(new SingletonResourceProvider(new TikaDetectors()));
            resourceProviders.add(new SingletonResourceProvider(new TikaParsers()));
            resourceProviders.add(new SingletonResourceProvider(new TikaVersion()));
            if (tikaServerConfig.isEnableUnsecureFeatures()) {
                //check to make sure there are both fetchers and emitters
                //specified.  It is possible that users may only specify fetchers
                //for legacy endpoints.
                if (tikaServerConfig
                        .getSupportedFetchers()
                        .size() > 0 && tikaServerConfig
                        .getSupportedEmitters()
                        .size() > 0) {
                    addAsyncResource = true;
                    addPipesResource = true;
                }
                resourceProviders.add(new SingletonResourceProvider(new TikaServerStatus(serverStatus)));
            }
        } else {
            for (String endPoint : tikaServerConfig.getEndpoints()) {
                if ("meta".equals(endPoint)) {
                    resourceProviders.add(new SingletonResourceProvider(new MetadataResource()));
                } else if ("rmeta".equals(endPoint)) {
                    resourceProviders.add(new SingletonResourceProvider(new RecursiveMetadataResource()));
                } else if ("detect".equals(endPoint)) {
                    resourceProviders.add(new SingletonResourceProvider(new DetectorResource(serverStatus)));
                } else if ("language".equals(endPoint)) {
                    resourceProviders.add(new SingletonResourceProvider(new LanguageResource()));
                } else if ("translate".equals(endPoint)) {
                    resourceProviders.add(new SingletonResourceProvider(new TranslateResource(serverStatus, tikaServerConfig.getTaskTimeoutMillis())));
                } else if ("tika".equals(endPoint)) {
                    resourceProviders.add(new SingletonResourceProvider(new TikaResource()));
                } else if ("unpack".equals(endPoint)) {
                    resourceProviders.add(new SingletonResourceProvider(new UnpackerResource()));
                } else if ("mime".equals(endPoint)) {
                    resourceProviders.add(new SingletonResourceProvider(new TikaMimeTypes()));
                } else if ("detectors".equals(endPoint)) {
                    resourceProviders.add(new SingletonResourceProvider(new TikaDetectors()));
                } else if ("parsers".equals(endPoint)) {
                    resourceProviders.add(new SingletonResourceProvider(new TikaParsers()));
                } else if ("version".equals(endPoint)) {
                    resourceProviders.add(new SingletonResourceProvider(new TikaVersion()));
                } else if ("pipes".equals(endPoint)) {
                    addPipesResource = true;
                } else if ("async".equals(endPoint)) {
                    addAsyncResource = true;
                } else if ("status".equals(endPoint)) {
                    resourceProviders.add(new SingletonResourceProvider(new TikaServerStatus(serverStatus)));
                }
            }
        }

        if (addAsyncResource) {
            final AsyncResource localAsyncResource = new AsyncResource(tikaServerConfig.getConfigPath(), tikaServerConfig.getSupportedFetchers());
            Runtime
                    .getRuntime()
                    .addShutdownHook(new Thread(() -> {
                        try {
                            localAsyncResource.shutdownNow();
                        } catch (Exception e) {
                            LOG.warn("problem shutting down local async resource", e);
                        }
                    }));
            resourceProviders.add(new SingletonResourceProvider(localAsyncResource));
        }
        if (addPipesResource) {
            final PipesResource localPipesResource = new PipesResource(tikaServerConfig.getConfigPath());
            Runtime
                    .getRuntime()
                    .addShutdownHook(new Thread(() -> {
                        try {
                            localPipesResource.close();
                        } catch (Exception e) {
                            LOG.warn("exception closing local pipes resource", e);
                        }
                    }));
            resourceProviders.add(new SingletonResourceProvider(localPipesResource));
        }
        resourceProviders.addAll(loadResourceServices(serverStatus));
        return resourceProviders;
    }