This is an automated email from the ASF dual-hosted git repository.
psalagnac pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/branch_9x by this push:
new f1050ff766d SOLR-17518: Deprecate UpdateRequest.getXml() and replace
it with XMLRequestWriter (#3200)
f1050ff766d is described below
commit f1050ff766d6a0f30fe2784d70684faec346a70c
Author: Pierre Salagnac <[email protected]>
AuthorDate: Tue Feb 25 11:11:47 2025 +0100
SOLR-17518: Deprecate UpdateRequest.getXml() and replace it with
XMLRequestWriter (#3200)
---
solr/CHANGES.txt | 2 +
.../client/solrj/embedded/EmbeddedSolrServer.java | 5 +-
.../org/apache/solr/update/AddBlockUpdateTest.java | 9 +-
.../client/solrj/impl/BinaryRequestWriter.java | 2 +-
.../solr/client/solrj/impl/XMLRequestWriter.java | 213 +++++++++++++++++++++
.../solr/client/solrj/request/RequestWriter.java | 56 ++----
.../solr/client/solrj/request/UpdateRequest.java | 147 ++------------
.../apache/solr/client/solrj/util/ClientUtils.java | 10 -
.../solr/client/solrj/SolrExampleXMLTest.java | 4 +-
.../apache/solr/client/solrj/TestBatchUpdate.java | 4 +-
.../solr/client/solrj/TestSolrJErrorHandling.java | 4 +-
.../embedded/SolrExampleStreamingHttp2Test.java | 4 +-
.../solrj/embedded/SolrExampleStreamingTest.java | 4 +-
.../solrj/embedded/SolrExampleXMLHttp2Test.java | 4 +-
.../client/solrj/impl/BasicHttpSolrClientTest.java | 3 +-
.../client/solrj/impl/Http2SolrClientTest.java | 3 +-
.../client/solrj/impl/HttpJdkSolrClientTest.java | 3 +-
.../solr/client/solrj/util/ClientUtilsTest.java | 4 +-
18 files changed, 265 insertions(+), 216 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index c590f48c296..1a6269e8f2e 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -101,6 +101,8 @@ Other Changes
* SOLR-17670: Fix unnecessary memory allocation caused by a large reRankDocs
param. (JiaBao Gao)
+* SOLR-17518: Deprecate UpdateRequest.getXml() and replace it with
XMLRequestWriter. (Pierre Salagnac)
+
================== 9.8.0 ==================
New Features
---------------------
diff --git
a/solr/core/src/java/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
b/solr/core/src/java/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
index 3583f773718..45aaea07d1d 100644
---
a/solr/core/src/java/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
+++
b/solr/core/src/java/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
@@ -38,6 +38,7 @@ import org.apache.solr.client.solrj.StreamingResponseCallback;
import org.apache.solr.client.solrj.impl.BinaryRequestWriter;
import org.apache.solr.client.solrj.impl.BinaryResponseParser;
import org.apache.solr.client.solrj.impl.InputStreamResponseParser;
+import org.apache.solr.client.solrj.impl.XMLRequestWriter;
import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest;
import org.apache.solr.client.solrj.request.RequestWriter;
import org.apache.solr.common.SolrDocument;
@@ -78,8 +79,8 @@ public class EmbeddedSolrServer extends SolrClient {
@SuppressWarnings("ImmutableEnumChecker")
public enum RequestWriterSupplier {
- JavaBin(() -> new BinaryRequestWriter()),
- XML(() -> new RequestWriter());
+ JavaBin(BinaryRequestWriter::new),
+ XML(XMLRequestWriter::new);
private final Supplier<RequestWriter> supplier;
diff --git a/solr/core/src/test/org/apache/solr/update/AddBlockUpdateTest.java
b/solr/core/src/test/org/apache/solr/update/AddBlockUpdateTest.java
index 3bd24035767..7e630773725 100644
--- a/solr/core/src/test/org/apache/solr/update/AddBlockUpdateTest.java
+++ b/solr/core/src/test/org/apache/solr/update/AddBlockUpdateTest.java
@@ -54,6 +54,7 @@ import org.apache.lucene.search.join.QueryBitSetProducer;
import org.apache.lucene.search.join.ScoreMode;
import org.apache.lucene.search.join.ToParentBlockJoinQuery;
import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.client.solrj.impl.XMLRequestWriter;
import org.apache.solr.client.solrj.request.RequestWriter;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.common.SolrException;
@@ -451,7 +452,7 @@ public class AddBlockUpdateTest extends SolrTestCaseJ4 {
Collections.shuffle(docs, random());
req.add(docs);
- RequestWriter requestWriter = new RequestWriter();
+ RequestWriter requestWriter = new XMLRequestWriter();
OutputStream os = new ByteArrayOutputStream();
requestWriter.write(req, os);
assertBlockU(os.toString());
@@ -518,7 +519,7 @@ public class AddBlockUpdateTest extends SolrTestCaseJ4 {
Collections.shuffle(docs, random());
req.add(docs);
- RequestWriter requestWriter = new RequestWriter();
+ RequestWriter requestWriter = new XMLRequestWriter();
OutputStream os = new ByteArrayOutputStream();
requestWriter.write(req, os);
assertBlockU(os.toString());
@@ -704,7 +705,7 @@ public class AddBlockUpdateTest extends SolrTestCaseJ4 {
Collections.shuffle(docs, random());
req.add(docs);
- RequestWriter requestWriter = new RequestWriter();
+ RequestWriter requestWriter = new XMLRequestWriter();
OutputStream os = new ByteArrayOutputStream();
requestWriter.write(req, os);
assertBlockU(os.toString());
@@ -807,7 +808,7 @@ public class AddBlockUpdateTest extends SolrTestCaseJ4 {
Collections.shuffle(docs, random());
req.add(docs);
- RequestWriter requestWriter = new RequestWriter();
+ RequestWriter requestWriter = new XMLRequestWriter();
OutputStream os = new ByteArrayOutputStream();
requestWriter.write(req, os);
assertBlockU(os.toString());
diff --git
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BinaryRequestWriter.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BinaryRequestWriter.java
index 0dcdba37599..7e8d3feb9c8 100644
---
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BinaryRequestWriter.java
+++
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BinaryRequestWriter.java
@@ -63,7 +63,7 @@ public class BinaryRequestWriter extends RequestWriter {
if (isEmpty(updateRequest)) return null;
throw new RuntimeException("This Should not happen");
} else {
- return super.getContentStreams(req);
+ return req.getContentStreams();
}
}
diff --git
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/XMLRequestWriter.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/XMLRequestWriter.java
new file mode 100644
index 00000000000..f3e48a31640
--- /dev/null
+++
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/XMLRequestWriter.java
@@ -0,0 +1,213 @@
+/*
+ * 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.BufferedWriter;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.request.RequestWriter;
+import org.apache.solr.client.solrj.request.UpdateRequest;
+import org.apache.solr.client.solrj.util.ClientUtils;
+import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.common.params.ShardParams;
+import org.apache.solr.common.util.ContentStream;
+import org.apache.solr.common.util.XML;
+
+public class XMLRequestWriter extends RequestWriter {
+
+ @Override
+ public RequestWriter.ContentWriter getContentWriter(SolrRequest<?> req) {
+ if (req instanceof UpdateRequest) {
+ UpdateRequest updateRequest = (UpdateRequest) req;
+ if (isEmpty(updateRequest)) return null;
+ return new RequestWriter.ContentWriter() {
+ @Override
+ public void write(OutputStream os) throws IOException {
+ OutputStreamWriter writer = new OutputStreamWriter(os,
StandardCharsets.UTF_8);
+ writeXML(updateRequest, writer);
+ writer.flush();
+ }
+
+ @Override
+ public String getContentType() {
+ return ClientUtils.TEXT_XML;
+ }
+ };
+ }
+ return req.getContentWriter(ClientUtils.TEXT_XML);
+ }
+
+ @Override
+ public Collection<ContentStream> getContentStreams(SolrRequest<?> req)
throws IOException {
+ if (req instanceof UpdateRequest) {
+ return null;
+ }
+ return req.getContentStreams();
+ }
+
+ @Override
+ public void write(SolrRequest<?> request, OutputStream os) throws
IOException {
+ if (request instanceof UpdateRequest) {
+ UpdateRequest updateRequest = (UpdateRequest) request;
+ BufferedWriter writer =
+ new BufferedWriter(new OutputStreamWriter(os,
StandardCharsets.UTF_8));
+ writeXML(updateRequest, writer);
+ writer.flush();
+ }
+ }
+
+ @Override
+ public String getUpdateContentType() {
+ return ClientUtils.TEXT_XML;
+ }
+
+ public void writeXML(UpdateRequest request, Writer writer) throws
IOException {
+ List<Map<SolrInputDocument, Map<String, Object>>> getDocLists =
getDocLists(request);
+
+ for (Map<SolrInputDocument, Map<String, Object>> docs : getDocLists) {
+
+ if (docs != null && !docs.isEmpty()) {
+ Map.Entry<SolrInputDocument, Map<String, Object>> firstDoc =
+ docs.entrySet().iterator().next();
+ Map<String, Object> map = firstDoc.getValue();
+ Integer cw = null;
+ Boolean ow = null;
+ if (map != null) {
+ cw = (Integer) firstDoc.getValue().get(UpdateRequest.COMMIT_WITHIN);
+ ow = (Boolean) firstDoc.getValue().get(UpdateRequest.OVERWRITE);
+ }
+ if (ow == null) ow = true;
+ int commitWithin = (cw != null && cw != -1) ? cw :
request.getCommitWithin();
+ boolean overwrite = ow;
+ if (commitWithin > -1 || overwrite != true) {
+ writer.write(
+ "<add commitWithin=\"" + commitWithin + "\" " + "overwrite=\"" +
overwrite + "\">");
+ } else {
+ writer.write("<add>");
+ }
+
+ Set<Map.Entry<SolrInputDocument, Map<String, Object>>> entries =
docs.entrySet();
+ for (Map.Entry<SolrInputDocument, Map<String, Object>> entry :
entries) {
+ ClientUtils.writeXML(entry.getKey(), writer);
+ }
+
+ writer.write("</add>");
+ }
+ }
+
+ // Add the delete commands
+ Map<String, Map<String, Object>> deleteById = request.getDeleteByIdMap();
+ List<String> deleteQuery = request.getDeleteQuery();
+ boolean hasDeleteById = deleteById != null && !deleteById.isEmpty();
+ boolean hasDeleteByQuery = deleteQuery != null && !deleteQuery.isEmpty();
+ if (hasDeleteById || hasDeleteByQuery) {
+ if (request.getCommitWithin() > 0) {
+ writer
+ .append("<delete commitWithin=\"")
+ .append(String.valueOf(request.getCommitWithin()))
+ .append("\">");
+ } else {
+ writer.append("<delete>");
+ }
+ if (hasDeleteById) {
+ for (Map.Entry<String, Map<String, Object>> entry :
deleteById.entrySet()) {
+ writer.append("<id");
+ Map<String, Object> map = entry.getValue();
+ if (map != null) {
+ Long version = (Long) map.get(UpdateRequest.VER);
+ String route = (String) map.get(ShardParams._ROUTE_);
+ if (version != null) {
+ writer.append("
version=\"").append(String.valueOf(version)).append('"');
+ }
+
+ if (route != null) {
+ writer.append(" _route_=\"").append(route).append('"');
+ }
+ }
+ writer.append(">");
+
+ XML.escapeCharData(entry.getKey(), writer);
+ writer.append("</id>");
+ }
+ }
+ if (hasDeleteByQuery) {
+ for (String q : deleteQuery) {
+ writer.append("<query>");
+ XML.escapeCharData(q, writer);
+ writer.append("</query>");
+ }
+ }
+ writer.append("</delete>");
+ }
+ }
+
+ private List<Map<SolrInputDocument, Map<String, Object>>>
getDocLists(UpdateRequest request) {
+ List<Map<SolrInputDocument, Map<String, Object>>> docLists = new
ArrayList<>();
+ Map<SolrInputDocument, Map<String, Object>> docList = null;
+ if (request.getDocumentsMap() != null) {
+
+ Boolean lastOverwrite = true;
+ Integer lastCommitWithin = -1;
+
+ Map<SolrInputDocument, Map<String, Object>> documents =
request.getDocumentsMap();
+ for (Map.Entry<SolrInputDocument, Map<String, Object>> entry :
documents.entrySet()) {
+ Map<String, Object> map = entry.getValue();
+ Boolean overwrite = null;
+ Integer commitWithin = null;
+ if (map != null) {
+ overwrite = (Boolean) entry.getValue().get(UpdateRequest.OVERWRITE);
+ commitWithin = (Integer)
entry.getValue().get(UpdateRequest.COMMIT_WITHIN);
+ }
+ if (!Objects.equals(overwrite, lastOverwrite)
+ || !Objects.equals(commitWithin, lastCommitWithin)
+ || docLists.isEmpty()) {
+ docList = new LinkedHashMap<>();
+ docLists.add(docList);
+ }
+ docList.put(entry.getKey(), entry.getValue());
+ lastCommitWithin = commitWithin;
+ lastOverwrite = overwrite;
+ }
+ }
+
+ Iterator<SolrInputDocument> docIterator = request.getDocIterator();
+ if (docIterator != null) {
+ docList = new LinkedHashMap<>();
+ docLists.add(docList);
+ while (docIterator.hasNext()) {
+ SolrInputDocument doc = docIterator.next();
+ if (doc != null) {
+ docList.put(doc, null);
+ }
+ }
+ }
+
+ return docLists;
+ }
+}
diff --git
a/solr/solrj/src/java/org/apache/solr/client/solrj/request/RequestWriter.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/request/RequestWriter.java
index e15c750f308..9c606a92b04 100644
---
a/solr/solrj/src/java/org/apache/solr/client/solrj/request/RequestWriter.java
+++
b/solr/solrj/src/java/org/apache/solr/client/solrj/request/RequestWriter.java
@@ -16,16 +16,13 @@
*/
package org.apache.solr.client.solrj.request;
-import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
-import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.solr.client.solrj.SolrRequest;
-import org.apache.solr.client.solrj.util.ClientUtils;
import org.apache.solr.common.util.ContentStream;
/**
@@ -36,7 +33,7 @@ import org.apache.solr.common.util.ContentStream;
*
* @since solr 1.4
*/
-public class RequestWriter {
+public abstract class RequestWriter {
public interface ContentWriter {
@@ -46,41 +43,20 @@ public class RequestWriter {
}
/**
- * Use this to do a push writing instead of pull. If this method returns
null {@link
- *
org.apache.solr.client.solrj.request.RequestWriter#getContentStreams(SolrRequest)}
is invoked
- * to do a pull write.
+ * To be implemented by subclasses to serialize update requests into the
appropriate format.
+ *
+ * <p>If this method returns null, {@link
+ *
org.apache.solr.client.solrj.request.RequestWriter#getContentStreams(SolrRequest)}
is then
+ * invoked to get content.
*/
- public ContentWriter getContentWriter(SolrRequest<?> req) {
- if (req instanceof UpdateRequest) {
- UpdateRequest updateRequest = (UpdateRequest) req;
- if (isEmpty(updateRequest)) return null;
- return new ContentWriter() {
- @Override
- public void write(OutputStream os) throws IOException {
- OutputStreamWriter writer = new OutputStreamWriter(os,
StandardCharsets.UTF_8);
- updateRequest.writeXML(writer);
- writer.flush();
- }
-
- @Override
- public String getContentType() {
- return ClientUtils.TEXT_XML;
- }
- };
- }
- return req.getContentWriter(ClientUtils.TEXT_XML);
- }
+ public abstract ContentWriter getContentWriter(SolrRequest<?> req);
/**
* @deprecated Use {@link #getContentWriter(SolrRequest)}.
*/
@Deprecated
- public Collection<ContentStream> getContentStreams(SolrRequest<?> req)
throws IOException {
- if (req instanceof UpdateRequest) {
- return null;
- }
- return req.getContentStreams();
- }
+ public abstract Collection<ContentStream> getContentStreams(SolrRequest<?>
req)
+ throws IOException;
protected boolean isEmpty(UpdateRequest updateRequest) {
return isNull(updateRequest.getDocuments())
@@ -94,19 +70,9 @@ public class RequestWriter {
return req.getPath();
}
- public void write(SolrRequest<?> request, OutputStream os) throws
IOException {
- if (request instanceof UpdateRequest) {
- UpdateRequest updateRequest = (UpdateRequest) request;
- BufferedWriter writer =
- new BufferedWriter(new OutputStreamWriter(os,
StandardCharsets.UTF_8));
- updateRequest.writeXML(writer);
- writer.flush();
- }
- }
+ public abstract void write(SolrRequest<?> request, OutputStream os) throws
IOException;
- public String getUpdateContentType() {
- return ClientUtils.TEXT_XML;
- }
+ public abstract String getUpdateContentType();
public static class StringPayloadContentWriter implements ContentWriter {
public final String payload;
diff --git
a/solr/solrj/src/java/org/apache/solr/client/solrj/request/UpdateRequest.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/request/UpdateRequest.java
index 53ca9bf5cc1..8aaf122a2b3 100644
---
a/solr/solrj/src/java/org/apache/solr/client/solrj/request/UpdateRequest.java
+++
b/solr/solrj/src/java/org/apache/solr/client/solrj/request/UpdateRequest.java
@@ -34,6 +34,7 @@ import java.util.Set;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.LBSolrClient;
+import org.apache.solr.client.solrj.impl.XMLRequestWriter;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.client.solrj.util.ClientUtils;
import org.apache.solr.common.SolrInputDocument;
@@ -44,7 +45,6 @@ import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.UpdateParams;
import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.ContentStream;
-import org.apache.solr.common.util.XML;
/**
* @since solr 1.3
@@ -70,9 +70,6 @@ public class UpdateRequest extends AbstractUpdateRequest {
super(METHOD.POST, url);
}
- //
---------------------------------------------------------------------------
- //
---------------------------------------------------------------------------
-
/** clear the pending documents and delete commands */
public void clear() {
if (documents != null) {
@@ -86,9 +83,6 @@ public class UpdateRequest extends AbstractUpdateRequest {
}
}
- //
---------------------------------------------------------------------------
- //
---------------------------------------------------------------------------
-
/**
* Add a SolrInputDocument to this request
*
@@ -354,14 +348,19 @@ public class UpdateRequest extends AbstractUpdateRequest {
this.deleteQuery = deleteQuery;
}
- // --------------------------------------------------------------------------
- // --------------------------------------------------------------------------
-
+ /**
+ * @deprecated Method will be removed in Solr 10.0. Use {@link
XMLRequestWriter} instead.
+ */
+ @Deprecated(since = "9.9")
@Override
public Collection<ContentStream> getContentStreams() throws IOException {
return ClientUtils.toContentStreams(getXML(), ClientUtils.TEXT_XML);
}
+ /**
+ * @deprecated Method will be removed in Solr 10.0. Use {@link
XMLRequestWriter} instead.
+ */
+ @Deprecated(since = "9.9")
public String getXML() throws IOException {
StringWriter writer = new StringWriter();
writeXML(writer);
@@ -369,139 +368,19 @@ public class UpdateRequest extends AbstractUpdateRequest
{
// If action is COMMIT or OPTIMIZE, it is sent with params
String xml = writer.toString();
- // System.out.println( "SEND:"+xml );
return (xml.length() > 0) ? xml : null;
}
- private List<Map<SolrInputDocument, Map<String, Object>>> getDocLists(
- Map<SolrInputDocument, Map<String, Object>> documents) {
- List<Map<SolrInputDocument, Map<String, Object>>> docLists = new
ArrayList<>();
- Map<SolrInputDocument, Map<String, Object>> docList = null;
- if (this.documents != null) {
-
- Boolean lastOverwrite = true;
- Integer lastCommitWithin = -1;
-
- Set<Entry<SolrInputDocument, Map<String, Object>>> entries =
this.documents.entrySet();
- for (Entry<SolrInputDocument, Map<String, Object>> entry : entries) {
- Map<String, Object> map = entry.getValue();
- Boolean overwrite = null;
- Integer commitWithin = null;
- if (map != null) {
- overwrite = (Boolean) entry.getValue().get(OVERWRITE);
- commitWithin = (Integer) entry.getValue().get(COMMIT_WITHIN);
- }
- if (!Objects.equals(overwrite, lastOverwrite)
- || !Objects.equals(commitWithin, lastCommitWithin)
- || docLists.isEmpty()) {
- docList = new LinkedHashMap<>();
- docLists.add(docList);
- }
- docList.put(entry.getKey(), entry.getValue());
- lastCommitWithin = commitWithin;
- lastOverwrite = overwrite;
- }
- }
-
- if (docIterator != null) {
- docList = new LinkedHashMap<>();
- docLists.add(docList);
- while (docIterator.hasNext()) {
- SolrInputDocument doc = docIterator.next();
- if (doc != null) {
- docList.put(doc, null);
- }
- }
- }
-
- return docLists;
- }
-
/**
- * @since solr 1.4
+ * @deprecated Method will be removed in Solr 10.0. Use {@link
XMLRequestWriter} instead.
*/
+ @Deprecated(since = "9.9")
public UpdateRequest writeXML(Writer writer) throws IOException {
- List<Map<SolrInputDocument, Map<String, Object>>> getDocLists =
getDocLists(documents);
-
- for (Map<SolrInputDocument, Map<String, Object>> docs : getDocLists) {
-
- if ((docs != null && docs.size() > 0)) {
- Entry<SolrInputDocument, Map<String, Object>> firstDoc =
docs.entrySet().iterator().next();
- Map<String, Object> map = firstDoc.getValue();
- Integer cw = null;
- Boolean ow = null;
- if (map != null) {
- cw = (Integer) firstDoc.getValue().get(COMMIT_WITHIN);
- ow = (Boolean) firstDoc.getValue().get(OVERWRITE);
- }
- if (ow == null) ow = true;
- int commitWithin = (cw != null && cw != -1) ? cw : this.commitWithin;
- boolean overwrite = ow;
- if (commitWithin > -1 || overwrite != true) {
- writer.write(
- "<add commitWithin=\"" + commitWithin + "\" " + "overwrite=\"" +
overwrite + "\">");
- } else {
- writer.write("<add>");
- }
-
- Set<Entry<SolrInputDocument, Map<String, Object>>> entries =
docs.entrySet();
- for (Entry<SolrInputDocument, Map<String, Object>> entry : entries) {
- ClientUtils.writeXML(entry.getKey(), writer);
- }
-
- writer.write("</add>");
- }
- }
-
- // Add the delete commands
- boolean deleteI = deleteById != null && deleteById.size() > 0;
- boolean deleteQ = deleteQuery != null && deleteQuery.size() > 0;
- if (deleteI || deleteQ) {
- if (commitWithin > 0) {
- writer.append("<delete
commitWithin=\"").append(String.valueOf(commitWithin)).append("\">");
- } else {
- writer.append("<delete>");
- }
- if (deleteI) {
- for (Map.Entry<String, Map<String, Object>> entry :
deleteById.entrySet()) {
- writer.append("<id");
- Map<String, Object> map = entry.getValue();
- if (map != null) {
- Long version = (Long) map.get(VER);
- String route = (String) map.get(_ROUTE_);
- if (version != null) {
- writer.append("
version=\"").append(String.valueOf(version)).append('"');
- }
-
- if (route != null) {
- writer.append(" _route_=\"").append(route).append('"');
- }
- }
- writer.append(">");
-
- XML.escapeCharData(entry.getKey(), writer);
- writer.append("</id>");
- }
- }
- if (deleteQ) {
- for (String q : deleteQuery) {
- writer.append("<query>");
- XML.escapeCharData(q, writer);
- writer.append("</query>");
- }
- }
- writer.append("</delete>");
- }
+ XMLRequestWriter requestWriter = new XMLRequestWriter();
+ requestWriter.writeXML(this, writer);
return this;
}
- // --------------------------------------------------------------------------
- // --------------------------------------------------------------------------
-
- // --------------------------------------------------------------------------
- //
- // --------------------------------------------------------------------------
-
public List<SolrInputDocument> getDocuments() {
if (documents == null) return null;
List<SolrInputDocument> docs = new ArrayList<>(documents.size());
diff --git
a/solr/solrj/src/java/org/apache/solr/client/solrj/util/ClientUtils.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/util/ClientUtils.java
index 82ecb5c68a6..83193f4af78 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/util/ClientUtils.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/util/ClientUtils.java
@@ -17,7 +17,6 @@
package org.apache.solr.client.solrj.util;
import java.io.IOException;
-import java.io.StringWriter;
import java.io.Writer;
import java.net.MalformedURLException;
import java.net.URI;
@@ -212,15 +211,6 @@ public class ClientUtils {
}
}
- public static String toXML(SolrInputDocument doc) {
- StringWriter str = new StringWriter();
- try {
- writeXML(doc, str);
- } catch (Exception ex) {
- }
- return str.toString();
- }
-
//
---------------------------------------------------------------------------------------
/**
diff --git
a/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleXMLTest.java
b/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleXMLTest.java
index ae392fd11ed..befaad61dbb 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleXMLTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleXMLTest.java
@@ -18,8 +18,8 @@ package org.apache.solr.client.solrj;
import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
+import org.apache.solr.client.solrj.impl.XMLRequestWriter;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
-import org.apache.solr.client.solrj.request.RequestWriter;
import org.junit.BeforeClass;
/**
@@ -38,7 +38,7 @@ public class SolrExampleXMLTest extends SolrExampleTests {
return new HttpSolrClient.Builder(getBaseUrl())
.withDefaultCollection(DEFAULT_TEST_CORENAME)
.allowMultiPartPost(random().nextBoolean())
- .withRequestWriter(new RequestWriter())
+ .withRequestWriter(new XMLRequestWriter())
.withResponseParser(new XMLResponseParser())
.build();
}
diff --git
a/solr/solrj/src/test/org/apache/solr/client/solrj/TestBatchUpdate.java
b/solr/solrj/src/test/org/apache/solr/client/solrj/TestBatchUpdate.java
index 9343d76bc36..30a1212c38d 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/TestBatchUpdate.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/TestBatchUpdate.java
@@ -23,7 +23,7 @@ import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
import org.apache.solr.client.solrj.beans.Field;
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.impl.XMLRequestWriter;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrInputDocument;
import org.junit.BeforeClass;
@@ -49,7 +49,7 @@ public class TestBatchUpdate extends SolrJettyTestBase {
try (SolrClient client =
new HttpSolrClient.Builder(getBaseUrl())
.withDefaultCollection(DEFAULT_TEST_CORENAME)
- .withRequestWriter(new RequestWriter())
+ .withRequestWriter(new XMLRequestWriter())
.build()) {
client.deleteByQuery("*:*"); // delete everything!
doIt(client);
diff --git
a/solr/solrj/src/test/org/apache/solr/client/solrj/TestSolrJErrorHandling.java
b/solr/solrj/src/test/org/apache/solr/client/solrj/TestSolrJErrorHandling.java
index 68ba3e42606..28f9033e94c 100644
---
a/solr/solrj/src/test/org/apache/solr/client/solrj/TestSolrJErrorHandling.java
+++
b/solr/solrj/src/test/org/apache/solr/client/solrj/TestSolrJErrorHandling.java
@@ -40,7 +40,7 @@ import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
import org.apache.solr.client.solrj.impl.BaseHttpSolrClient;
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.impl.XMLRequestWriter;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrInputDocument;
import org.junit.BeforeClass;
@@ -105,7 +105,7 @@ public class TestSolrJErrorHandling extends
SolrJettyTestBase {
try (SolrClient client =
new HttpSolrClient.Builder(getBaseUrl())
.withDefaultCollection(DEFAULT_TEST_CORENAME)
- .withRequestWriter(new RequestWriter())
+ .withRequestWriter(new XMLRequestWriter())
.build()) {
client.deleteByQuery("*:*"); // delete everything!
doIt(client);
diff --git
a/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleStreamingHttp2Test.java
b/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleStreamingHttp2Test.java
index 7c20c53254f..00087381f1f 100644
---
a/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleStreamingHttp2Test.java
+++
b/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleStreamingHttp2Test.java
@@ -25,9 +25,9 @@ import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrExampleTests;
import org.apache.solr.client.solrj.impl.ConcurrentUpdateHttp2SolrClient;
import org.apache.solr.client.solrj.impl.Http2SolrClient;
+import org.apache.solr.client.solrj.impl.XMLRequestWriter;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.client.solrj.request.AbstractUpdateRequest;
-import org.apache.solr.client.solrj.request.RequestWriter;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.common.SolrInputDocument;
import org.junit.BeforeClass;
@@ -49,7 +49,7 @@ public class SolrExampleStreamingHttp2Test extends
SolrExampleTests {
// smaller queue size hits locks more often
Http2SolrClient solrClient =
new Http2SolrClient.Builder()
- .withRequestWriter(new RequestWriter())
+ .withRequestWriter(new XMLRequestWriter())
.withResponseParser(new XMLResponseParser())
.build();
ConcurrentUpdateHttp2SolrClient concurrentClient =
diff --git
a/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleStreamingTest.java
b/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleStreamingTest.java
index 616782a10ea..294d3034c84 100644
---
a/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleStreamingTest.java
+++
b/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleStreamingTest.java
@@ -23,9 +23,9 @@ import java.util.List;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrExampleTests;
import org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrClient;
+import org.apache.solr.client.solrj.impl.XMLRequestWriter;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.client.solrj.request.AbstractUpdateRequest;
-import org.apache.solr.client.solrj.request.RequestWriter;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.common.SolrInputDocument;
import org.junit.BeforeClass;
@@ -49,7 +49,7 @@ public class SolrExampleStreamingTest extends
SolrExampleTests {
.withQueueSize(2)
.withThreadCount(5)
.withResponseParser(new XMLResponseParser())
- .withRequestWriter(new RequestWriter())
+ .withRequestWriter(new XMLRequestWriter())
.build();
}
diff --git
a/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleXMLHttp2Test.java
b/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleXMLHttp2Test.java
index 1f0201716ef..765c2b33573 100644
---
a/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleXMLHttp2Test.java
+++
b/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleXMLHttp2Test.java
@@ -21,8 +21,8 @@ import java.util.concurrent.TimeUnit;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrExampleTests;
import org.apache.solr.client.solrj.impl.Http2SolrClient;
+import org.apache.solr.client.solrj.impl.XMLRequestWriter;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
-import org.apache.solr.client.solrj.request.RequestWriter;
import org.junit.BeforeClass;
/**
@@ -42,7 +42,7 @@ public class SolrExampleXMLHttp2Test extends SolrExampleTests
{
new Http2SolrClient.Builder(getBaseUrl())
.withDefaultCollection(DEFAULT_TEST_CORENAME)
.withConnectionTimeout(DEFAULT_CONNECTION_TIMEOUT,
TimeUnit.MILLISECONDS)
- .withRequestWriter(new RequestWriter())
+ .withRequestWriter(new XMLRequestWriter())
.withResponseParser(new XMLResponseParser())
.build();
return client;
diff --git
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/BasicHttpSolrClientTest.java
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/BasicHttpSolrClientTest.java
index 98ea89a8d24..0e36df1bbd5 100644
---
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/BasicHttpSolrClientTest.java
+++
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/BasicHttpSolrClientTest.java
@@ -60,7 +60,6 @@ import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrRequest.METHOD;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.request.QueryRequest;
-import org.apache.solr.client.solrj.request.RequestWriter;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrException;
@@ -521,7 +520,7 @@ public class BasicHttpSolrClientTest extends
SolrJettyTestBase {
// XML response and writer
try (HttpSolrClient client =
new HttpSolrClient.Builder(getBaseUrl())
- .withRequestWriter(new RequestWriter())
+ .withRequestWriter(new XMLRequestWriter())
.withResponseParser(new XMLResponseParser())
.build()) {
UpdateRequest req = new UpdateRequest();
diff --git
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientTest.java
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientTest.java
index 07c96e85c81..24825bf33c3 100644
---
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientTest.java
+++
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientTest.java
@@ -30,7 +30,6 @@ import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.request.QueryRequest;
-import org.apache.solr.client.solrj.request.RequestWriter;
import org.apache.solr.client.solrj.request.SolrPing;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
@@ -294,7 +293,7 @@ public class Http2SolrClientTest extends
HttpSolrClientTestBase {
try (Http2SolrClient client =
new Http2SolrClient.Builder(url)
.withDefaultCollection(DEFAULT_CORE)
- .withRequestWriter(new RequestWriter())
+ .withRequestWriter(new XMLRequestWriter())
.withResponseParser(new XMLResponseParser())
.build()) {
testUpdate(client, WT.XML, "application/xml; charset=UTF-8",
MUST_ENCODE);
diff --git
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpJdkSolrClientTest.java
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpJdkSolrClientTest.java
index 4dec7a47068..3c32ccfe7e9 100644
---
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpJdkSolrClientTest.java
+++
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpJdkSolrClientTest.java
@@ -47,7 +47,6 @@ import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.request.QueryRequest;
-import org.apache.solr.client.solrj.request.RequestWriter;
import org.apache.solr.client.solrj.response.SolrPingResponse;
import org.apache.solr.client.solrj.util.Cancellable;
import org.apache.solr.common.params.CommonParams;
@@ -422,7 +421,7 @@ public class HttpJdkSolrClientTest extends
HttpSolrClientTestBase {
try (HttpJdkSolrClient client =
builder(url)
- .withRequestWriter(new RequestWriter())
+ .withRequestWriter(new XMLRequestWriter())
.withResponseParser(new XMLResponseParser())
.useHttp1_1(http11)
.build()) {
diff --git
a/solr/solrj/src/test/org/apache/solr/client/solrj/util/ClientUtilsTest.java
b/solr/solrj/src/test/org/apache/solr/client/solrj/util/ClientUtilsTest.java
index 407fffa2454..1a7bf353994 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/util/ClientUtilsTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/util/ClientUtilsTest.java
@@ -17,10 +17,10 @@
package org.apache.solr.client.solrj.util;
import org.apache.solr.SolrTestCase;
+import org.apache.solr.client.solrj.impl.XMLRequestWriter;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.HealthCheckRequest;
import org.apache.solr.client.solrj.request.QueryRequest;
-import org.apache.solr.client.solrj.request.RequestWriter;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.client.solrj.request.V2Request;
import org.junit.Test;
@@ -56,7 +56,7 @@ public class ClientUtilsTest extends SolrTestCase {
@Test
public void testUrlBuilding() throws Exception {
- final var rw = new RequestWriter();
+ final var rw = new XMLRequestWriter();
// Simple case, non-collection request
{
final var request = new HealthCheckRequest();