Skip to content

Commit c2fe7d7

Browse files
ezylotartembilan
authored andcommitted
HTTP Outbound: Call encode() for URIs
* Encoding in `AbstractHttpRequestExecutingMessageHandler` is now done when flag is set * Added test for URI Encoding * Fixed checkstyle violations **Cherry-pick to 5.1.x** * Resolve conflicts in the `HttpRequestExecutingMessageHandlerTests`
1 parent 5c1b776 commit c2fe7d7

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
* @author Artem Bilan
7070
* @author Wallace Wadge
7171
* @author Shiliang Li
72+
* @author Florian Schöffl
7273
*
7374
* @since 5.0
7475
*/
@@ -303,7 +304,7 @@ private URI generateUri(Message<?> requestMessage) {
303304
: UriComponentsBuilder.fromUri((URI) uri);
304305
UriComponents uriComponents = uriComponentsBuilder.buildAndExpand(uriVariables);
305306
try {
306-
return this.encodeUri ? uriComponents.toUri() : new URI(uriComponents.toUriString());
307+
return this.encodeUri ? uriComponents.encode().toUri() : new URI(uriComponents.toUriString());
307308
}
308309
catch (URISyntaxException e) {
309310
throw new MessageHandlingException(requestMessage, "Invalid URI [" + uri + "]", e);

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

+49
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
* @author Artem Bilan
7979
* @author Gary Russell
8080
* @author Gunnar Hillert
81+
* @author Florian Schöffl
8182
*/
8283
public class HttpRequestExecutingMessageHandlerTests {
8384

@@ -751,6 +752,54 @@ public void testUriExpression() {
751752
assertEquals(theURL, restTemplate.actualUrl.get());
752753
}
753754

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

0 commit comments

Comments
 (0)