This is an automated email from the ASF dual-hosted git repository.

nick pushed a commit to branch multiple-parsers
in repository https://gitbox.apache.org/repos/asf/tika.git

commit f412d56218ffe21f65be4640aaf435c9896b3d16
Author: Nick Burch <n...@gagravarr.org>
AuthorDate: Sun Apr 8 13:08:19 2018 +0100

    TikaConfig loading of Multiple Parsers with Policy
---
 .../main/java/org/apache/tika/config/TikaConfig.java |  6 ++++++
 .../tika/parser/multiple/AbstractMultipleParser.java |  6 +++++-
 .../java/org/apache/tika/config/TikaConfigTest.java  | 20 +++++++++++++++++++-
 3 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java 
b/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
index ab6e23f..466d2bc 100644
--- a/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
+++ b/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
@@ -789,6 +789,12 @@ public class TikaConfig {
             }
             if (parser == null) {
                 try {
+                    c = parserClass.getConstructor(MediaTypeRegistry.class, 
Collection.class, Map.class);
+                    parser = c.newInstance(registry, childParsers, params);
+                } catch (NoSuchMethodException me) {}
+            }
+            if (parser == null) {
+                try {
                     c = parserClass.getConstructor(MediaTypeRegistry.class, 
List.class);
                     parser = c.newInstance(registry, childParsers);
                 } catch (NoSuchMethodException me) {}
diff --git 
a/tika-core/src/main/java/org/apache/tika/parser/multiple/AbstractMultipleParser.java
 
b/tika-core/src/main/java/org/apache/tika/parser/multiple/AbstractMultipleParser.java
index 793b3f4..56ba7f4 100644
--- 
a/tika-core/src/main/java/org/apache/tika/parser/multiple/AbstractMultipleParser.java
+++ 
b/tika-core/src/main/java/org/apache/tika/parser/multiple/AbstractMultipleParser.java
@@ -146,7 +146,7 @@ public abstract class AbstractMultipleParser extends 
AbstractParser {
     public AbstractMultipleParser(MediaTypeRegistry registry, 
                                   Collection<? extends Parser> parsers,
                                   Map<String, Param> params) {
-        
+        this(registry, getMetadataPolicy(params), parsers);
     }
     public AbstractMultipleParser(MediaTypeRegistry registry, MetadataPolicy 
policy,
                                   Parser... parsers) {
@@ -173,6 +173,10 @@ public abstract class AbstractMultipleParser extends 
AbstractParser {
         return offeredTypes;
     }
     
+    public MetadataPolicy getMetadataPolicy() {
+        return policy;
+    }
+    
     /**
      * Used to allow implementations to prepare or change things
      *  before parsing occurs
diff --git a/tika-core/src/test/java/org/apache/tika/config/TikaConfigTest.java 
b/tika-core/src/test/java/org/apache/tika/config/TikaConfigTest.java
index aa10923..2c0f14c 100644
--- a/tika-core/src/test/java/org/apache/tika/config/TikaConfigTest.java
+++ b/tika-core/src/test/java/org/apache/tika/config/TikaConfigTest.java
@@ -37,6 +37,7 @@ import org.apache.tika.parser.EmptyParser;
 import org.apache.tika.parser.ErrorParser;
 import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.ParserDecorator;
+import org.apache.tika.parser.multiple.FallbackParser;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -285,11 +286,28 @@ public class TikaConfigTest extends 
AbstractTikaConfigTest {
         TikaConfig config = 
getConfig("TIKA-2389-throw-default-overridden.xml");
     }
 
-
     @Test
     public void testInitializerPerParserWarn() throws Exception {
         //TODO: test that this was logged at WARN level
         TikaConfig config = getConfig("TIKA-2389-warn-per-parser.xml");
     }
 
+    @Test
+    public void testMultipleWithFallback() throws Exception {
+        TikaConfig config = getConfig("TIKA-1509-multiple-fallback.xml");
+        CompositeParser parser = (CompositeParser)config.getParser();
+        assertEquals(2, parser.getAllComponentParsers().size());
+        Parser p;
+
+        p = parser.getAllComponentParsers().get(0);
+        assertTrue(p.toString(), p instanceof ParserDecorator);
+        assertEquals(DefaultParser.class, 
((ParserDecorator)p).getWrappedParser().getClass());
+
+        p = parser.getAllComponentParsers().get(1);
+        assertTrue(p.toString(), p instanceof ParserDecorator);
+        assertEquals(FallbackParser.class, 
((ParserDecorator)p).getWrappedParser().getClass());
+        
+        FallbackParser fbp = 
(FallbackParser)((ParserDecorator)p).getWrappedParser();
+        assertEquals("DISCARD_ALL", fbp.getMetadataPolicy().toString());
+    }
 }
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
n...@apache.org.

Reply via email to