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

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

commit 62310bee5560bc2f423d298efe75540ff4a22375
Author: tallison <[email protected]>
AuthorDate: Tue Dec 30 16:56:58 2025 -0500

    TIKA-4608 -- clean up metadata filter api
---
 .../src/main/java/org/apache/tika/cli/TikaCLI.java |  3 +--
 .../src/main/java/org/apache/tika/gui/TikaGUI.java |  2 +-
 .../metadata/filter/CompositeMetadataFilter.java   |  5 ++---
 .../tika/metadata/filter/MetadataFilter.java       | 13 ++++++-------
 .../tika/metadata/filter/MetadataFilterBase.java   |  3 +--
 .../apache/tika/metadata/filter/NoOpFilter.java    |  4 ++--
 .../tika/sax/RecursiveParserWrapperHandler.java    | 17 +++++++++++------
 .../core/metadata/TikaEvalMetadataFilterTest.java  |  6 +++++-
 .../apache/tika/pipes/core/server/EmitHandler.java |  7 +++----
 .../core/server/MetadataListAndEmbeddedBytes.java  |  2 +-
 .../filter/AttachmentCountingListFilter.java       |  5 ++---
 .../apache/tika/pipes/core/PassbackFilterTest.java | 15 +++++++--------
 .../pipes/emitter/solr/SolrEmitterDevTest.java     |  6 +++++-
 .../filter/AttachmentCountingListFilter.java       |  5 ++---
 .../tika/metadata/filter/TestMetadataFilter.java   |  6 +++++-
 .../CustomClassSerializationTest.java              |  3 +--
 .../core/resource/RecursiveMetadataResource.java   | 10 ++++++----
 .../tika/server/core/resource/TikaResource.java    | 22 +++++++++++-----------
 18 files changed, 72 insertions(+), 62 deletions(-)

diff --git a/tika-app/src/main/java/org/apache/tika/cli/TikaCLI.java 
b/tika-app/src/main/java/org/apache/tika/cli/TikaCLI.java
index 411bd070a4..f629743237 100644
--- a/tika-app/src/main/java/org/apache/tika/cli/TikaCLI.java
+++ b/tika-app/src/main/java/org/apache/tika/cli/TikaCLI.java
@@ -561,8 +561,7 @@ public class TikaCLI {
         JsonMetadataList.setPrettyPrinting(prettyPrint);
         try (Writer writer = getOutputWriter(output, encoding)) {
             List<Metadata> metadataList = handler.getMetadataList();
-            metadataList = tikaLoader
-                    .loadMetadataFilters().filter(metadataList);
+            tikaLoader.loadMetadataFilters().filter(metadataList);
             JsonMetadataList.toJson(metadataList, writer);
         }
     }
diff --git a/tika-app/src/main/java/org/apache/tika/gui/TikaGUI.java 
b/tika-app/src/main/java/org/apache/tika/gui/TikaGUI.java
index 6075ab82a2..84977bdd90 100644
--- a/tika-app/src/main/java/org/apache/tika/gui/TikaGUI.java
+++ b/tika-app/src/main/java/org/apache/tika/gui/TikaGUI.java
@@ -386,7 +386,7 @@ public class TikaGUI extends JFrame implements 
ActionListener, HyperlinkListener
             StringWriter jsonBuffer = new StringWriter();
             JsonMetadataList.setPrettyPrinting(true);
             List<Metadata> metadataList = 
recursiveParserWrapperHandler.getMetadataList();
-            metadataList = 
tikaConfig.loadMetadataFilters().filter(metadataList);
+            tikaConfig.loadMetadataFilters().filter(metadataList);
             JsonMetadataList.toJson(metadataList, jsonBuffer);
             setText(json, jsonBuffer.toString());
         }
diff --git 
a/tika-core/src/main/java/org/apache/tika/metadata/filter/CompositeMetadataFilter.java
 
b/tika-core/src/main/java/org/apache/tika/metadata/filter/CompositeMetadataFilter.java
index 3b306cd580..bd2e52ba48 100644
--- 
a/tika-core/src/main/java/org/apache/tika/metadata/filter/CompositeMetadataFilter.java
+++ 
b/tika-core/src/main/java/org/apache/tika/metadata/filter/CompositeMetadataFilter.java
@@ -44,11 +44,10 @@ public class CompositeMetadataFilter extends MetadataFilter 
{
     }
 
     @Override
-    public List<Metadata> filter(List<Metadata> metadataList) throws 
TikaException {
+    public void filter(List<Metadata> metadataList) throws TikaException {
         for (MetadataFilter filter : filters) {
-            metadataList = filter.filter(metadataList);
+            filter.filter(metadataList);
         }
-        return metadataList;
     }
 
     @Override
diff --git 
a/tika-core/src/main/java/org/apache/tika/metadata/filter/MetadataFilter.java 
b/tika-core/src/main/java/org/apache/tika/metadata/filter/MetadataFilter.java
index 6bd8fae632..b3f81c1919 100644
--- 
a/tika-core/src/main/java/org/apache/tika/metadata/filter/MetadataFilter.java
+++ 
b/tika-core/src/main/java/org/apache/tika/metadata/filter/MetadataFilter.java
@@ -25,13 +25,12 @@ import org.apache.tika.metadata.Metadata;
 public abstract class MetadataFilter implements Serializable {
 
     /**
-     * For efficiency's sake, the original metadata list and data therein may 
be modified.
-     * Users are responsible for doing a defensive copy before calling filter 
if mutability
-     * would be problematic.
+     * Filters the metadata list in place. The list and the metadata objects 
within it
+     * may be modified. Callers must pass a mutable list and should make a 
defensive
+     * copy before calling if the original data must be preserved.
      *
-     * @param metadataList
-     * @return
-     * @throws TikaException
+     * @param metadataList the list to filter (must be mutable)
+     * @throws TikaException if filtering fails
      */
-    public abstract List<Metadata> filter(List<Metadata> metadataList) throws 
TikaException;
+    public abstract void filter(List<Metadata> metadataList) throws 
TikaException;
 }
diff --git 
a/tika-core/src/main/java/org/apache/tika/metadata/filter/MetadataFilterBase.java
 
b/tika-core/src/main/java/org/apache/tika/metadata/filter/MetadataFilterBase.java
index dc5959ed2b..50df92a451 100644
--- 
a/tika-core/src/main/java/org/apache/tika/metadata/filter/MetadataFilterBase.java
+++ 
b/tika-core/src/main/java/org/apache/tika/metadata/filter/MetadataFilterBase.java
@@ -29,11 +29,10 @@ import org.apache.tika.metadata.Metadata;
 public abstract class MetadataFilterBase extends MetadataFilter {
 
     @Override
-    public List<Metadata> filter(List<Metadata> metadataList) throws 
TikaException {
+    public void filter(List<Metadata> metadataList) throws TikaException {
         for (Metadata m : metadataList) {
             filter(m);
         }
-        return metadataList;
     }
 
     protected abstract void filter(Metadata metadata);
diff --git 
a/tika-core/src/main/java/org/apache/tika/metadata/filter/NoOpFilter.java 
b/tika-core/src/main/java/org/apache/tika/metadata/filter/NoOpFilter.java
index 8a380edcee..9ccc8f4d64 100644
--- a/tika-core/src/main/java/org/apache/tika/metadata/filter/NoOpFilter.java
+++ b/tika-core/src/main/java/org/apache/tika/metadata/filter/NoOpFilter.java
@@ -33,7 +33,7 @@ public class NoOpFilter extends MetadataFilter {
 
 
     @Override
-    public List<Metadata> filter(List<Metadata> metadataList) throws 
TikaException {
-        return metadataList;
+    public void filter(List<Metadata> metadataList) throws TikaException {
+        // no-op
     }
 }
diff --git 
a/tika-core/src/main/java/org/apache/tika/sax/RecursiveParserWrapperHandler.java
 
b/tika-core/src/main/java/org/apache/tika/sax/RecursiveParserWrapperHandler.java
index b65fdbd612..c60ff0c87c 100644
--- 
a/tika-core/src/main/java/org/apache/tika/sax/RecursiveParserWrapperHandler.java
+++ 
b/tika-core/src/main/java/org/apache/tika/sax/RecursiveParserWrapperHandler.java
@@ -16,6 +16,7 @@
  */
 package org.apache.tika.sax;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
@@ -102,14 +103,16 @@ public class RecursiveParserWrapperHandler extends 
AbstractRecursiveParserWrappe
             throws SAXException {
         super.endEmbeddedDocument(contentHandler, metadata);
         addContent(contentHandler, metadata);
+        List<Metadata> singleItemList = new ArrayList<>();
+        singleItemList.add(metadata);
         try {
-            metadataFilter.filter(List.of(metadata));
+            metadataFilter.filter(singleItemList);
         } catch (TikaException e) {
             throw new SAXException(e);
         }
 
-        if (metadata.size() > 0) {
-            metadataList.add(ParserUtils.cloneMetadata(metadata));
+        if (!singleItemList.isEmpty() && singleItemList.get(0).size() > 0) {
+            metadataList.add(ParserUtils.cloneMetadata(singleItemList.get(0)));
         }
     }
 
@@ -122,13 +125,15 @@ public class RecursiveParserWrapperHandler extends 
AbstractRecursiveParserWrappe
     public void endDocument(ContentHandler contentHandler, Metadata metadata) 
throws SAXException {
         super.endDocument(contentHandler, metadata);
         addContent(contentHandler, metadata);
+        List<Metadata> singleItemList = new ArrayList<>();
+        singleItemList.add(metadata);
         try {
-            metadataFilter.filter(List.of(metadata));
+            metadataFilter.filter(singleItemList);
         } catch (TikaException e) {
             throw new SAXException(e);
         }
-        if (metadata.size() > 0) {
-            metadataList.add(0, ParserUtils.cloneMetadata(metadata));
+        if (!singleItemList.isEmpty() && singleItemList.get(0).size() > 0) {
+            metadataList.add(0, 
ParserUtils.cloneMetadata(singleItemList.get(0)));
         }
         writeFinalEmbeddedPaths();
     }
diff --git 
a/tika-eval/tika-eval-core/src/test/java/org/apache/tika/eval/core/metadata/TikaEvalMetadataFilterTest.java
 
b/tika-eval/tika-eval-core/src/test/java/org/apache/tika/eval/core/metadata/TikaEvalMetadataFilterTest.java
index 1374ac0eb9..31a842ba76 100644
--- 
a/tika-eval/tika-eval-core/src/test/java/org/apache/tika/eval/core/metadata/TikaEvalMetadataFilterTest.java
+++ 
b/tika-eval/tika-eval-core/src/test/java/org/apache/tika/eval/core/metadata/TikaEvalMetadataFilterTest.java
@@ -18,6 +18,7 @@ package org.apache.tika.eval.core.metadata;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.junit.jupiter.api.Test;
@@ -38,7 +39,10 @@ public class TikaEvalMetadataFilterTest {
             String content = "the quick brown fox, Zothro 1234 1235, jumped 
over the lazy dog";
             metadata.set(TikaCoreProperties.TIKA_CONTENT, content);
 
-            metadata = filter.filter(List.of(metadata)).get(0);
+            List<Metadata> metadataList = new ArrayList<>();
+            metadataList.add(metadata);
+            filter.filter(metadataList);
+            metadata = metadataList.get(0);
             assertEquals("eng", metadata.get(TikaEvalMetadataFilter.LANGUAGE));
             assertEquals(12, (int) 
metadata.getInt(TikaEvalMetadataFilter.NUM_TOKENS));
             assertEquals(11, (int) 
metadata.getInt(TikaEvalMetadataFilter.NUM_UNIQUE_TOKENS));
diff --git 
a/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/server/EmitHandler.java
 
b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/server/EmitHandler.java
index 5215b5c59f..32e97ebfa7 100644
--- 
a/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/server/EmitHandler.java
+++ 
b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/server/EmitHandler.java
@@ -124,16 +124,15 @@ class EmitHandler {
         }
         PassbackFilter passbackFilter = parseContext.get(PassbackFilter.class);
         if (passbackFilter != null) {
-            List<Metadata> filtered = null;
             try {
-                filtered = passbackFilter.filter(parseData.metadataList);
+                passbackFilter.filter(parseData.metadataList);
             } catch (TikaException e) {
                 LOG.warn("problem filtering for pass back", e);
             }
             if (StringUtils.isBlank(parseExceptionStack)) {
-                return new 
PipesResult(PipesResult.RESULT_STATUS.EMIT_SUCCESS_PASSBACK, new 
EmitDataImpl(emitKey.getEmitKey(), filtered));
+                return new 
PipesResult(PipesResult.RESULT_STATUS.EMIT_SUCCESS_PASSBACK, new 
EmitDataImpl(emitKey.getEmitKey(), parseData.metadataList));
             } else {
-                return new 
PipesResult(PipesResult.RESULT_STATUS.EMIT_SUCCESS_PARSE_EXCEPTION, new 
EmitDataImpl(emitKey.getEmitKey(), filtered), parseExceptionStack);
+                return new 
PipesResult(PipesResult.RESULT_STATUS.EMIT_SUCCESS_PARSE_EXCEPTION, new 
EmitDataImpl(emitKey.getEmitKey(), parseData.metadataList), 
parseExceptionStack);
             }
 
         }
diff --git 
a/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/server/MetadataListAndEmbeddedBytes.java
 
b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/server/MetadataListAndEmbeddedBytes.java
index fd2386ff09..1c9ea38ce2 100644
--- 
a/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/server/MetadataListAndEmbeddedBytes.java
+++ 
b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/server/MetadataListAndEmbeddedBytes.java
@@ -40,7 +40,7 @@ class MetadataListAndEmbeddedBytes {
         }
 
         public void filter(MetadataFilter filter) throws TikaException {
-            metadataList = filter.filter(metadataList);
+            filter.filter(metadataList);
         }
 
         public EmbeddedDocumentBytesHandler getEmbeddedDocumentBytesHandler() {
diff --git 
a/tika-pipes/tika-pipes-integration-tests/src/test/java/org/apache/tika/metadata/filter/AttachmentCountingListFilter.java
 
b/tika-pipes/tika-pipes-integration-tests/src/test/java/org/apache/tika/metadata/filter/AttachmentCountingListFilter.java
index fdf4f1c228..730981a6a0 100644
--- 
a/tika-pipes/tika-pipes-integration-tests/src/test/java/org/apache/tika/metadata/filter/AttachmentCountingListFilter.java
+++ 
b/tika-pipes/tika-pipes-integration-tests/src/test/java/org/apache/tika/metadata/filter/AttachmentCountingListFilter.java
@@ -28,13 +28,12 @@ public class AttachmentCountingListFilter extends 
MetadataFilter {
     private Integer count = 0;
 
     @Override
-    public List<Metadata> filter(List<Metadata> metadataList) throws 
TikaException {
+    public void filter(List<Metadata> metadataList) throws TikaException {
         if (metadataList == null || metadataList.isEmpty()) {
-            return metadataList;
+            return;
         }
         metadataList.get(0).set("X-TIKA:attachment_count", 
Integer.toString(metadataList.size() - 1));
         count += metadataList.size();
-        return metadataList;
     }
 
     public Integer getCount() {
diff --git 
a/tika-pipes/tika-pipes-integration-tests/src/test/java/org/apache/tika/pipes/core/PassbackFilterTest.java
 
b/tika-pipes/tika-pipes-integration-tests/src/test/java/org/apache/tika/pipes/core/PassbackFilterTest.java
index c00989a1a5..a3a55bb372 100644
--- 
a/tika-pipes/tika-pipes-integration-tests/src/test/java/org/apache/tika/pipes/core/PassbackFilterTest.java
+++ 
b/tika-pipes/tika-pipes-integration-tests/src/test/java/org/apache/tika/pipes/core/PassbackFilterTest.java
@@ -22,7 +22,6 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 
@@ -100,17 +99,17 @@ public class PassbackFilterTest {
 
     private static class MyPassbackFilter extends PassbackFilter {
         @Override
-        public List<Metadata> filter(List<Metadata> metadataList) throws 
TikaException {
-            List<Metadata> ret = new ArrayList<>();
+        public void filter(List<Metadata> metadataList) throws TikaException {
+            // Remove items without RESOURCE_NAME_KEY and transform remaining 
ones
+            metadataList.removeIf(m -> 
StringUtils.isBlank(m.get(TikaCoreProperties.RESOURCE_NAME_KEY)));
             for (Metadata m : metadataList) {
                 String val = m.get(TikaCoreProperties.RESOURCE_NAME_KEY);
-                if (!StringUtils.isBlank(val)) {
-                    Metadata retM = new Metadata();
-                    retM.add(TikaCoreProperties.RESOURCE_NAME_KEY, 
val.toUpperCase(Locale.ROOT));
-                    ret.add(retM);
+                // Clear all fields and only keep RESOURCE_NAME_KEY 
(uppercased)
+                for (String name : m.names()) {
+                    m.remove(name);
                 }
+                m.set(TikaCoreProperties.RESOURCE_NAME_KEY, 
val.toUpperCase(Locale.ROOT));
             }
-            return ret;
         }
     }
 
diff --git 
a/tika-pipes/tika-pipes-plugins/tika-pipes-solr/src/test/java/org/apache/tika/pipes/emitter/solr/SolrEmitterDevTest.java
 
b/tika-pipes/tika-pipes-plugins/tika-pipes-solr/src/test/java/org/apache/tika/pipes/emitter/solr/SolrEmitterDevTest.java
index d3090a36fb..04c3106386 100644
--- 
a/tika-pipes/tika-pipes-plugins/tika-pipes-solr/src/test/java/org/apache/tika/pipes/emitter/solr/SolrEmitterDevTest.java
+++ 
b/tika-pipes/tika-pipes-plugins/tika-pipes-solr/src/test/java/org/apache/tika/pipes/emitter/solr/SolrEmitterDevTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.tika.pipes.emitter.solr;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
@@ -67,7 +68,10 @@ public class SolrEmitterDevTest {
         mappings.put(TikaCoreProperties.CREATED.getName(), "created");
         mappings.put(TikaCoreProperties.TIKA_CONTENT.getName(), "content");
         filter.setMappings(mappings);
-        metadata = filter.filter(List.of(metadata)).get(0);
+        List<Metadata> metadataList = new ArrayList<>();
+        metadataList.add(metadata);
+        filter.filter(metadataList);
+        metadata = metadataList.get(0);
 
         solrEmitter.emit(emitKey, Collections.singletonList(metadata), new 
ParseContext());
     }
diff --git 
a/tika-serialization/src/test/java/org/apache/tika/metadata/filter/AttachmentCountingListFilter.java
 
b/tika-serialization/src/test/java/org/apache/tika/metadata/filter/AttachmentCountingListFilter.java
index e33390a7c5..798356c186 100644
--- 
a/tika-serialization/src/test/java/org/apache/tika/metadata/filter/AttachmentCountingListFilter.java
+++ 
b/tika-serialization/src/test/java/org/apache/tika/metadata/filter/AttachmentCountingListFilter.java
@@ -27,13 +27,12 @@ public class AttachmentCountingListFilter extends 
MetadataFilter {
 
     private Integer count = 0;
     @Override
-    public List<Metadata> filter(List<Metadata> metadataList) throws 
TikaException {
+    public void filter(List<Metadata> metadataList) throws TikaException {
         if (metadataList == null || metadataList.isEmpty()) {
-            return metadataList;
+            return;
         }
         metadataList.get(0).set("X-TIKA:attachment_count", 
Integer.toString(metadataList.size() - 1));
         count += metadataList.size();
-        return metadataList;
     }
 
     public Integer getCount() {
diff --git 
a/tika-serialization/src/test/java/org/apache/tika/metadata/filter/TestMetadataFilter.java
 
b/tika-serialization/src/test/java/org/apache/tika/metadata/filter/TestMetadataFilter.java
index 0c24b68606..a86515de74 100644
--- 
a/tika-serialization/src/test/java/org/apache/tika/metadata/filter/TestMetadataFilter.java
+++ 
b/tika-serialization/src/test/java/org/apache/tika/metadata/filter/TestMetadataFilter.java
@@ -20,6 +20,7 @@ import static 
org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
@@ -264,6 +265,9 @@ public class TestMetadataFilter extends TikaTest {
     }
 
     private static Metadata filterOne(MetadataFilter filter, Metadata 
singleMetadata) throws TikaException {
-        return filter.filter(List.of(singleMetadata)).get(0);
+        List<Metadata> list = new ArrayList<>();
+        list.add(singleMetadata);
+        filter.filter(list);
+        return list.get(0);
     }
 }
diff --git 
a/tika-serialization/src/test/java/org/apache/tika/serialization/CustomClassSerializationTest.java
 
b/tika-serialization/src/test/java/org/apache/tika/serialization/CustomClassSerializationTest.java
index ad70cb521b..dabb6671ee 100644
--- 
a/tika-serialization/src/test/java/org/apache/tika/serialization/CustomClassSerializationTest.java
+++ 
b/tika-serialization/src/test/java/org/apache/tika/serialization/CustomClassSerializationTest.java
@@ -64,7 +64,7 @@ public class CustomClassSerializationTest {
         }
 
         @Override
-        public java.util.List<Metadata> filter(java.util.List<Metadata> 
metadataList) {
+        public void filter(java.util.List<Metadata> metadataList) {
             for (Metadata metadata : metadataList) {
                 for (String name : metadata.names()) {
                     String[] values = metadata.getValues(name);
@@ -74,7 +74,6 @@ public class CustomClassSerializationTest {
                     }
                 }
             }
-            return metadataList;
         }
 
         @Override
diff --git 
a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/RecursiveMetadataResource.java
 
b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/RecursiveMetadataResource.java
index 3f71ae67ea..838b92a516 100644
--- 
a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/RecursiveMetadataResource.java
+++ 
b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/RecursiveMetadataResource.java
@@ -87,9 +87,9 @@ public class RecursiveMetadataResource {
             LOG.error("something went seriously wrong", e);
         }
         MetadataFilter metadataFilter = context.get(MetadataFilter.class, 
getTikaLoader().loadMetadataFilters());
-        //note that the filter may modify the contents of handler's metadata 
list.
-        //do a deep copy if that's problematic.
-        return metadataFilter.filter(handler.getMetadataList());
+        List<Metadata> metadataList = handler.getMetadataList();
+        metadataFilter.filter(metadataList);
+        return metadataList;
     }
 
     static HandlerConfig buildHandlerConfig(MultivaluedMap<String, String> 
httpHeaders, String handlerTypeName, HandlerConfig.PARSE_MODE parseMode) {
@@ -192,7 +192,9 @@ public class RecursiveMetadataResource {
             LOG.error("something went seriously wrong", e);
         }
         MetadataFilter metadataFilter = context.get(MetadataFilter.class, 
getTikaLoader().loadMetadataFilters());
-        return new 
MetadataList(metadataFilter.filter(handler.getMetadataList()));
+        List<Metadata> metadataList = handler.getMetadataList();
+        metadataFilter.filter(metadataList);
+        return new MetadataList(metadataList);
     }
 
     /**
diff --git 
a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/TikaResource.java
 
b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/TikaResource.java
index 4729e66a47..9b312606b2 100644
--- 
a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/TikaResource.java
+++ 
b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/TikaResource.java
@@ -27,6 +27,7 @@ import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
 import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
@@ -501,14 +502,13 @@ public class TikaResource {
             throws IOException, TikaException {
         Metadata metadata = new Metadata();
         parseToMetadata(getInputStream(att.getObject(InputStream.class), 
metadata, httpHeaders, info), metadata, preparePostHeaderMap(att, httpHeaders), 
info, handlerTypeName);
-        List<Metadata> ret = TikaResource
-                .getTikaLoader()
-                .loadMetadataFilters()
-                .filter(List.of(metadata));
-        if (ret == null || ret.isEmpty()) {
+        List<Metadata> metadataList = new ArrayList<>();
+        metadataList.add(metadata);
+        
TikaResource.getTikaLoader().loadMetadataFilters().filter(metadataList);
+        if (metadataList.isEmpty()) {
             return new Metadata();
         }
-        return ret.get(0);
+        return metadataList.get(0);
     }
 
     @PUT
@@ -519,13 +519,13 @@ public class TikaResource {
             throws IOException, TikaException {
         Metadata metadata = new Metadata();
         parseToMetadata(getInputStream(is, metadata, httpHeaders, info), 
metadata, httpHeaders.getRequestHeaders(), info, handlerTypeName);
-        List<Metadata> ret = TikaResource
-                .getTikaLoader().loadMetadataFilters()
-                .filter(List.of(metadata));
-        if (ret == null || ret.isEmpty()) {
+        List<Metadata> metadataList = new ArrayList<>();
+        metadataList.add(metadata);
+        
TikaResource.getTikaLoader().loadMetadataFilters().filter(metadataList);
+        if (metadataList.isEmpty()) {
             return new Metadata();
         }
-        return metadata;
+        return metadataList.get(0);
     }
 
     private void parseToMetadata(TikaInputStream tis, Metadata metadata, 
MultivaluedMap<String, String> httpHeaders, UriInfo info, String 
handlerTypeName)

Reply via email to