This is an automated email from the ASF dual-hosted git repository.
malliaridis 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 bae6239066a Apply fix for special hostContext (#2787)
bae6239066a is described below
commit bae6239066ac0dcb2e443c0db657196f418b8138
Author: Christos Malliaridis <[email protected]>
AuthorDate: Wed Oct 23 21:02:40 2024 +0200
Apply fix for special hostContext (#2787)
This commit leverages UriBuilder over custom URI path concatenation.
Related to changes from SOLR-17450.
---
.../src/java/org/apache/solr/cli/PostTool.java | 48 ++++++---------
.../java/org/apache/solr/cli/SimplePostTool.java | 72 +++++++++-------------
.../core/src/java/org/apache/solr/cli/SolrCLI.java | 2 +-
.../src/test/org/apache/solr/cli/PostToolTest.java | 22 -------
.../org/apache/solr/cli/SimplePostToolTest.java | 22 -------
5 files changed, 47 insertions(+), 119 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/cli/PostTool.java
b/solr/core/src/java/org/apache/solr/cli/PostTool.java
index 275067fb34e..23a1cb17724 100644
--- a/solr/core/src/java/org/apache/solr/cli/PostTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/PostTool.java
@@ -19,6 +19,7 @@ package org.apache.solr.cli;
import static java.nio.charset.StandardCharsets.US_ASCII;
import static java.nio.charset.StandardCharsets.UTF_8;
+import jakarta.ws.rs.core.UriBuilder;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -330,15 +331,24 @@ public class PostTool extends ToolBase {
}
solrUrl = SolrCLI.normalizeSolrUrl(solrUrl, true, hostContext) +
hostContext;
- String url = solrUrl + "/" + cli.getOptionValue("name") + "/update";
- solrUpdateUrl = new URI(url);
+
+ solrUpdateUrl =
+ UriBuilder.fromUri(SolrCLI.normalizeSolrUrl(solrUrl, true,
hostContext))
+ .path(hostContext)
+ .path(cli.getOptionValue("name"))
+ .path("update")
+ .build();
} else if (cli.hasOption("solr-update-url")) {
String url = cli.getOptionValue("solr-update-url");
solrUpdateUrl = new URI(url);
} else if (cli.hasOption("name")) {
- String url = SolrCLI.getDefaultSolrUrl() + "/solr/" +
cli.getOptionValue("name") + "/update";
- solrUpdateUrl = new URI(url);
+ solrUpdateUrl =
+ UriBuilder.fromUri(SolrCLI.getDefaultSolrUrl())
+ .path("solr")
+ .path(cli.getOptionValue("name"))
+ .path("update")
+ .build();
} else {
throw new IllegalArgumentException(
"Must specify either --solr-update-url or -c parameter to post
documents.");
@@ -450,7 +460,7 @@ public class PostTool extends ToolBase {
}
// Set Extracting handler as default
- solrUpdateUrl = appendUrlPath(solrUpdateUrl, "/extract");
+ solrUpdateUrl = UriBuilder.fromUri(solrUpdateUrl).path("extract").build();
info("Posting web pages to Solr url " + solrUpdateUrl);
auto = true;
@@ -896,7 +906,7 @@ public class PostTool extends ToolBase {
// TODO: from being interpreted as Solr documents internally
if (type.equals("application/json") &&
!PostTool.FORMAT_SOLR.equals(format)) {
suffix = "/json/docs";
- String urlStr = appendUrlPath(solrUpdateUrl, suffix).toString();
+ String urlStr =
UriBuilder.fromUri(solrUpdateUrl).path(suffix).build().toString();
uri = new URI(urlStr);
} else if (type.equals("application/xml")
|| type.equals("text/csv")
@@ -905,7 +915,8 @@ public class PostTool extends ToolBase {
} else {
// SolrCell
suffix = "/extract";
- String urlStr = appendUrlPath(solrUpdateUrl, suffix).toString();
+ String urlStr =
UriBuilder.fromUri(solrUpdateUrl).path(suffix).build().toString();
+ ;
if (!urlStr.contains("resource.name")) {
urlStr =
appendParam(
@@ -953,29 +964,6 @@ public class PostTool extends ToolBase {
}
}
- /**
- * Appends to the path of the URL
- *
- * @param uri the URI
- * @param append the path to append
- * @return the final URL version
- */
- protected static URI appendUrlPath(URI uri, String append) {
- if (append == null || append.isEmpty()) {
- return uri;
- }
- if (append.startsWith("/")) {
- append = append.substring(1);
- }
- if (uri.getQuery() != null && !uri.getQuery().isEmpty()) {
- append += "?" + uri.getQuery();
- }
- if (!uri.getPath().endsWith("/")) {
- append = uri.getPath() + "/" + append;
- }
- return uri.resolve(append);
- }
-
/**
* Guesses the type of file, based on file name suffix Returns
"application/octet-stream" if no
* corresponding mimeMap type.
diff --git a/solr/core/src/java/org/apache/solr/cli/SimplePostTool.java
b/solr/core/src/java/org/apache/solr/cli/SimplePostTool.java
index fa5cf60db66..00236ce6c57 100644
--- a/solr/core/src/java/org/apache/solr/cli/SimplePostTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/SimplePostTool.java
@@ -19,6 +19,7 @@ package org.apache.solr.cli;
import static java.nio.charset.StandardCharsets.US_ASCII;
import static java.nio.charset.StandardCharsets.UTF_8;
+import jakarta.ws.rs.core.UriBuilder;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -377,38 +378,34 @@ public class SimplePostTool {
private void doWebMode() {
reset();
int numPagesPosted = 0;
- try {
- if (type != null) {
- fatal("Specifying content-type with \"-Ddata=web\" is not supported");
- }
- if (args[0].equals("-")) {
- // Skip posting url if special param "-" given
- return;
- }
- // Set Extracting handler as default
- solrUrl = appendUrlPath(solrUrl, "/extract");
+ if (type != null) {
+ fatal("Specifying content-type with \"-Ddata=web\" is not supported");
+ }
+ if (args[0].equals("-")) {
+ // Skip posting url if special param "-" given
+ return;
+ }
+ // Set Extracting handler as default
+ solrUrl = UriBuilder.fromUri(solrUrl).path("/extract").build();
- info("Posting web pages to Solr url " + solrUrl);
- auto = true;
- info(
- "Entering auto mode. Indexing pages with content-types corresponding
to file endings "
- + fileTypes);
- if (recursive > 0) {
- if (recursive > MAX_WEB_DEPTH) {
- recursive = MAX_WEB_DEPTH;
- warn("Too large recursion depth for web mode, limiting to " +
MAX_WEB_DEPTH + "...");
- }
- if (delay < DEFAULT_WEB_DELAY) {
- warn(
- "Never crawl an external web site faster than every 10 seconds,
your IP will probably be blocked");
- }
- info("Entering recursive mode, depth=" + recursive + ", delay=" +
delay + "s");
+ info("Posting web pages to Solr url " + solrUrl);
+ auto = true;
+ info(
+ "Entering auto mode. Indexing pages with content-types corresponding
to file endings "
+ + fileTypes);
+ if (recursive > 0) {
+ if (recursive > MAX_WEB_DEPTH) {
+ recursive = MAX_WEB_DEPTH;
+ warn("Too large recursion depth for web mode, limiting to " +
MAX_WEB_DEPTH + "...");
}
- numPagesPosted = postWebPages(args, 0, out);
- info(numPagesPosted + " web pages indexed.");
- } catch (URISyntaxException e) {
- fatal("Wrong URL trying to append /extract to " + solrUrl);
+ if (delay < DEFAULT_WEB_DELAY) {
+ warn(
+ "Never crawl an external web site faster than every 10 seconds,
your IP will probably be blocked");
+ }
+ info("Entering recursive mode, depth=" + recursive + ", delay=" + delay
+ "s");
}
+ numPagesPosted = postWebPages(args, 0, out);
+ info(numPagesPosted + " web pages indexed.");
}
private void doStdinMode() {
@@ -862,7 +859,7 @@ public class SimplePostTool {
// TODO: from being interpreted as Solr documents internally
if (type.equals("application/json") && !FORMAT_SOLR.equals(format)) {
suffix = "/json/docs";
- String urlStr = appendUrlPath(solrUrl, suffix).toString();
+ String urlStr =
UriBuilder.fromUri(solrUrl).path(suffix).build().toString();
url = URI.create(urlStr);
} else if (type.equals("application/xml")
|| type.equals("text/csv")
@@ -871,7 +868,7 @@ public class SimplePostTool {
} else {
// SolrCell
suffix = "/extract";
- String urlStr = appendUrlPath(solrUrl, suffix).toString();
+ String urlStr =
UriBuilder.fromUri(solrUrl).path(suffix).build().toString();
if (!urlStr.contains("resource.name")) {
urlStr =
appendParam(
@@ -898,8 +895,6 @@ public class SimplePostTool {
+ (mockMode ? " MOCK!" : ""));
is = new FileInputStream(file);
postData(is, file.length(), output, type, url);
- } catch (URISyntaxException e) {
- warn("Not valid URL");
} catch (IOException e) {
warn("Can't open/read file: " + file);
} finally {
@@ -913,17 +908,6 @@ public class SimplePostTool {
}
}
- /**
- * Appends to the path of the URI
- *
- * @param uri the URI
- * @param append the path to append
- * @return the final URI version
- */
- protected static URI appendUrlPath(URI uri, String append) throws
URISyntaxException {
- return PostTool.appendUrlPath(uri, append);
- }
-
/**
* Guesses the type of file, based on file name suffix Returns
"application/octet-stream" if no
* corresponding mimeMap type.
diff --git a/solr/core/src/java/org/apache/solr/cli/SolrCLI.java
b/solr/core/src/java/org/apache/solr/cli/SolrCLI.java
index 74c4f7fb604..56abba7c4d2 100755
--- a/solr/core/src/java/org/apache/solr/cli/SolrCLI.java
+++ b/solr/core/src/java/org/apache/solr/cli/SolrCLI.java
@@ -739,7 +739,7 @@ public class SolrCLI implements CLIO {
hostContext = hostContext.substring(0, hostContext.length() - 1);
}
// Only consider URI path component when normalizing hostContext
- if (urlPath.contains(hostContext)) {
+ if (hostContext != null && !hostContext.isBlank() &&
urlPath.contains(hostContext)) {
String newSolrUrl =
uri.resolve(urlPath.substring(0, urlPath.indexOf(hostContext)) +
"/").toString();
if (logUrlFormatWarning) {
diff --git a/solr/core/src/test/org/apache/solr/cli/PostToolTest.java
b/solr/core/src/test/org/apache/solr/cli/PostToolTest.java
index 7488988c7d9..b4f729c212f 100644
--- a/solr/core/src/test/org/apache/solr/cli/PostToolTest.java
+++ b/solr/core/src/test/org/apache/solr/cli/PostToolTest.java
@@ -239,28 +239,6 @@ public class PostToolTest extends SolrCloudTestCase {
PostTool.appendParam("http://[ff01::114]/?a=b", "foo=bar"));
}
- @Test
- public void testAppendUrlPath() {
- assertEquals(
- URI.create("http://[ff01::114]/a?foo=bar"),
- PostTool.appendUrlPath(URI.create("http://[ff01::114]?foo=bar"),
"/a"));
- assertEquals(
- URI.create("http://[ff01::114]/a?foo=bar"),
- PostTool.appendUrlPath(URI.create("http://[ff01::114]/?foo=bar"),
"/a"));
- assertEquals(
- URI.create("http://[ff01::114]/a/b?foo=bar"),
- PostTool.appendUrlPath(URI.create("http://[ff01::114]/a?foo=bar"),
"/b"));
- assertEquals(
- URI.create("http://[ff01::114]/a/b?foo=bar"),
- PostTool.appendUrlPath(URI.create("http://[ff01::114]/a/?foo=bar"),
"/b"));
- assertEquals(
- URI.create("http://[ff01::114]/a/b?foo=bar"),
- PostTool.appendUrlPath(URI.create("http://[ff01::114]/a?foo=bar"),
"b"));
- assertEquals(
- URI.create("http://[ff01::114]/a/b?foo=bar"),
- PostTool.appendUrlPath(URI.create("http://[ff01::114]/a/?foo=bar"),
"b"));
- }
-
@Test
public void testGuessType() {
File f = new File("foo.doc");
diff --git a/solr/core/src/test/org/apache/solr/cli/SimplePostToolTest.java
b/solr/core/src/test/org/apache/solr/cli/SimplePostToolTest.java
index d8974c0fe68..c59d637bf0a 100644
--- a/solr/core/src/test/org/apache/solr/cli/SimplePostToolTest.java
+++ b/solr/core/src/test/org/apache/solr/cli/SimplePostToolTest.java
@@ -155,28 +155,6 @@ public class SimplePostToolTest extends SolrTestCaseJ4 {
SimplePostTool.appendParam("http://[ff01::114]/?a=b", "foo=bar"));
}
- @Test
- public void testAppendUrlPath() throws URISyntaxException {
- assertEquals(
- URI.create("http://[ff01::114]/a?foo=bar"),
- SimplePostTool.appendUrlPath(URI.create("http://[ff01::114]?foo=bar"),
"/a"));
- assertEquals(
- URI.create("http://[ff01::114]/a?foo=bar"),
-
SimplePostTool.appendUrlPath(URI.create("http://[ff01::114]/?foo=bar"), "/a"));
- assertEquals(
- URI.create("http://[ff01::114]/a/b?foo=bar"),
-
SimplePostTool.appendUrlPath(URI.create("http://[ff01::114]/a?foo=bar"), "/b"));
- assertEquals(
- URI.create("http://[ff01::114]/a/b?foo=bar"),
-
SimplePostTool.appendUrlPath(URI.create("http://[ff01::114]/a/?foo=bar"),
"/b"));
- assertEquals(
- URI.create("http://[ff01::114]/a/b?foo=bar"),
-
SimplePostTool.appendUrlPath(URI.create("http://[ff01::114]/a?foo=bar"), "b"));
- assertEquals(
- URI.create("http://[ff01::114]/a/b?foo=bar"),
-
SimplePostTool.appendUrlPath(URI.create("http://[ff01::114]/a/?foo=bar"), "b"));
- }
-
@Test
public void testGuessType() {
File f = new File("foo.doc");