This is an automated email from the ASF dual-hosted git repository.
tallison pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tika.git
The following commit(s) were added to refs/heads/main by this push:
new 9b211c5e11 TIKA-4700 -- this adds a few more components to the
activator and service loader for osgi. (#2751)
9b211c5e11 is described below
commit 9b211c5e110782357e5b0b84ceda274c7e1919ac
Author: Tim Allison <[email protected]>
AuthorDate: Thu Apr 9 07:37:01 2026 -0400
TIKA-4700 -- this adds a few more components to the activator and service
loader for osgi. (#2751)
---
.../java/org/apache/tika/config/ServiceLoader.java | 10 ++++---
.../java/org/apache/tika/config/TikaActivator.java | 31 +++++++++++++++-------
2 files changed, 28 insertions(+), 13 deletions(-)
diff --git a/tika-core/src/main/java/org/apache/tika/config/ServiceLoader.java
b/tika-core/src/main/java/org/apache/tika/config/ServiceLoader.java
index 86cdd97711..ad2c616f0a 100644
--- a/tika-core/src/main/java/org/apache/tika/config/ServiceLoader.java
+++ b/tika-core/src/main/java/org/apache/tika/config/ServiceLoader.java
@@ -37,22 +37,26 @@ import java.util.regex.Pattern;
import aQute.bnd.annotation.spi.ServiceConsumer;
import org.apache.tika.detect.Detector;
+import org.apache.tika.detect.EncodingDetector;
import org.apache.tika.exception.TikaConfigException;
+import org.apache.tika.language.detect.LanguageDetector;
+import org.apache.tika.metadata.filter.MetadataFilter;
import org.apache.tika.parser.Parser;
import org.apache.tika.utils.ServiceLoaderUtils;
/**
* Internal utility class that Tika uses to look up service providers.
* Supports both static service loading using the {@link ServiceLoader}
mechanism (and via
- * <a
href="https://docs.osgi.org/specification/osgi.cmpn/7.0.0/service.loader.html">OSGi
Service Loader Mediator</a>)
+ * <a
href="https://docs.osgi.org/specification/osgi.cmpn/7.0.0/service.loader.html">OSGi
Service Loader Mediator</a>)
* as well as dynamic loading via OSGi service tracking (from the {@link
TikaActivator} class).
- * However the Tika parsers don't register as regular OSGi services,
- * so the dynamic loading is only used for detectors and parser services from
non-Tika bundles.
*
* @since Apache Tika 0.9
*/
@ServiceConsumer(Parser.class)
@ServiceConsumer(Detector.class)
+@ServiceConsumer(EncodingDetector.class)
+@ServiceConsumer(LanguageDetector.class)
+@ServiceConsumer(MetadataFilter.class)
public class ServiceLoader {
/**
diff --git a/tika-core/src/main/java/org/apache/tika/config/TikaActivator.java
b/tika-core/src/main/java/org/apache/tika/config/TikaActivator.java
index e076f1c2dd..271a1683fb 100644
--- a/tika-core/src/main/java/org/apache/tika/config/TikaActivator.java
+++ b/tika-core/src/main/java/org/apache/tika/config/TikaActivator.java
@@ -16,6 +16,9 @@
*/
package org.apache.tika.config;
+import java.util.ArrayList;
+import java.util.List;
+
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
@@ -24,6 +27,9 @@ import org.osgi.util.tracker.ServiceTracker;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
import org.apache.tika.detect.Detector;
+import org.apache.tika.detect.EncodingDetector;
+import org.apache.tika.language.detect.LanguageDetector;
+import org.apache.tika.metadata.filter.MetadataFilter;
import org.apache.tika.parser.Parser;
/**
@@ -39,26 +45,31 @@ import org.apache.tika.parser.Parser;
*/
public class TikaActivator implements BundleActivator,
ServiceTrackerCustomizer {
- private ServiceTracker detectorTracker;
-
- private ServiceTracker parserTracker;
+ private final List<ServiceTracker> trackers = new ArrayList<>();
private BundleContext bundleContext;
- //-----------------------------------------------------< BundleActivator >
public void start(final BundleContext context) throws Exception {
bundleContext = context;
- detectorTracker = new ServiceTracker(context,
Detector.class.getName(), this);
- parserTracker = new ServiceTracker(context, Parser.class.getName(),
this);
+ trackService(context, Detector.class);
+ trackService(context, Parser.class);
+ trackService(context, EncodingDetector.class);
+ trackService(context, LanguageDetector.class);
+ trackService(context, MetadataFilter.class);
+ }
- detectorTracker.open();
- parserTracker.open();
+ private void trackService(BundleContext context, Class<?> iface) {
+ ServiceTracker tracker = new ServiceTracker(context, iface.getName(),
this);
+ trackers.add(tracker);
+ tracker.open();
}
public void stop(BundleContext context) throws Exception {
- parserTracker.close();
- detectorTracker.close();
+ for (ServiceTracker tracker : trackers) {
+ tracker.close();
+ }
+ trackers.clear();
}
public Object addingService(ServiceReference reference) {