This is an automated email from the ASF dual-hosted git repository.
epugh 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 4a584a6042b SOLR-17935: Migrate away from NoOpResponseParser (#3710)
4a584a6042b is described below
commit 4a584a6042b263f28f00dc0157db30feae54b5e1
Author: Eric Pugh <[email protected]>
AuthorDate: Mon Oct 6 13:22:02 2025 -0400
SOLR-17935: Migrate away from NoOpResponseParser (#3710)
Primarily move to using InputStreamResponseParser, or an explicit
JsonMapResponseParser or XmlResponseParser in a few cases.
The bulk of the migration was to update tests.
Since converting from an inputstream to a string was a common use case, we
added a helper method on InputStreamResponseParser.
---------
Co-authored-by: David Smiley <[email protected]>
---
solr/CHANGES.txt | 2 +
.../solr/bench/search/QueryResponseWriters.java | 4 +-
.../src/java/org/apache/solr/cli/DeleteTool.java | 3 +-
.../apache/solr/cloud/TestRandomFlRTGCloud.java | 10 +--
.../cloud/api/collections/TestCollectionAPI.java | 8 +--
.../apache/solr/handler/V2ApiIntegrationTest.java | 11 ++--
.../handler/admin/ShowFileRequestHandlerTest.java | 31 +++++----
.../response/TestPrometheusResponseWriter.java | 13 ++--
.../apache/solr/response/TestRawTransformer.java | 40 ++++++++----
.../prometheus/exporter/SolrClientFactory.java | 6 +-
.../solr/prometheus/scraper/SolrScraper.java | 4 +-
.../prometheus/scraper/SolrStandaloneScraper.java | 5 +-
.../org/apache/solr/prometheus/utils/Helpers.java | 7 +-
.../solr/client/solrj/impl/HttpSolrClientBase.java | 4 +-
.../solrj/impl/InputStreamResponseParser.java | 30 ++++++++-
.../solr/client/solrj/impl/NoOpResponseParser.java | 76 ----------------------
.../solrj/request/DelegationTokenRequest.java | 4 +-
.../apache/solr/client/solrj/SolrExampleTests.java | 22 +++++--
.../solrj/impl/HttpSolrClientBuilderTest.java | 2 +-
.../solrj/impl/LBHttpSolrClientBuilderTest.java | 2 +-
...est.java => InputStreamResponseParserTest.java} | 35 ++--------
.../src/java/org/apache/solr/SolrTestCaseHS.java | 6 +-
22 files changed, 145 insertions(+), 180 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 8a04af0532d..a9031067e4e 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -185,6 +185,8 @@ Deprecation Removals
* SOLR-17925: Remove obsolete QueryCommand.timeAllowed replaced by
QueryLimits. (Andrzej Bialecki)
+* SOLR-17935: Remove deprecated NoOpResponseParser. (Eric Pugh, David Smiley)
+
Dependency Upgrades
---------------------
diff --git
a/solr/benchmark/src/java/org/apache/solr/bench/search/QueryResponseWriters.java
b/solr/benchmark/src/java/org/apache/solr/bench/search/QueryResponseWriters.java
index 111a1d6ac50..2a7088f88d4 100644
---
a/solr/benchmark/src/java/org/apache/solr/bench/search/QueryResponseWriters.java
+++
b/solr/benchmark/src/java/org/apache/solr/bench/search/QueryResponseWriters.java
@@ -26,7 +26,7 @@ import org.apache.solr.bench.Docs;
import org.apache.solr.bench.MiniClusterState;
import org.apache.solr.bench.MiniClusterState.MiniClusterBenchState;
import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.impl.NoOpResponseParser;
+import org.apache.solr.client.solrj.impl.InputStreamResponseParser;
import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
@@ -86,7 +86,7 @@ public class QueryResponseWriters {
params.set(CommonParams.WT, wt);
params.set(CommonParams.ROWS, docs);
q = new QueryRequest(params);
- q.setResponseParser(new NoOpResponseParser(wt));
+ q.setResponseParser(new InputStreamResponseParser(wt));
String base = miniClusterState.nodes.get(0);
}
}
diff --git a/solr/core/src/java/org/apache/solr/cli/DeleteTool.java
b/solr/core/src/java/org/apache/solr/cli/DeleteTool.java
index c63ba852aed..ce330576a71 100644
--- a/solr/core/src/java/org/apache/solr/cli/DeleteTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/DeleteTool.java
@@ -30,7 +30,6 @@ import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.impl.Http2SolrClient;
import org.apache.solr.client.solrj.impl.JsonMapResponseParser;
-import org.apache.solr.client.solrj.impl.NoOpResponseParser;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.CoreAdminRequest;
import org.apache.solr.common.cloud.ZkStateReader;
@@ -226,7 +225,7 @@ public class DeleteTool extends ToolBase {
unloadRequest.setDeleteDataDir(true);
unloadRequest.setDeleteInstanceDir(true);
unloadRequest.setCoreName(coreName);
- unloadRequest.setResponseParser(new NoOpResponseParser("json"));
+ unloadRequest.setResponseParser(new JsonMapResponseParser());
response = solrClient.request(unloadRequest);
} catch (SolrServerException sse) {
throw new Exception("Failed to delete core '" + coreName + "' due to: "
+ sse.getMessage());
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 9def712aeab..4b9d0bde0d4 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestRandomFlRTGCloud.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestRandomFlRTGCloud.java
@@ -42,7 +42,7 @@ import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
-import org.apache.solr.client.solrj.impl.NoOpResponseParser;
+import org.apache.solr.client.solrj.impl.InputStreamResponseParser;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.QueryRequest;
@@ -423,8 +423,10 @@ public class TestRandomFlRTGCloud extends
SolrCloudTestCase {
}
}
- private static final ResponseParser RAW_XML_RESPONSE_PARSER = new
NoOpResponseParser("xml");
- private static final ResponseParser RAW_JSON_RESPONSE_PARSER = new
NoOpResponseParser("json");
+ private static final ResponseParser RAW_XML_RESPONSE_PARSER =
+ new InputStreamResponseParser("xml");
+ private static final ResponseParser RAW_JSON_RESPONSE_PARSER =
+ new InputStreamResponseParser("json");
/** Helper to convert from wt string parameter to actual SolrClient. */
private static SolrClient getSolrClient(final String jettyBaseUrl, final
String wt) {
@@ -526,7 +528,7 @@ public class TestRandomFlRTGCloud extends SolrCloudTestCase
{
final NamedList<Object> nlRsp = client.request(new QueryRequest(params));
assertNotNull(params.toString(), nlRsp);
rsp = nlRsp;
- final String textResult = (String) nlRsp.get("response");
+ final String textResult =
InputStreamResponseParser.consumeResponseToString(nlRsp);
switch (wt) {
case "json":
docs = getDocsFromJsonResponse(askForList, textResult);
diff --git
a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java
b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java
index adba8db8ab3..7898520960e 100644
---
a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java
+++
b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestCollectionAPI.java
@@ -31,7 +31,7 @@ import org.apache.solr.client.solrj.SolrRequest.METHOD;
import org.apache.solr.client.solrj.SolrRequest.SolrRequestType;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
-import org.apache.solr.client.solrj.impl.NoOpResponseParser;
+import org.apache.solr.client.solrj.impl.InputStreamResponseParser;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.GenericSolrRequest;
import org.apache.solr.client.solrj.response.CollectionAdminResponse;
@@ -665,9 +665,9 @@ public class TestCollectionAPI extends
ReplicaPropertiesBase {
params.set("wt", "json");
var request =
new GenericSolrRequest(METHOD.GET, "/admin/collections",
SolrRequestType.ADMIN, params);
- request.setResponseParser(new NoOpResponseParser("json"));
- NamedList<Object> rsp = client.request(request);
- String actualResponse = (String) rsp.get("response");
+ request.setResponseParser(new InputStreamResponseParser("json"));
+ NamedList<Object> res = client.request(request);
+ String actualResponse =
InputStreamResponseParser.consumeResponseToString(res);
Map<String, Object> result = mapper.readValue(actualResponse, Map.class);
diff --git
a/solr/core/src/test/org/apache/solr/handler/V2ApiIntegrationTest.java
b/solr/core/src/test/org/apache/solr/handler/V2ApiIntegrationTest.java
index 438251f8c3d..b8819db6652 100644
--- a/solr/core/src/test/org/apache/solr/handler/V2ApiIntegrationTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/V2ApiIntegrationTest.java
@@ -32,9 +32,9 @@ import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CloudLegacySolrClient;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
+import org.apache.solr.client.solrj.impl.InputStreamResponseParser;
import org.apache.solr.client.solrj.impl.JavaBinResponseParser;
import org.apache.solr.client.solrj.impl.JsonMapResponseParser;
-import org.apache.solr.client.solrj.impl.NoOpResponseParser;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.V2Request;
@@ -117,10 +117,9 @@ public class V2ApiIntegrationTest extends
SolrCloudTestCase {
public void testWTParam() throws Exception {
V2Request request = new V2Request.Builder("/c/" + COLL_NAME +
"/get/_introspect").build();
// TODO: If possible do this in a better way
- request.setResponseParser(new NoOpResponseParser("bleh"));
-
- Map<?, ?> resp = resAsMap(cluster.getSolrClient(), request);
- String respString = resp.toString();
+ request.setResponseParser(new InputStreamResponseParser("bleh"));
+ NamedList<Object> res = cluster.getSolrClient().request(request);
+ String respString = InputStreamResponseParser.consumeResponseToString(res);
assertFalse(respString.contains("<body><h2>HTTP ERROR 500</h2>"));
assertFalse(respString.contains("500"));
@@ -133,7 +132,7 @@ public class V2ApiIntegrationTest extends SolrCloudTestCase
{
// no response parser
request.setResponseParser(null);
- resp = resAsMap(cluster.getSolrClient(), request);
+ Map<?, ?> resp = resAsMap(cluster.getSolrClient(), request);
respString = resp.toString();
assertFalse(respString.contains("<body><h2>HTTP ERROR 500</h2>"));
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 8d81487abd0..2edb04cb47b 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
@@ -26,7 +26,7 @@ import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrRequest.SolrRequestType;
import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.impl.NoOpResponseParser;
+import org.apache.solr.client.solrj.impl.InputStreamResponseParser;
import org.apache.solr.client.solrj.request.GenericSolrRequest;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.ModifiableSolrParams;
@@ -145,34 +145,36 @@ public class ShowFileRequestHandlerTest extends
SolrJettyTestBase {
assertEquals("application/xml", content.getContentType());
}
- public void testIllegalContentType() {
+ public void testIllegalContentType() throws SolrServerException, IOException
{
SolrClient client = getSolrClient();
var request =
createShowFileRequest(params("file", "managed-schema", "contentType",
"not/known"));
- request.setResponseParser(new NoOpResponseParser("xml"));
- expectThrows(SolrException.class, () -> client.request(request));
+ request.setResponseParser(new InputStreamResponseParser("xml"));
+ NamedList<Object> response = client.request(request);
+ assertEquals(response.get("responseStatus"), 404);
}
- public void testAbsoluteFilename() {
+ public void testAbsoluteFilename() throws SolrServerException, IOException {
SolrClient client = getSolrClient();
final var request =
createShowFileRequest(
params("file", "/etc/passwd", "contentType", "text/plain;
charset=utf-8"));
- request.setResponseParser(new NoOpResponseParser("xml"));
- expectThrows(SolrException.class, () -> client.request(request));
+ request.setResponseParser(new InputStreamResponseParser("xml"));
+ NamedList<Object> response = client.request(request);
+ assertEquals(response.get("responseStatus"), 404);
}
- public void testEscapeConfDir() {
+ public void testEscapeConfDir() throws SolrServerException, IOException {
SolrClient client = getSolrClient();
final var request =
createShowFileRequest(
params("file", "../../solr.xml", "contentType", "application/xml;
charset=utf-8"));
- request.setResponseParser(new NoOpResponseParser("xml"));
- var ex = expectThrows(SolrException.class, () -> client.request(request));
- assertTrue(ex instanceof SolrClient.RemoteSolrException);
+ request.setResponseParser(new InputStreamResponseParser("xml"));
+ NamedList<Object> response = client.request(request);
+ assertEquals(response.get("responseStatus"), 400);
}
- public void testPathTraversalFilename() {
+ public void testPathTraversalFilename() throws SolrServerException,
IOException {
SolrClient client = getSolrClient();
final var request =
createShowFileRequest(
@@ -181,8 +183,9 @@ public class ShowFileRequestHandlerTest extends
SolrJettyTestBase {
"../../../../../../etc/passwd",
"contentType",
"text/plain; charset=utf-8"));
- request.setResponseParser(new NoOpResponseParser("xml"));
- expectThrows(SolrException.class, () -> client.request(request));
+ request.setResponseParser(new InputStreamResponseParser("xml"));
+ NamedList<Object> response = client.request(request);
+ assertEquals(response.get("responseStatus"), 400);
}
public void testGetSafeContentType() {
diff --git
a/solr/core/src/test/org/apache/solr/response/TestPrometheusResponseWriter.java
b/solr/core/src/test/org/apache/solr/response/TestPrometheusResponseWriter.java
index f52b76d5706..89bf0b722aa 100644
---
a/solr/core/src/test/org/apache/solr/response/TestPrometheusResponseWriter.java
+++
b/solr/core/src/test/org/apache/solr/response/TestPrometheusResponseWriter.java
@@ -32,7 +32,7 @@ import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrRequest.METHOD;
import org.apache.solr.client.solrj.SolrRequest.SolrRequestType;
-import org.apache.solr.client.solrj.impl.NoOpResponseParser;
+import org.apache.solr.client.solrj.impl.InputStreamResponseParser;
import org.apache.solr.client.solrj.request.GenericSolrRequest;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.util.NamedList;
@@ -83,12 +83,11 @@ public class TestPrometheusResponseWriter extends
SolrTestCaseJ4 {
ModifiableSolrParams params = new ModifiableSolrParams();
params.set("wt", "prometheus");
var req = new GenericSolrRequest(METHOD.GET, "/admin/metrics",
SolrRequestType.ADMIN, params);
- req.setResponseParser(new NoOpResponseParser("prometheus"));
+ req.setResponseParser(new InputStreamResponseParser("prometheus"));
try (SolrClient adminClient =
getHttpSolrClient(solrClientTestRule.getBaseUrl())) {
NamedList<Object> res = adminClient.request(req);
- assertNotNull("null response from server", res);
- String output = (String) res.get("response");
+ String output = InputStreamResponseParser.consumeResponseToString(res);
Set<String> seenTypeInfo = new HashSet<>();
@@ -138,12 +137,12 @@ public class TestPrometheusResponseWriter extends
SolrTestCaseJ4 {
ModifiableSolrParams params = new ModifiableSolrParams();
params.set("wt", "prometheus");
var req = new GenericSolrRequest(METHOD.GET, "/admin/metrics",
SolrRequestType.ADMIN, params);
- req.setResponseParser(new NoOpResponseParser("prometheus"));
+ req.setResponseParser(new InputStreamResponseParser("prometheus"));
try (SolrClient adminClient =
getHttpSolrClient(solrClientTestRule.getBaseUrl())) {
NamedList<Object> res = adminClient.request(req);
- assertNotNull("null response from server", res);
- String output = (String) res.get("response");
+ String output = InputStreamResponseParser.consumeResponseToString(res);
+
assertEquals(
expectedCore,
output
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 cf492623407..ed581e24ef3 100644
--- a/solr/core/src/test/org/apache/solr/response/TestRawTransformer.java
+++ b/solr/core/src/test/org/apache/solr/response/TestRawTransformer.java
@@ -27,13 +27,14 @@ import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
-import org.apache.solr.client.solrj.impl.NoOpResponseParser;
+import org.apache.solr.client.solrj.impl.InputStreamResponseParser;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.cloud.MiniSolrCloudCluster;
import org.apache.solr.cloud.SolrCloudTestCase;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.util.NamedList;
import org.apache.solr.embedded.JettyConfig;
import org.apache.solr.embedded.JettySolrRunner;
import org.junit.After;
@@ -184,8 +185,10 @@ public class TestRawTransformer extends SolrCloudTestCase {
new String[] {"author:[xml],content_type:[xml]"},
"wt",
new String[] {"xml"})));
- req.setResponseParser(XML_NOOP_RESPONSE_PARSER);
- String strResponse = (String) CLIENT.request(req,
"collection1").get("response");
+ req.setResponseParser(XML_STREAM_RESPONSE_PARSER);
+ NamedList<Object> rsp = CLIENT.request(req, "collection1");
+ String strResponse =
InputStreamResponseParser.consumeResponseToString(rsp);
+
assertTrue(
"response does not contain raw XML encoding: " + strResponse,
strResponse.contains(
@@ -207,8 +210,10 @@ public class TestRawTransformer extends SolrCloudTestCase {
new String[] {"author,content_type"},
"wt",
new String[] {"xml"})));
- req.setResponseParser(XML_NOOP_RESPONSE_PARSER);
- strResponse = (String) CLIENT.request(req, "collection1").get("response");
+ req.setResponseParser(XML_STREAM_RESPONSE_PARSER);
+ rsp = CLIENT.request(req, "collection1");
+ strResponse = InputStreamResponseParser.consumeResponseToString(rsp);
+
assertTrue(
"response does not contain escaped XML encoding: " + strResponse,
strResponse.contains("<str name=\"author\"><root><child1"));
@@ -228,8 +233,10 @@ public class TestRawTransformer extends SolrCloudTestCase {
new String[] {"author:[xml],content_type:[xml]"},
"wt",
new String[] {"json"})));
- req.setResponseParser(JSON_NOOP_RESPONSE_PARSER);
- strResponse = (String) CLIENT.request(req, "collection1").get("response");
+ req.setResponseParser(JSON_STREAM_RESPONSE_PARSER);
+ rsp = CLIENT.request(req, "collection1");
+ strResponse = InputStreamResponseParser.consumeResponseToString(rsp);
+
assertTrue(
"unexpected serialization of XML field value in JSON response: " +
strResponse,
strResponse.contains("\"author\":\"<root><child1>some</child1>"));
@@ -251,8 +258,10 @@ public class TestRawTransformer extends SolrCloudTestCase {
new String[] {"subject:[json],links:[json]"},
"wt",
new String[] {"json"})));
- req.setResponseParser(JSON_NOOP_RESPONSE_PARSER);
- String strResponse = (String) CLIENT.request(req,
"collection1").get("response");
+ req.setResponseParser(JSON_STREAM_RESPONSE_PARSER);
+ NamedList<Object> rsp = CLIENT.request(req, "collection1");
+ String strResponse =
InputStreamResponseParser.consumeResponseToString(rsp);
+
assertTrue(
"response does not contain right JSON encoding: " + strResponse,
strResponse.contains("\"subject\":{poffL:[{offL:[{oGUID:\"7"));
@@ -272,8 +281,10 @@ public class TestRawTransformer extends SolrCloudTestCase {
new String[] {"id", "subject,links"},
"wt",
new String[] {"json"})));
- req.setResponseParser(JSON_NOOP_RESPONSE_PARSER);
- strResponse = (String) CLIENT.request(req, "collection1").get("response");
+ req.setResponseParser(JSON_STREAM_RESPONSE_PARSER);
+ rsp = CLIENT.request(req, "collection1");
+ strResponse = InputStreamResponseParser.consumeResponseToString(rsp);
+
assertTrue(
"response does not contain right JSON encoding: " + strResponse,
strResponse.contains("subject\":\""));
@@ -282,7 +293,8 @@ public class TestRawTransformer extends SolrCloudTestCase {
strResponse.contains("\"links\":[\""));
}
- private static final NoOpResponseParser XML_NOOP_RESPONSE_PARSER = new
NoOpResponseParser("xml");
- private static final NoOpResponseParser JSON_NOOP_RESPONSE_PARSER =
- new NoOpResponseParser("json");
+ private static final InputStreamResponseParser XML_STREAM_RESPONSE_PARSER =
+ new InputStreamResponseParser("xml");
+ private static final InputStreamResponseParser JSON_STREAM_RESPONSE_PARSER =
+ new InputStreamResponseParser("json");
}
diff --git
a/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/SolrClientFactory.java
b/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/SolrClientFactory.java
index ede2495c452..76e722b6d9a 100644
---
a/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/SolrClientFactory.java
+++
b/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/SolrClientFactory.java
@@ -25,7 +25,7 @@ import org.apache.solr.client.solrj.embedded.SSLConfig;
import org.apache.solr.client.solrj.impl.CloudHttp2SolrClient;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.impl.Http2SolrClient;
-import org.apache.solr.client.solrj.impl.NoOpResponseParser;
+import org.apache.solr.client.solrj.impl.InputStreamResponseParser;
import org.apache.zookeeper.client.ConnectStringParser;
public class SolrClientFactory {
@@ -45,7 +45,7 @@ public class SolrClientFactory {
new Http2SolrClient.Builder(solrHost)
.withIdleTimeout(settings.getHttpReadTimeout(),
TimeUnit.MILLISECONDS)
.withConnectionTimeout(settings.getHttpConnectionTimeout(),
TimeUnit.MILLISECONDS)
- .withResponseParser(new NoOpResponseParser("json"));
+ .withResponseParser(new InputStreamResponseParser("json"));
if (configuration.getBasicAuthUser() != null) {
builder.withBasicAuthCredentials(
configuration.getBasicAuthUser(), configuration.getBasicAuthPwd());
@@ -77,7 +77,7 @@ public class SolrClientFactory {
CloudSolrClient client =
new CloudHttp2SolrClient.Builder(zkHosts,
Optional.ofNullable(parser.getChrootPath()))
.withInternalClientBuilder(newHttp2SolrClientBuilder(null,
settings, configuration))
- .withResponseParser(new NoOpResponseParser("json"))
+ .withResponseParser(new InputStreamResponseParser("json"))
.build();
client.connect();
diff --git
a/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/scraper/SolrScraper.java
b/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/scraper/SolrScraper.java
index e66b228c67d..474ed48ecc5 100644
---
a/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/scraper/SolrScraper.java
+++
b/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/scraper/SolrScraper.java
@@ -43,6 +43,7 @@ import
org.apache.solr.client.solrj.SolrRequest.SolrRequestType;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.impl.Http2SolrClient;
+import org.apache.solr.client.solrj.impl.InputStreamResponseParser;
import org.apache.solr.client.solrj.request.GenericSolrRequest;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.prometheus.collector.MetricSamples;
@@ -166,7 +167,8 @@ public abstract class SolrScraper implements Closeable {
return samples;
}
- JsonNode jsonNode = OBJECT_MAPPER.readTree((String)
response.get("response"));
+ JsonNode jsonNode =
+
OBJECT_MAPPER.readTree(InputStreamResponseParser.consumeResponseToString(response));
for (JsonQuery jsonQuery : query.getJsonQueries()) {
try {
diff --git
a/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/scraper/SolrStandaloneScraper.java
b/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/scraper/SolrStandaloneScraper.java
index 734279653f8..338c1d81c20 100644
---
a/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/scraper/SolrStandaloneScraper.java
+++
b/solr/prometheus-exporter/src/java/org/apache/solr/prometheus/scraper/SolrStandaloneScraper.java
@@ -26,6 +26,7 @@ import java.util.Set;
import java.util.concurrent.ExecutorService;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.Http2SolrClient;
+import org.apache.solr.client.solrj.impl.InputStreamResponseParser;
import org.apache.solr.client.solrj.request.CoreAdminRequest;
import org.apache.solr.common.params.CoreAdminParams;
import org.apache.solr.common.util.IOUtils;
@@ -93,7 +94,9 @@ public class SolrStandaloneScraper extends SolrScraper {
}
JsonNode statusJsonNode =
- OBJECT_MAPPER.readTree((String)
coreAdminResponse.get("response")).get("status");
+ OBJECT_MAPPER
+
.readTree(InputStreamResponseParser.consumeResponseToString(coreAdminResponse))
+ .get("status");
for (JsonNode jsonNode : statusJsonNode) {
cores.add(jsonNode.get("name").textValue());
diff --git
a/solr/prometheus-exporter/src/test/org/apache/solr/prometheus/utils/Helpers.java
b/solr/prometheus-exporter/src/test/org/apache/solr/prometheus/utils/Helpers.java
index ca14a499e2d..ac8af2bc4c5 100644
---
a/solr/prometheus-exporter/src/test/org/apache/solr/prometheus/utils/Helpers.java
+++
b/solr/prometheus-exporter/src/test/org/apache/solr/prometheus/utils/Helpers.java
@@ -25,7 +25,9 @@ import java.util.stream.Stream;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.impl.JsonMapResponseParser;
import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest;
+import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.common.util.Pair;
import org.apache.solr.prometheus.PrometheusExporterTestBase;
import org.apache.solr.prometheus.exporter.MetricsConfiguration;
@@ -44,6 +46,7 @@ public class Helpers {
.forEach(
xml -> {
ContentStreamUpdateRequest req = new
ContentStreamUpdateRequest("/update");
+ req.setResponseParser(new JsonMapResponseParser());
try {
req.addFile(xml, "application/xml");
client.request(req, PrometheusExporterTestBase.COLLECTION);
@@ -51,7 +54,9 @@ public class Helpers {
throw new RuntimeException(e);
}
});
- client.commit(PrometheusExporterTestBase.COLLECTION);
+ var request = new UpdateRequest();
+ request.setResponseParser(new JsonMapResponseParser());
+ request.commit(client, PrometheusExporterTestBase.COLLECTION);
}
}
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 e1056c20e01..987342e9374 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
@@ -221,9 +221,7 @@ public abstract class HttpSolrClientBase extends SolrClient
{
}
Object error = rsp == null ? null : rsp.get("error");
- if (rsp != null && error == null && processor instanceof
NoOpResponseParser) {
- error = rsp.get("response");
- }
+
if (error != null
&& (String.valueOf(getObjectByPath(error, true, errPath))
.endsWith("ExceptionWithErrObject"))) {
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 d70863fcca1..9da5117d046 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
@@ -16,7 +16,12 @@
*/
package org.apache.solr.client.solrj.impl;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.StringWriter;
+import java.nio.charset.StandardCharsets;
import java.util.Set;
import org.apache.solr.client.solrj.ResponseParser;
import org.apache.solr.common.util.NamedList;
@@ -38,14 +43,35 @@ public class InputStreamResponseParser extends
ResponseParser {
this.writerType = writerType;
}
+ /**
+ * When using a {@link InputStreamResponseParser}, the raw output is
available in the response
+ * under the key {@link #STREAM_KEY}.
+ */
+ public static String consumeResponseToString(NamedList<Object> response)
throws IOException {
+ assert response != null;
+ String output;
+ // Would be nice to validate the STREAM_KEY value is present
+ try (InputStream responseStream = (InputStream) response.get(STREAM_KEY)) {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ responseStream.transferTo(baos);
+ output = baos.toString(StandardCharsets.UTF_8);
+ }
+ return output;
+ }
+
@Override
public String getWriterType() {
return writerType;
}
@Override
- public NamedList<Object> processResponse(InputStream body, String encoding) {
- throw new UnsupportedOperationException();
+ 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;
}
@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
deleted file mode 100644
index 26da43787d2..00000000000
---
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/NoOpResponseParser.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-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.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;
-
-/**
- * A special parser that puts the entire response into a string "response"
field in the NamedList.
- *
- * @deprecated see {@link InputStreamResponseParser instead}; more efficient
- */
-@Deprecated
-public class NoOpResponseParser extends ResponseParser {
-
- private final String writerType;
-
- public NoOpResponseParser(String writerType) {
- this.writerType = writerType;
- }
-
- @Override
- public final String getWriterType() {
- return writerType;
- }
-
- @Override
- public Collection<String> getContentTypes() {
- return Set.of();
- }
-
- public NamedList<Object> processResponse(Reader reader) {
- try {
- StringWriter writer = new StringWriter();
- reader.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);
- }
- }
-
- @Override
- 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/request/DelegationTokenRequest.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/request/DelegationTokenRequest.java
index fc7a6a38cd3..3d4693ae6c0 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
@@ -20,8 +20,8 @@ package org.apache.solr.client.solrj.request;
import java.util.Arrays;
import java.util.TreeSet;
import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.impl.InputStreamResponseParser;
import org.apache.solr.client.solrj.impl.JsonMapResponseParser;
-import org.apache.solr.client.solrj.impl.NoOpResponseParser;
import org.apache.solr.client.solrj.response.DelegationTokenResponse;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
@@ -120,7 +120,7 @@ public abstract class DelegationTokenRequest<
public Cancel(String token) {
super(METHOD.PUT);
this.token = token;
- setResponseParser(new NoOpResponseParser("xml"));
+ setResponseParser(new InputStreamResponseParser("xml"));
setQueryParams(new TreeSet<>(Arrays.asList(OP_KEY, TOKEN_KEY)));
}
diff --git
a/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTests.java
b/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTests.java
index 2fc66ad7913..8ed1d9ded4d 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTests.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTests.java
@@ -21,11 +21,13 @@ import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.core.StringContains.containsString;
import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.invoke.MethodHandles;
import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
@@ -43,8 +45,8 @@ import
org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
import org.apache.solr.client.solrj.embedded.SolrExampleStreamingHttp2Test;
import
org.apache.solr.client.solrj.embedded.SolrExampleStreamingTest.ErrorTrackingConcurrentUpdateSolrClient;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
+import org.apache.solr.client.solrj.impl.InputStreamResponseParser;
import org.apache.solr.client.solrj.impl.JavaBinResponseParser;
-import org.apache.solr.client.solrj.impl.NoOpResponseParser;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.client.solrj.request.AbstractUpdateRequest;
import org.apache.solr.client.solrj.request.AbstractUpdateRequest.ACTION;
@@ -871,9 +873,15 @@ public abstract class SolrExampleTests extends
SolrExampleTestsBase {
query.set(CommonParams.WT, "json");
req = new QueryRequest(query);
- req.setResponseParser(new NoOpResponseParser("json"));
+ req.setResponseParser(new InputStreamResponseParser("json"));
NamedList<Object> resp = client.request(req);
String raw = (String) resp.get("response");
+ try (InputStream responseStream =
+ (InputStream) resp.get(InputStreamResponseParser.STREAM_KEY)) {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ responseStream.transferTo(baos);
+ raw = baos.toString(StandardCharsets.UTF_8);
+ }
// Check that the response parses as JSON
JSONParser parser = new JSONParser(raw);
@@ -885,13 +893,17 @@ public abstract class SolrExampleTests extends
SolrExampleTestsBase {
assertTrue(raw.indexOf('"' + rawXml + '"') > 0); // quoted xml
// Check raw XML Output
- req.setResponseParser(new NoOpResponseParser("xml"));
query.set("fl", "id,json_s:[json],xml_s:[xml]");
query.set(CommonParams.WT, "xml");
req = new QueryRequest(query);
- req.setResponseParser(new NoOpResponseParser("xml"));
+ req.setResponseParser(new InputStreamResponseParser("xml"));
resp = client.request(req);
- raw = (String) resp.get("response");
+ try (InputStream responseStream =
+ (InputStream) resp.get(InputStreamResponseParser.STREAM_KEY)) {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ responseStream.transferTo(baos);
+ raw = baos.toString(StandardCharsets.UTF_8);
+ }
// Check that we get raw xml and json is escaped
assertTrue(raw.indexOf('>' + rawJson + '<') > 0); // escaped
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 e3a8e4618fb..f1b79749742 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("xml");
+ private static final ResponseParser ANY_RESPONSE_PARSER = new
InputStreamResponseParser("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 edd562868eb..d2f31d05424 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("xml");
+ private static final ResponseParser ANY_RESPONSE_PARSER = new
InputStreamResponseParser("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/InputStreamResponseParserTest.java
similarity index 75%
rename from
solr/solrj/src/test/org/apache/solr/client/solrj/response/NoOpResponseParserTest.java
rename to
solr/solrj/src/test/org/apache/solr/client/solrj/response/InputStreamResponseParserTest.java
index 1895a5477fb..e6ec1082982 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/InputStreamResponseParserTest.java
@@ -19,8 +19,6 @@ package org.apache.solr.client.solrj.response;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
import java.nio.charset.StandardCharsets;
import java.util.List;
import org.apache.solr.SolrJettyTestBase;
@@ -29,7 +27,7 @@ import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
-import org.apache.solr.client.solrj.impl.NoOpResponseParser;
+import org.apache.solr.client.solrj.impl.InputStreamResponseParser;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.common.SolrDocument;
@@ -39,13 +37,8 @@ import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
-/**
- * A test for parsing Solr response from query by NoOpResponseParser.
- *
- * @see org.apache.solr.client.solrj.impl.NoOpResponseParser
- * @see <a href="https://issues.apache.org/jira/browse/SOLR-5530">SOLR-5530</a>
- */
-public class NoOpResponseParserTest extends SolrJettyTestBase {
+/** A test for parsing Solr response from query by InputStreamResponseParser.
*/
+public class InputStreamResponseParserTest extends SolrJettyTestBase {
private static InputStream getResponse() {
return new ByteArrayInputStream("NO-OP test
response".getBytes(StandardCharsets.UTF_8));
@@ -66,19 +59,19 @@ public class NoOpResponseParserTest extends
SolrJettyTestBase {
client.commit();
}
- /** Parse response from query using NoOpResponseParser. */
+ /** Parse response from query using InputStreamResponseParser. */
@Test
public void testQueryParse() throws Exception {
try (SolrClient client =
new HttpSolrClient.Builder(getBaseUrl())
.withDefaultCollection(DEFAULT_TEST_CORENAME)
- .withResponseParser(new NoOpResponseParser("xml"))
+ .withResponseParser(new InputStreamResponseParser("xml"))
.build()) {
SolrQuery query = new SolrQuery("id:1234");
QueryRequest req = new QueryRequest(query);
NamedList<Object> resp = client.request(req);
- String responseString = (String) resp.get("response");
+ String responseString =
InputStreamResponseParser.consumeResponseToString(resp);
assertResponse(responseString);
}
}
@@ -96,24 +89,10 @@ public class NoOpResponseParserTest extends
SolrJettyTestBase {
assertEquals("1234", String.valueOf(solrDocument.getFieldValue("id")));
}
- /** Parse response from java.io.Reader. */
- @Test
- public void testReaderResponse() throws Exception {
- NoOpResponseParser parser = new NoOpResponseParser("xml");
- try (final InputStream is = getResponse()) {
- assertNotNull(is);
- Reader in = new InputStreamReader(is, StandardCharsets.UTF_8);
- NamedList<Object> response = parser.processResponse(in);
- assertNotNull(response.get("response"));
- String expectedResponse = new String(getResponse().readAllBytes(),
StandardCharsets.UTF_8);
- assertEquals(expectedResponse, response.get("response"));
- }
- }
-
/** Parse response from java.io.InputStream. */
@Test
public void testInputStreamResponse() throws Exception {
- NoOpResponseParser parser = new NoOpResponseParser("xml");
+ InputStreamResponseParser parser = new InputStreamResponseParser("xml");
try (final InputStream is = getResponse()) {
assertNotNull(is);
NamedList<Object> response = parser.processResponse(is, "UTF-8");
diff --git a/solr/test-framework/src/java/org/apache/solr/SolrTestCaseHS.java
b/solr/test-framework/src/java/org/apache/solr/SolrTestCaseHS.java
index 6eb5dd4df55..91dc38932a6 100644
--- a/solr/test-framework/src/java/org/apache/solr/SolrTestCaseHS.java
+++ b/solr/test-framework/src/java/org/apache/solr/SolrTestCaseHS.java
@@ -34,8 +34,8 @@ import javax.xml.xpath.XPathExpressionException;
import org.apache.lucene.util.IOUtils;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.impl.InputStreamResponseParser;
import org.apache.solr.client.solrj.impl.JsonMapResponseParser;
-import org.apache.solr.client.solrj.impl.NoOpResponseParser;
import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.client.solrj.response.UpdateResponse;
@@ -177,9 +177,9 @@ public class SolrTestCaseHS extends SolrTestCaseJ4 {
NamedList<Object> rsp = client.request(query);
return Utils.toJSONString(rsp);
} else {
- query.setResponseParser(new NoOpResponseParser(wt));
+ query.setResponseParser(new InputStreamResponseParser(wt));
NamedList<Object> rsp = client.request(query);
- return (String) rsp.get("response");
+ return InputStreamResponseParser.consumeResponseToString(rsp);
}
}