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

tallison pushed a commit to branch TIKA-3891
in repository https://gitbox.apache.org/repos/asf/tika.git


The following commit(s) were added to refs/heads/TIKA-3891 by this push:
     new 16ebbf61a TIKA-3891 -- add special case for AbstractMultipleParser
16ebbf61a is described below

commit 16ebbf61a913fbfab53f18187744d8466def7f91
Author: tallison <[email protected]>
AuthorDate: Fri Oct 21 14:52:47 2022 -0400

    TIKA-3891 -- add special case for AbstractMultipleParser
---
 .../apache/tika/config/TikaConfigSerializer.java   | 19 ++++++++---
 .../tika/config/TikaConfigSerializerTest.java      | 37 ++++++++++++++++++++++
 2 files changed, 51 insertions(+), 5 deletions(-)

diff --git 
a/tika-core/src/main/java/org/apache/tika/config/TikaConfigSerializer.java 
b/tika-core/src/main/java/org/apache/tika/config/TikaConfigSerializer.java
index ef565994b..598651a2c 100644
--- a/tika-core/src/main/java/org/apache/tika/config/TikaConfigSerializer.java
+++ b/tika-core/src/main/java/org/apache/tika/config/TikaConfigSerializer.java
@@ -455,7 +455,16 @@ public class TikaConfigSerializer {
                                             Object object,
                                             MethodTuples setterTuples, 
MethodTuples getterTuples) {
 
-        Element params = null;
+        Element paramsElement = null;
+        if (object instanceof AbstractMultipleParser) {
+            paramsElement = doc.createElement("params");
+            Element paramElement = doc.createElement("param");
+            paramElement.setAttribute("name", "metadataPolicy");
+            paramElement.setAttribute("value",
+                    ((AbstractMultipleParser) 
object).getMetadataPolicy().toString());
+            paramsElement.appendChild(paramElement);
+            root.appendChild(paramsElement);
+        }
         for (Map.Entry<String, Set<MethodTuple>> e : 
setterTuples.tuples.entrySet()) {
             if (!getterTuples.tuples.containsKey(e.getKey())) {
                 LOG.info("no getter for setter: {} in {}", e.getKey(), 
object.getClass());
@@ -503,11 +512,11 @@ public class TikaConfigSerializer {
             } else {
                 param.setTextContent(valString);
             }
-            if (params == null) {
-                params = doc.createElement("params");
-                root.appendChild(params);
+            if (paramsElement == null) {
+                paramsElement = doc.createElement("params");
+                root.appendChild(paramsElement);
             }
-            params.appendChild(param);
+            paramsElement.appendChild(param);
         }
     }
 
diff --git 
a/tika-core/src/test/java/org/apache/tika/config/TikaConfigSerializerTest.java 
b/tika-core/src/test/java/org/apache/tika/config/TikaConfigSerializerTest.java
index 23fa72ad5..dafdd641f 100644
--- 
a/tika-core/src/test/java/org/apache/tika/config/TikaConfigSerializerTest.java
+++ 
b/tika-core/src/test/java/org/apache/tika/config/TikaConfigSerializerTest.java
@@ -18,12 +18,23 @@
 package org.apache.tika.config;
 
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
 import java.io.StringWriter;
 import java.nio.charset.StandardCharsets;
 
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
+import org.apache.tika.parser.CompositeParser;
+import org.apache.tika.parser.Parser;
+import org.apache.tika.parser.ParserDecorator;
+import org.apache.tika.parser.mock.MockParser;
+import org.apache.tika.parser.multiple.FallbackParser;
+
 public class TikaConfigSerializerTest extends TikaConfigTest {
 
     /**
@@ -49,6 +60,32 @@ public class TikaConfigSerializerTest extends TikaConfigTest 
{
                 "</encodingDetectors>", xml);
     }
 
+    @Test
+    public void testMultipleWithFallback() throws Exception {
+        TikaConfig config = getConfig("TIKA-1509-multiple-fallback.xml");
+        StringWriter writer = new StringWriter();
+        TikaConfigSerializer.serialize(config,
+                TikaConfigSerializer.Mode.STATIC_FULL, writer, 
StandardCharsets.UTF_8);
+        try (InputStream is =
+                     new 
ByteArrayInputStream(writer.toString().getBytes(StandardCharsets.UTF_8))) {
+            config = new TikaConfig(is);
+        }
+
+        CompositeParser parser = (CompositeParser) config.getParser();
+        assertEquals(2, parser.getAllComponentParsers().size());
+        Parser p;
+
+        p = parser.getAllComponentParsers().get(0);
+        assertEquals(MockParser.class, ((ParserDecorator) 
p).getWrappedParser().getClass());
+
+        p = parser.getAllComponentParsers().get(1);
+        assertTrue(p instanceof ParserDecorator, p.toString());
+        assertEquals(FallbackParser.class, ((ParserDecorator) 
p).getWrappedParser().getClass());
+
+        FallbackParser fbp = (FallbackParser) ((ParserDecorator) 
p).getWrappedParser();
+        assertEquals("DISCARD_ALL", fbp.getMetadataPolicy().toString());
+    }
+
     @Test
     @Disabled("TODO: executor-service info needs to be stored in TikaConfig 
for serialization")
     public void testExecutors() throws Exception {

Reply via email to