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

dsmiley pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/main by this push:
     new c2e0249b012 SolrJ ResponseParser API improvements, minor (#3248)
c2e0249b012 is described below

commit c2e0249b012a44a200f5de7a02b6a87175f51e0d
Author: David Smiley <[email protected]>
AuthorDate: Tue Mar 11 22:06:30 2025 -0400

    SolrJ ResponseParser API improvements, minor (#3248)
    
    * processResponse should declare to throw IOException since it reads data
    * processResponse(Reader) -- remove
    * getContentType() -- remove (deprecated)
    * getContentTypes() -- make abstract
    
    NoOpResponseParser: must specify writer type
    
    Solr 10.0
---
 .../apache/solr/cloud/TestRandomFlRTGCloud.java    | 10 +----
 .../handler/admin/ShowFileRequestHandlerTest.java  | 23 +++++------
 .../apache/solr/response/TestRawTransformer.java   |  9 +----
 .../org/apache/solr/search/TestSmileRequest.java   | 10 ++---
 .../apache/solr/client/solrj/ResponseParser.java   | 34 +++++-----------
 .../client/solrj/impl/BinaryResponseParser.java    | 20 +---------
 .../solr/client/solrj/impl/HttpSolrClient.java     |  2 +-
 .../solr/client/solrj/impl/HttpSolrClientBase.java |  2 +-
 .../solrj/impl/InputStreamResponseParser.java      |  8 ++--
 .../client/solrj/impl/JsonMapResponseParser.java   | 20 +++++-----
 .../solr/client/solrj/impl/NoOpResponseParser.java | 32 +++++++--------
 .../solrj/impl/StreamingBinaryResponseParser.java  | 13 ++-----
 .../solr/client/solrj/impl/XMLResponseParser.java  |  6 +--
 .../solrj/request/DelegationTokenRequest.java      |  2 +-
 .../solr/client/solrj/SolrExampleCborTest.java     | 45 ++++++++++------------
 .../solrj/impl/HttpSolrClientBuilderTest.java      |  2 +-
 .../solrj/impl/LBHttpSolrClientBuilderTest.java    |  2 +-
 .../solrj/response/NoOpResponseParserTest.java     |  6 +--
 18 files changed, 90 insertions(+), 156 deletions(-)

diff --git a/solr/core/src/test/org/apache/solr/cloud/TestRandomFlRTGCloud.java 
b/solr/core/src/test/org/apache/solr/cloud/TestRandomFlRTGCloud.java
index 26c0797407e..ecaeae8b64f 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestRandomFlRTGCloud.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestRandomFlRTGCloud.java
@@ -423,14 +423,8 @@ public class TestRandomFlRTGCloud extends 
SolrCloudTestCase {
     }
   }
 
-  private static final ResponseParser RAW_XML_RESPONSE_PARSER = new 
NoOpResponseParser();
-  private static final ResponseParser RAW_JSON_RESPONSE_PARSER =
-      new NoOpResponseParser() {
-        @Override
-        public String getWriterType() {
-          return "json";
-        }
-      };
+  private static final ResponseParser RAW_XML_RESPONSE_PARSER = new 
NoOpResponseParser("xml");
+  private static final ResponseParser RAW_JSON_RESPONSE_PARSER = new 
NoOpResponseParser("json");
 
   /** Helper to convert from wt string parameter to actual SolrClient. */
   private static SolrClient getSolrClient(final String jettyBaseUrl, final 
String wt) {
diff --git 
a/solr/core/src/test/org/apache/solr/handler/admin/ShowFileRequestHandlerTest.java
 
b/solr/core/src/test/org/apache/solr/handler/admin/ShowFileRequestHandlerTest.java
index dca5193941d..0966c5684e3 100644
--- 
a/solr/core/src/test/org/apache/solr/handler/admin/ShowFileRequestHandlerTest.java
+++ 
b/solr/core/src/test/org/apache/solr/handler/admin/ShowFileRequestHandlerTest.java
@@ -18,7 +18,7 @@ package org.apache.solr.handler.admin;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.Reader;
+import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
 import org.apache.solr.SolrJettyTestBase;
 import org.apache.solr.client.solrj.ResponseParser;
@@ -100,18 +100,15 @@ public class ShowFileRequestHandlerTest extends 
SolrJettyTestBase {
           }
 
           @Override
-          public NamedList<Object> processResponse(InputStream body, String 
encoding) {
-            try {
-              if (body.read() >= 0) readFile.set(true);
-            } catch (IOException e) {
-              throw new RuntimeException(e);
-            }
+          public NamedList<Object> processResponse(InputStream body, String 
encoding)
+              throws IOException {
+            if (body.read() >= 0) readFile.set(true);
             return null;
           }
 
           @Override
-          public NamedList<Object> processResponse(Reader reader) {
-            throw new UnsupportedOperationException("TODO unimplemented"); // 
TODO
+          public Set<String> getContentTypes() {
+            return Set.of(); // don't enforce
           }
         });
 
@@ -148,7 +145,7 @@ public class ShowFileRequestHandlerTest extends 
SolrJettyTestBase {
     QueryRequest request =
         new QueryRequest(params("file", "managed-schema", "contentType", 
"not/known"));
     request.setPath("/admin/file");
-    request.setResponseParser(new NoOpResponseParser());
+    request.setResponseParser(new NoOpResponseParser("xml"));
     expectThrows(SolrException.class, () -> client.request(request));
   }
 
@@ -157,7 +154,7 @@ public class ShowFileRequestHandlerTest extends 
SolrJettyTestBase {
     final QueryRequest request =
         new QueryRequest(params("file", "/etc/passwd", "contentType", 
"text/plain; charset=utf-8"));
     request.setPath("/admin/file"); // absolute path not allowed
-    request.setResponseParser(new NoOpResponseParser());
+    request.setResponseParser(new NoOpResponseParser("xml"));
     expectThrows(SolrException.class, () -> client.request(request));
   }
 
@@ -167,7 +164,7 @@ public class ShowFileRequestHandlerTest extends 
SolrJettyTestBase {
         new QueryRequest(
             params("file", "../../solr.xml", "contentType", "application/xml; 
charset=utf-8"));
     request.setPath("/admin/file");
-    request.setResponseParser(new NoOpResponseParser());
+    request.setResponseParser(new NoOpResponseParser("xml"));
     var ex = expectThrows(SolrException.class, () -> client.request(request));
     assertTrue(ex instanceof SolrClient.RemoteSolrException);
   }
@@ -182,7 +179,7 @@ public class ShowFileRequestHandlerTest extends 
SolrJettyTestBase {
                 "contentType",
                 "text/plain; charset=utf-8"));
     request.setPath("/admin/file");
-    request.setResponseParser(new NoOpResponseParser());
+    request.setResponseParser(new NoOpResponseParser("xml"));
     expectThrows(SolrException.class, () -> client.request(request));
   }
 
diff --git 
a/solr/core/src/test/org/apache/solr/response/TestRawTransformer.java 
b/solr/core/src/test/org/apache/solr/response/TestRawTransformer.java
index dd48d8c8aa4..43947cd49b2 100644
--- a/solr/core/src/test/org/apache/solr/response/TestRawTransformer.java
+++ b/solr/core/src/test/org/apache/solr/response/TestRawTransformer.java
@@ -283,12 +283,7 @@ public class TestRawTransformer extends SolrCloudTestCase {
         strResponse.contains("\"links\":[\""));
   }
 
-  private static final NoOpResponseParser XML_NOOP_RESPONSE_PARSER = new 
NoOpResponseParser();
+  private static final NoOpResponseParser XML_NOOP_RESPONSE_PARSER = new 
NoOpResponseParser("xml");
   private static final NoOpResponseParser JSON_NOOP_RESPONSE_PARSER =
-      new NoOpResponseParser() {
-        @Override
-        public String getWriterType() {
-          return "json";
-        }
-      };
+      new NoOpResponseParser("json");
 }
diff --git a/solr/core/src/test/org/apache/solr/search/TestSmileRequest.java 
b/solr/core/src/test/org/apache/solr/search/TestSmileRequest.java
index a5f59890854..2a8d7b2742d 100644
--- a/solr/core/src/test/org/apache/solr/search/TestSmileRequest.java
+++ b/solr/core/src/test/org/apache/solr/search/TestSmileRequest.java
@@ -99,13 +99,9 @@ public class TestSmileRequest extends SolrTestCaseJ4 {
 
     @Override
     @SuppressWarnings({"unchecked", "rawtypes"})
-    public NamedList<Object> processResponse(InputStream body, String 
encoding) {
-      try {
-        Map m = (Map) SmileWriterTest.decodeSmile(body);
-        return new NamedList(m);
-      } catch (IOException e) {
-        throw new RuntimeException(e);
-      }
+    public NamedList<Object> processResponse(InputStream body, String 
encoding) throws IOException {
+      Map m = (Map) SmileWriterTest.decodeSmile(body);
+      return new NamedList(m);
     }
   }
 }
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/ResponseParser.java 
b/solr/solrj/src/java/org/apache/solr/client/solrj/ResponseParser.java
index 1fcb7c7603d..06b9e5402be 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/ResponseParser.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/ResponseParser.java
@@ -16,45 +16,31 @@
  */
 package org.apache.solr.client.solrj;
 
+import java.io.IOException;
 import java.io.InputStream;
-import java.io.Reader;
 import java.util.Collection;
-import java.util.Set;
 import org.apache.solr.common.util.NamedList;
 
 /**
+ * SolrJ Solr response parser.
+ *
  * @since solr 1.3
  */
 public abstract class ResponseParser {
-  public abstract String getWriterType(); // for example: wt=XML, JSON, etc
 
-  public abstract NamedList<Object> processResponse(InputStream body, String 
encoding);
+  /** The writer type placed onto the request as the {@code wt} param. */
+  public abstract String getWriterType(); // for example: wt=XML, JSON, etc
 
-  public abstract NamedList<Object> processResponse(Reader reader);
-
-  /**
-   * A well-behaved ResponseParser will return its content-type.
-   *
-   * @return the content-type this parser expects to parse
-   * @deprecated use {@link #getContentTypes()} instead
-   */
-  @Deprecated
-  public String getContentType() {
-    return null;
-  }
+  public abstract NamedList<Object> processResponse(InputStream body, String 
encoding)
+      throws IOException;
 
   /**
    * A well-behaved ResponseParser will return the content-types it supports.
    *
-   * @return the content-type values that this parser is capable of parsing.
+   * @return the content-type values that this parser is capable of parsing. 
Never null. Empty means
+   *     no enforcement.
    */
-  public Collection<String> getContentTypes() {
-    final String contentType = getContentType();
-    if (contentType == null) {
-      return Set.of();
-    }
-    return Set.of(getContentType());
-  }
+  public abstract Collection<String> getContentTypes();
 
   /**
    * @return the version param passed to solr
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BinaryResponseParser.java
 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BinaryResponseParser.java
index b67b9b482e4..07385b38a52 100644
--- 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BinaryResponseParser.java
+++ 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BinaryResponseParser.java
@@ -18,11 +18,9 @@ package org.apache.solr.client.solrj.impl;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.Reader;
 import java.util.Collection;
 import java.util.Set;
 import org.apache.solr.client.solrj.ResponseParser;
-import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.JavaBinCodec;
 import org.apache.solr.common.util.NamedList;
 
@@ -47,23 +45,14 @@ public class BinaryResponseParser extends ResponseParser {
 
   @Override
   @SuppressWarnings({"unchecked"})
-  public NamedList<Object> processResponse(InputStream body, String encoding) {
-    try {
-      return (NamedList<Object>) createCodec().unmarshal(body);
-    } catch (IOException e) {
-      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "parsing 
error", e);
-    }
+  public NamedList<Object> processResponse(InputStream body, String encoding) 
throws IOException {
+    return (NamedList<Object>) createCodec().unmarshal(body);
   }
 
   protected JavaBinCodec createCodec() {
     return new JavaBinCodec(null, stringCache);
   }
 
-  @Override
-  public String getContentType() {
-    return BINARY_CONTENT_TYPE;
-  }
-
   @Override
   public Collection<String> getContentTypes() {
     return Set.of(BINARY_CONTENT_TYPE, BINARY_CONTENT_TYPE_V2);
@@ -73,9 +62,4 @@ public class BinaryResponseParser extends ResponseParser {
   public String getVersion() {
     return "2";
   }
-
-  @Override
-  public NamedList<Object> processResponse(Reader reader) {
-    throw new RuntimeException("Cannot handle character stream");
-  }
 }
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrClient.java 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrClient.java
index 277ab627684..e66d966eb32 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrClient.java
@@ -622,7 +622,7 @@ public class HttpSolrClient extends BaseHttpSolrClient {
       }
 
       final Collection<String> processorSupportedContentTypes = 
processor.getContentTypes();
-      if (processorSupportedContentTypes != null && 
!processorSupportedContentTypes.isEmpty()) {
+      if (!processorSupportedContentTypes.isEmpty()) {
         final Collection<String> processorMimeTypes =
             processorSupportedContentTypes.stream()
                 .map(ct -> 
ContentType.parse(ct).getMimeType().trim().toLowerCase(Locale.ROOT))
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrClientBase.java 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrClientBase.java
index adf655cb2c6..6246fea6465 100644
--- 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrClientBase.java
+++ 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrClientBase.java
@@ -322,7 +322,7 @@ public abstract class HttpSolrClientBase extends SolrClient 
{
       return;
     }
     final Collection<String> processorSupportedContentTypes = 
processor.getContentTypes();
-    if (processorSupportedContentTypes != null && 
!processorSupportedContentTypes.isEmpty()) {
+    if (!processorSupportedContentTypes.isEmpty()) {
       boolean processorAcceptsMimeType =
           processorAcceptsMimeType(processorSupportedContentTypes, mimeType);
       if (!processorAcceptsMimeType) {
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/InputStreamResponseParser.java
 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/InputStreamResponseParser.java
index 50ea192dea7..d70863fcca1 100644
--- 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/InputStreamResponseParser.java
+++ 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/InputStreamResponseParser.java
@@ -17,7 +17,7 @@
 package org.apache.solr.client.solrj.impl;
 
 import java.io.InputStream;
-import java.io.Reader;
+import java.util.Set;
 import org.apache.solr.client.solrj.ResponseParser;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
@@ -44,13 +44,13 @@ public class InputStreamResponseParser extends 
ResponseParser {
   }
 
   @Override
-  public NamedList<Object> processResponse(Reader reader) {
+  public NamedList<Object> processResponse(InputStream body, String encoding) {
     throw new UnsupportedOperationException();
   }
 
   @Override
-  public NamedList<Object> processResponse(InputStream body, String encoding) {
-    throw new UnsupportedOperationException();
+  public Set<String> getContentTypes() {
+    return Set.of(); // don't enforce
   }
 
   public static NamedList<Object> createInputStreamNamedList(
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/JsonMapResponseParser.java
 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/JsonMapResponseParser.java
index 6d388c728e3..8128bcb69a7 100644
--- 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/JsonMapResponseParser.java
+++ 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/JsonMapResponseParser.java
@@ -20,15 +20,18 @@ package org.apache.solr.client.solrj.impl;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.io.Reader;
+import java.util.Collection;
 import java.util.Map;
+import java.util.Set;
 import org.apache.solr.client.solrj.ResponseParser;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.NamedList;
 import org.noggit.JSONParser;
 import org.noggit.ObjectBuilder;
 
-/** ResponseParser for JsonMaps. */
+/**
+ * Parses the input as a JSON {@link Map}, and puts the entries onto the 
response {@link NamedList}.
+ */
 public class JsonMapResponseParser extends ResponseParser {
   @Override
   public String getWriterType() {
@@ -37,14 +40,14 @@ public class JsonMapResponseParser extends ResponseParser {
 
   @Override
   @SuppressWarnings({"unchecked"})
-  public NamedList<Object> processResponse(InputStream body, String encoding) {
+  public NamedList<Object> processResponse(InputStream body, String encoding) 
throws IOException {
     @SuppressWarnings({"rawtypes"})
     Map map = null;
     try (InputStreamReader reader =
         new InputStreamReader(body, encoding == null ? "UTF-8" : encoding)) {
       ObjectBuilder builder = new ObjectBuilder(new JSONParser(reader));
       map = (Map) builder.getObject();
-    } catch (IOException | JSONParser.ParseException e) {
+    } catch (JSONParser.ParseException e) {
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "JSON 
parsing error", e);
     }
     NamedList<Object> list = new NamedList<>();
@@ -53,13 +56,8 @@ public class JsonMapResponseParser extends ResponseParser {
   }
 
   @Override
-  public NamedList<Object> processResponse(Reader reader) {
-    throw new RuntimeException("Cannot handle character stream");
-  }
-
-  @Override
-  public String getContentType() {
-    return "application/json";
+  public Collection<String> getContentTypes() {
+    return Set.of("application/json");
   }
 
   @Override
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/NoOpResponseParser.java 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/NoOpResponseParser.java
index 92101918db5..61e40a9fd9a 100644
--- 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/NoOpResponseParser.java
+++ 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/NoOpResponseParser.java
@@ -21,6 +21,8 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.io.StringWriter;
+import java.util.Collection;
+import java.util.Set;
 import org.apache.solr.client.solrj.ResponseParser;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.NamedList;
@@ -30,24 +32,22 @@ import org.apache.solr.common.util.NamedList;
  */
 public class NoOpResponseParser extends ResponseParser {
 
-  private String writerType = "xml";
-
-  public NoOpResponseParser() {}
+  private final String writerType;
 
   public NoOpResponseParser(String writerType) {
     this.writerType = writerType;
   }
 
   @Override
-  public String getWriterType() {
+  public final String getWriterType() {
     return writerType;
   }
 
-  public void setWriterType(String writerType) {
-    this.writerType = writerType;
+  @Override
+  public Collection<String> getContentTypes() {
+    return Set.of();
   }
 
-  @Override
   public NamedList<Object> processResponse(Reader reader) {
     try {
       StringWriter writer = new StringWriter();
@@ -62,16 +62,12 @@ public class NoOpResponseParser extends ResponseParser {
   }
 
   @Override
-  public NamedList<Object> processResponse(InputStream body, String encoding) {
-    try {
-      StringWriter writer = new StringWriter();
-      new InputStreamReader(body, encoding == null ? "UTF-8" : 
encoding).transferTo(writer);
-      String output = writer.toString();
-      NamedList<Object> list = new NamedList<>();
-      list.add("response", output);
-      return list;
-    } catch (IOException e) {
-      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "parsing 
error", e);
-    }
+  public NamedList<Object> processResponse(InputStream body, String encoding) 
throws IOException {
+    StringWriter writer = new StringWriter();
+    new InputStreamReader(body, encoding == null ? "UTF-8" : 
encoding).transferTo(writer);
+    String output = writer.toString();
+    NamedList<Object> list = new NamedList<>();
+    list.add("response", output);
+    return list;
   }
 }
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/StreamingBinaryResponseParser.java
 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/StreamingBinaryResponseParser.java
index 62a0df519a1..7f8a8bec5a4 100644
--- 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/StreamingBinaryResponseParser.java
+++ 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/StreamingBinaryResponseParser.java
@@ -23,7 +23,6 @@ import org.apache.solr.client.solrj.FastStreamingDocsCallback;
 import org.apache.solr.client.solrj.StreamingResponseCallback;
 import org.apache.solr.common.SolrDocument;
 import org.apache.solr.common.SolrDocumentList;
-import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.DataEntry;
 import org.apache.solr.common.util.DataEntry.EntryListener;
 import org.apache.solr.common.util.DataInputInputStream;
@@ -53,15 +52,11 @@ public class StreamingBinaryResponseParser extends 
BinaryResponseParser {
   }
 
   @Override
-  public NamedList<Object> processResponse(InputStream body, String encoding) {
+  public NamedList<Object> processResponse(InputStream body, String encoding) 
throws IOException {
     if (callback != null) {
       return streamDocs(body);
     } else {
-      try {
-        return fastStreamDocs(body, fastCallback);
-      } catch (IOException e) {
-        throw new RuntimeException("Unable to parse", e);
-      }
+      return fastStreamDocs(body, fastCallback);
     }
   }
 
@@ -116,7 +111,7 @@ public class StreamingBinaryResponseParser extends 
BinaryResponseParser {
   private EntryListener docListener;
 
   @SuppressWarnings({"unchecked"})
-  private NamedList<Object> streamDocs(InputStream body) {
+  private NamedList<Object> streamDocs(InputStream body) throws IOException {
     try (JavaBinCodec codec =
         new JavaBinCodec() {
 
@@ -164,8 +159,6 @@ public class StreamingBinaryResponseParser extends 
BinaryResponseParser {
         }; ) {
 
       return (NamedList<Object>) codec.unmarshal(body);
-    } catch (IOException e) {
-      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "parsing 
error", e);
     }
   }
 }
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/XMLResponseParser.java 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/XMLResponseParser.java
index 83be4eee8fb..adf8d94d09f 100644
--- 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/XMLResponseParser.java
+++ 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/XMLResponseParser.java
@@ -25,6 +25,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Locale;
+import java.util.Set;
 import java.util.function.Function;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamConstants;
@@ -81,11 +82,10 @@ public class XMLResponseParser extends ResponseParser {
   }
 
   @Override
-  public String getContentType() {
-    return XML_CONTENT_TYPE;
+  public Set<String> getContentTypes() {
+    return Set.of(XML_CONTENT_TYPE);
   }
 
-  @Override
   public NamedList<Object> processResponse(Reader in) {
     XMLStreamReader parser = null;
     try {
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/request/DelegationTokenRequest.java
 
b/solr/solrj/src/java/org/apache/solr/client/solrj/request/DelegationTokenRequest.java
index 04271ba1832..6f19620142a 100644
--- 
a/solr/solrj/src/java/org/apache/solr/client/solrj/request/DelegationTokenRequest.java
+++ 
b/solr/solrj/src/java/org/apache/solr/client/solrj/request/DelegationTokenRequest.java
@@ -130,7 +130,7 @@ public abstract class DelegationTokenRequest<
     public Cancel(String token) {
       super(METHOD.PUT);
       this.token = token;
-      setResponseParser(new NoOpResponseParser());
+      setResponseParser(new NoOpResponseParser("xml"));
       setQueryParams(new TreeSet<>(Arrays.asList(OP_KEY, TOKEN_KEY)));
     }
 
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleCborTest.java 
b/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleCborTest.java
index d1c5835befd..4c3576b82f2 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleCborTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleCborTest.java
@@ -22,18 +22,17 @@ import com.fasterxml.jackson.dataformat.cbor.CBORGenerator;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.io.Reader;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import org.apache.solr.client.solrj.impl.BinaryRequestWriter;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
 import org.apache.solr.client.solrj.request.RequestWriter;
 import org.apache.solr.client.solrj.request.UpdateRequest;
 import org.apache.solr.common.SolrDocument;
 import org.apache.solr.common.SolrDocumentList;
-import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.util.NamedList;
 import org.junit.BeforeClass;
@@ -288,28 +287,29 @@ public class SolrExampleCborTest extends SolrExampleTests 
{
         return "cbor";
       }
 
+      @Override
+      public Set<String> getContentTypes() {
+        return Set.of("application/cbor", "application/octet-stream");
+      }
+
       @Override
       @SuppressWarnings({"rawtypes", "unchecked"})
-      public NamedList<Object> processResponse(InputStream b, String encoding) 
{
+      public NamedList<Object> processResponse(InputStream b, String encoding) 
throws IOException {
         ObjectMapper objectMapper = new ObjectMapper(new CBORFactory());
-        try {
-          Map m = (Map) objectMapper.readValue(b, Object.class);
-          NamedList nl = new NamedList();
-          m.forEach(
-              (k, v) -> {
-                if (v instanceof Map map) {
-                  if ("response".equals(k)) {
-                    v = convertResponse((Map) v);
-                  } else {
-                    v = new NamedList(map);
-                  }
+        Map m = (Map) objectMapper.readValue(b, Object.class);
+        NamedList nl = new NamedList();
+        m.forEach(
+            (k, v) -> {
+              if (v instanceof Map map) {
+                if ("response".equals(k)) {
+                  v = convertResponse((Map) v);
+                } else {
+                  v = new NamedList(map);
                 }
-                nl.add(k.toString(), v);
-              });
-          return nl;
-        } catch (IOException e) {
-          throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, 
"parsing error", e);
-        }
+              }
+              nl.add(k.toString(), v);
+            });
+        return nl;
       }
 
       @SuppressWarnings({"rawtypes", "unchecked"})
@@ -332,11 +332,6 @@ public class SolrExampleCborTest extends SolrExampleTests {
         }
         return sdl;
       }
-
-      @Override
-      public NamedList<Object> processResponse(Reader reader) {
-        return null;
-      }
     };
   }
 }
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpSolrClientBuilderTest.java
 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpSolrClientBuilderTest.java
index 6aba55d47bf..67260a588a5 100644
--- 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpSolrClientBuilderTest.java
+++ 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpSolrClientBuilderTest.java
@@ -31,7 +31,7 @@ import org.junit.Test;
 public class HttpSolrClientBuilderTest extends SolrTestCase {
   private static final String ANY_BASE_SOLR_URL = "ANY_BASE_SOLR_URL";
   private static final HttpClient ANY_HTTP_CLIENT = 
HttpClientBuilder.create().build();
-  private static final ResponseParser ANY_RESPONSE_PARSER = new 
NoOpResponseParser();
+  private static final ResponseParser ANY_RESPONSE_PARSER = new 
NoOpResponseParser("xml");
 
   @Test(expected = IllegalArgumentException.class)
   public void testBaseSolrUrlIsRequired() {
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/LBHttpSolrClientBuilderTest.java
 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/LBHttpSolrClientBuilderTest.java
index 03f1413845d..3c6e4ce5f15 100644
--- 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/LBHttpSolrClientBuilderTest.java
+++ 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/LBHttpSolrClientBuilderTest.java
@@ -30,7 +30,7 @@ import org.junit.Test;
 public class LBHttpSolrClientBuilderTest extends SolrTestCase {
   private static final String ANY_BASE_SOLR_URL = "ANY_BASE_SOLR_URL";
   private static final HttpClient ANY_HTTP_CLIENT = 
HttpClientBuilder.create().build();
-  private static final ResponseParser ANY_RESPONSE_PARSER = new 
NoOpResponseParser();
+  private static final ResponseParser ANY_RESPONSE_PARSER = new 
NoOpResponseParser("xml");
 
   @Test
   public void providesHttpClientToClient() {
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/response/NoOpResponseParserTest.java
 
b/solr/solrj/src/test/org/apache/solr/client/solrj/response/NoOpResponseParserTest.java
index e8b916f3482..1895a5477fb 100644
--- 
a/solr/solrj/src/test/org/apache/solr/client/solrj/response/NoOpResponseParserTest.java
+++ 
b/solr/solrj/src/test/org/apache/solr/client/solrj/response/NoOpResponseParserTest.java
@@ -73,7 +73,7 @@ public class NoOpResponseParserTest extends SolrJettyTestBase 
{
     try (SolrClient client =
         new HttpSolrClient.Builder(getBaseUrl())
             .withDefaultCollection(DEFAULT_TEST_CORENAME)
-            .withResponseParser(new NoOpResponseParser())
+            .withResponseParser(new NoOpResponseParser("xml"))
             .build()) {
       SolrQuery query = new SolrQuery("id:1234");
       QueryRequest req = new QueryRequest(query);
@@ -99,7 +99,7 @@ public class NoOpResponseParserTest extends SolrJettyTestBase 
{
   /** Parse response from java.io.Reader. */
   @Test
   public void testReaderResponse() throws Exception {
-    NoOpResponseParser parser = new NoOpResponseParser();
+    NoOpResponseParser parser = new NoOpResponseParser("xml");
     try (final InputStream is = getResponse()) {
       assertNotNull(is);
       Reader in = new InputStreamReader(is, StandardCharsets.UTF_8);
@@ -113,7 +113,7 @@ public class NoOpResponseParserTest extends 
SolrJettyTestBase {
   /** Parse response from java.io.InputStream. */
   @Test
   public void testInputStreamResponse() throws Exception {
-    NoOpResponseParser parser = new NoOpResponseParser();
+    NoOpResponseParser parser = new NoOpResponseParser("xml");
     try (final InputStream is = getResponse()) {
       assertNotNull(is);
       NamedList<Object> response = parser.processResponse(is, "UTF-8");

Reply via email to