HTTPCORE-742: BasicHttpRequest#setUri does not correctly reset internal state
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/message/BasicHttpRequest.java b/httpcore5/src/main/java/org/apache/hc/core5/http/message/BasicHttpRequest.java
index 5b1db70..0d4279e 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/message/BasicHttpRequest.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/message/BasicHttpRequest.java
@@ -27,6 +27,9 @@
package org.apache.hc.core5.http.message;
+import java.net.URI;
+import java.net.URISyntaxException;
+
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.HttpRequest;
import org.apache.hc.core5.http.Method;
@@ -36,9 +39,6 @@
import org.apache.hc.core5.util.Args;
import org.apache.hc.core5.util.TextUtils;
-import java.net.URI;
-import java.net.URISyntaxException;
-
/**
* Basic implementation of {@link HttpRequest}.
*
@@ -288,6 +288,7 @@
buf.append('?').append(query);
}
this.path = buf.toString();
+ this.requestUri = null;
}
private void assembleRequestUri(final StringBuilder buf) {
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicMessages.java b/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicMessages.java
index cf84036..54a0095 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicMessages.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicMessages.java
@@ -35,6 +35,7 @@
import org.apache.hc.core5.http.HttpStatus;
import org.apache.hc.core5.http.Method;
import org.apache.hc.core5.net.URIAuthority;
+import org.apache.hc.core5.net.URIBuilder;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -211,5 +212,18 @@
Assertions.assertEquals("http://somehost/stuff", request.getRequestUri());
}
+ @Test
+ public void testModifyingExistingRequest() throws Exception {
+ final URI uri = URI.create("https://example.org");
+ final HttpRequest request = new BasicHttpRequest(Method.GET, uri);
+
+ final URI newUri = new URIBuilder(request.getUri())
+ .addParameter("name", "value")
+ .build();
+
+ request.setUri(newUri);
+ Assertions.assertEquals(newUri, request.getUri());
+ }
+
}