Skip to content

Commit 8f559cf

Browse files
committed
SWS-888 - Handle configuring max connections for secured routes
When configuring max connections for a secured route, the HttpRoute is actually not secured. This causes an improper lookup. This change updates the test case to ensure several things are verified including the fix provided.
1 parent 21b5004 commit 8f559cf

File tree

2 files changed

+47
-4
lines changed

2 files changed

+47
-4
lines changed

spring-ws-core/src/main/java/org/springframework/ws/transport/http/HttpComponentsMessageSender.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
* @author Alan Stewart
5252
* @author Barry Pitman
5353
* @author Arjen Poutsma
54+
* @author Greg Turnquist
5455
* @see HttpClient
5556
* @since 2.1.0
5657
*/
@@ -195,7 +196,13 @@ public void setMaxConnectionsPerHost(Map<String, String> maxConnectionsPerHost)
195196
for (Map.Entry<String, String> entry : maxConnectionsPerHost.entrySet()) {
196197
URI uri = new URI(entry.getKey());
197198
HttpHost host = new HttpHost(uri.getHost(), uri.getPort(), uri.getScheme());
198-
HttpRoute route = new HttpRoute(host);
199+
final HttpRoute route;
200+
201+
if (uri.getScheme().equals("https")) {
202+
route = new HttpRoute(host, null, true);
203+
} else {
204+
route = new HttpRoute(host);
205+
}
199206

200207
int max = Integer.parseInt(entry.getValue());
201208

spring-ws-core/src/test/java/org/springframework/ws/transport/http/HttpComponentsMessageSenderIntegrationTest.java

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
package org.springframework.ws.transport.http;
1818

19+
import static org.hamcrest.core.IsEqual.*;
20+
import static org.springframework.test.util.MatcherAssertionErrors.*;
21+
1922
import java.io.IOException;
2023
import java.net.URI;
2124
import java.net.URISyntaxException;
@@ -28,6 +31,9 @@
2831
import javax.xml.soap.MessageFactory;
2932

3033
import org.apache.commons.httpclient.URIException;
34+
import org.apache.http.HttpHost;
35+
import org.apache.http.conn.routing.HttpRoute;
36+
import org.apache.http.impl.conn.PoolingClientConnectionManager;
3137
import org.junit.Test;
3238
import org.mortbay.jetty.Server;
3339
import org.mortbay.jetty.servlet.Context;
@@ -49,13 +55,43 @@ protected AbstractHttpWebServiceMessageSender createMessageSender() {
4955

5056
@Test
5157
public void testMaxConnections() throws URISyntaxException, URIException {
58+
final String url1 = "https://www.example.com";
59+
URI uri1 = new URI(url1);
60+
HttpHost host1 = new HttpHost(uri1.getHost(), uri1.getPort(), uri1.getScheme());
61+
HttpRoute route1 = new HttpRoute(host1, null, true);
62+
assertThat(route1.isSecure(), equalTo(true));
63+
assertThat(route1.getTargetHost().getHostName(), equalTo("www.example.com"));
64+
assertThat(route1.getTargetHost().getPort(), equalTo(-1));
65+
66+
final String url2 = "http://www.example.com:8080";
67+
URI uri2 = new URI(url2);
68+
HttpHost host2 = new HttpHost(uri2.getHost(), uri2.getPort(), uri2.getScheme());
69+
HttpRoute route2 = new HttpRoute(host2);
70+
assertThat(route2.isSecure(), equalTo(false));
71+
assertThat(route2.getTargetHost().getHostName(), equalTo("www.example.com"));
72+
assertThat(route2.getTargetHost().getPort(), equalTo(8080));
73+
74+
final String url3 = "http://www.springframework.org";
75+
URI uri3 = new URI(url3);
76+
HttpHost host3 = new HttpHost(uri3.getHost(), uri3.getPort(), uri3.getScheme());
77+
HttpRoute route3 = new HttpRoute(host3);
78+
assertThat(route3.isSecure(), equalTo(false));
79+
assertThat(route3.getTargetHost().getHostName(), equalTo("www.springframework.org"));
80+
assertThat(route3.getTargetHost().getPort(), equalTo(-1));
81+
5282
HttpComponentsMessageSender messageSender = new HttpComponentsMessageSender();
5383
messageSender.setMaxTotalConnections(2);
5484
Map<String, String> maxConnectionsPerHost = new HashMap<String, String>();
55-
maxConnectionsPerHost.put("https://www.example.com", "1");
56-
maxConnectionsPerHost.put("http://www.example.com:8080", "7");
57-
maxConnectionsPerHost.put("http://www.springframework.org", "10");
85+
maxConnectionsPerHost.put(url1, "1");
86+
maxConnectionsPerHost.put(url2, "7");
87+
maxConnectionsPerHost.put(url3, "10");
5888
messageSender.setMaxConnectionsPerHost(maxConnectionsPerHost);
89+
90+
PoolingClientConnectionManager poolingClientConnectionManager =
91+
(PoolingClientConnectionManager) messageSender.getHttpClient().getConnectionManager();
92+
assertThat(poolingClientConnectionManager.getMaxPerRoute(route1), equalTo(1));
93+
assertThat(poolingClientConnectionManager.getMaxPerRoute(route2), equalTo(7));
94+
assertThat(poolingClientConnectionManager.getMaxPerRoute(route3), equalTo(10));
5995
}
6096

6197
@Test

0 commit comments

Comments
 (0)