Skip to content

Commit 87169bc

Browse files
ezylotartembilan
authored andcommitted
HTTP Outobund: Call encode() for URIs
* Encoding in AbstractHttpRequestExecutingMessageHandler.java is now done when flag is set * Added test for URI Encoding * Fixed checkstyle violations **Cherry-pick to 5.1.x**
1 parent 9f53b80 commit 87169bc

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

spring-integration-http/src/main/java/org/springframework/integration/http/outbound/AbstractHttpRequestExecutingMessageHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
* @author Artem Bilan
7474
* @author Wallace Wadge
7575
* @author Shiliang Li
76+
* @author Florian Schöffl
7677
*
7778
* @since 5.0
7879
*/
@@ -301,7 +302,7 @@ private URI generateUri(Message<?> requestMessage) {
301302
: UriComponentsBuilder.fromUri((URI) uri);
302303
UriComponents uriComponents = uriComponentsBuilder.buildAndExpand(uriVariables);
303304
try {
304-
return this.encodeUri ? uriComponents.toUri() : new URI(uriComponents.toUriString());
305+
return this.encodeUri ? uriComponents.encode().toUri() : new URI(uriComponents.toUriString());
305306
}
306307
catch (URISyntaxException e) {
307308
throw new MessageHandlingException(requestMessage, "Invalid URI [" + uri + "]", e);

spring-integration-http/src/test/java/org/springframework/integration/http/outbound/HttpRequestExecutingMessageHandlerTests.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
* @author Artem Bilan
7474
* @author Gary Russell
7575
* @author Gunnar Hillert
76+
* @author Florian Schöffl
7677
*/
7778
public class HttpRequestExecutingMessageHandlerTests {
7879

@@ -746,6 +747,54 @@ public void testUriExpression() {
746747
assertThat(restTemplate.actualUrl.get()).isEqualTo(theURL);
747748
}
748749

750+
@Test
751+
public void testUriEncoded() {
752+
SpelExpressionParser parser = new SpelExpressionParser();
753+
MockRestTemplate restTemplate = new MockRestTemplate();
754+
755+
HttpRequestExecutingMessageHandler handler = new HttpRequestExecutingMessageHandler(
756+
"http://example.com?query={query}",
757+
restTemplate
758+
);
759+
760+
// This flag is set by default to true, but for sake of clarity for the reader we explicitly set it here again
761+
handler.setEncodeUri(true);
762+
763+
handler.setUriVariableExpressions(Collections.singletonMap("query", parser.parseExpression("payload")));
764+
setBeanFactory(handler);
765+
handler.afterPropertiesSet();
766+
Message<?> message = new GenericMessage<>("test-äöü&%");
767+
try {
768+
handler.handleMessage(message);
769+
}
770+
catch (Exception ignored) {
771+
}
772+
assertThat(restTemplate.actualUrl.get()).isEqualTo("http://example.com?query=test-%C3%A4%C3%B6%C3%BC%26%25");
773+
}
774+
775+
@Test
776+
public void testUriEncodedDisabled() {
777+
SpelExpressionParser parser = new SpelExpressionParser();
778+
MockRestTemplate restTemplate = new MockRestTemplate();
779+
780+
HttpRequestExecutingMessageHandler handler = new HttpRequestExecutingMessageHandler(
781+
"http://example.com?query={query}",
782+
restTemplate
783+
);
784+
785+
handler.setEncodeUri(false);
786+
handler.setUriVariableExpressions(Collections.singletonMap("query", parser.parseExpression("payload")));
787+
setBeanFactory(handler);
788+
handler.afterPropertiesSet();
789+
Message<?> message = new GenericMessage<>("test-äöü");
790+
try {
791+
handler.handleMessage(message);
792+
}
793+
catch (Exception ignored) {
794+
}
795+
assertThat(restTemplate.actualUrl.get()).isEqualTo("http://example.com?query=test-äöü");
796+
}
797+
749798
@Test
750799
public void testInt2455UriNotEncoded() {
751800
MockRestTemplate restTemplate = new MockRestTemplate();

0 commit comments

Comments
 (0)