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