[ 
https://issues.apache.org/jira/browse/TIKA-3418?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17373644#comment-17373644
 ] 

ASF GitHub Bot commented on TIKA-3418:
--------------------------------------

tballison commented on a change in pull request #446:
URL: https://github.com/apache/tika/pull/446#discussion_r663133878



##########
File path: tika-core/src/main/java/org/apache/tika/config/TikaActivator.java
##########
@@ -51,14 +53,17 @@ public void start(final BundleContext context) throws 
Exception {
 
         detectorTracker = new ServiceTracker(context, 
Detector.class.getName(), this);
         parserTracker = new ServiceTracker(context, Parser.class.getName(), 
this);
+        zipDetectorTracker = new ServiceTracker(context, 
"org.apache.tika.detect.zip.ZipContainerDetector", this);

Review comment:
       Do we need to do this for EncodingDetector as well to ensure that all 
encoding detectors are dynamically loaded?  Obv, separate pull request...but 
I'm curious if that is failing in OSGi.

##########
File path: 
tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-zip-commons/src/main/java/org/apache/tika/detect/zip/DefaultZipContainerDetector.java
##########
@@ -262,12 +266,21 @@ private MediaType detect(ZipArchiveEntry zae, 
ZipArchiveInputStream zis,
     }
 
     private MediaType finalDetect(StreamingDetectContext detectContext) {
-        for (ZipContainerDetector d : zipDetectors) {
+        for (ZipContainerDetector d : getDetectors()) {
             MediaType mt = d.streamingDetectFinal(detectContext);
             if (mt != null) {
                 return mt;
             }
         }
         return MediaType.APPLICATION_ZIP;
     }
+    
+    private List<ZipContainerDetector> getDetectors() {
+        if (loader != null) {
+            List<ZipContainerDetector> zipDetectors = new 
ArrayList<>(staticZipDetectors);

Review comment:
       In DefaultDetector, the order is dynamic detectors and then we add the 
statically loaded detectors with `super.getDetectors()`.  Here the order is 
reversed.  Why the difference, will it make any difference?




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@tika.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> DefaultZipContainerDetector does not support loading of ZipContainerDetectors 
> in an OSGi enviroment
> ---------------------------------------------------------------------------------------------------
>
>                 Key: TIKA-3418
>                 URL: https://issues.apache.org/jira/browse/TIKA-3418
>             Project: Tika
>          Issue Type: Improvement
>          Components: core, parser
>    Affects Versions: 2.0.0
>            Reporter: Simon-Shlomo Poil
>            Priority: Major
>
> Classes that implements the ZipContainerDetector interface are loaded via the 
> ServiceLoader in the DefaultZipContainerDetector (in parsers-zip-commons).
> In an OSGi enviroment the current behaviour is (default constructor) to only 
> load classes that a found by the DefaultZipContainerDetector classloader, 
> however this will miss ZipContainerDetector classes such as the 
> [OPCPackageDetector.java|https://github.com/apache/tika/blob/main/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/detect/microsoft/ooxml/OPCPackageDetector.java]
>  in the 
> [tika-parser-microsoft-module|https://github.com/apache/tika/tree/main/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module].
> The DefaultZipConatinerDetector has constructor to pass a ServiceLoader, 
> which in principle could allow loading of dynamic services. However, this 
> constructor will load the services only on initialization, which does comply 
> with the dynamic natur of an OSGi enviroment where services can come and go 
> dynamically.
> Linked to this issue is pull-request that attempts solve this issue following 
> a similar strategy of service loading as implemented in the DefaultDetector 
> and DefaultParser.
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to