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 {