提交 84bc4740 编写于 作者: J Juergen Hoeller 提交者: unknown

Upgraded to Apache HttpComponents HttpClient 4.3.1 and HttpAsyncClient 4.0 GA,...

Upgraded to Apache HttpComponents HttpClient 4.3.1 and HttpAsyncClient 4.0 GA, as well as Jackson 2.2.2
上级 6e418fe4
...@@ -98,7 +98,7 @@ configure(allprojects) { project -> ...@@ -98,7 +98,7 @@ configure(allprojects) { project ->
"http://ehcache.org/apidocs/", "http://ehcache.org/apidocs/",
"http://quartz-scheduler.org/api/2.1.7/", "http://quartz-scheduler.org/api/2.1.7/",
"http://jackson.codehaus.org/1.9.12/javadoc/", "http://jackson.codehaus.org/1.9.12/javadoc/",
"http://fasterxml.github.com/jackson-core/javadoc/2.2.0/", "http://fasterxml.github.com/jackson-core/javadoc/2.2.2/",
] as String[] ] as String[]
} }
...@@ -385,7 +385,7 @@ project("spring-messaging") { ...@@ -385,7 +385,7 @@ project("spring-messaging") {
compile(project(":spring-context")) compile(project(":spring-context"))
optional(project(":spring-websocket")) optional(project(":spring-websocket"))
optional(project(":spring-webmvc")) optional(project(":spring-webmvc"))
optional("com.fasterxml.jackson.core:jackson-databind:2.2.0") optional("com.fasterxml.jackson.core:jackson-databind:2.2.2")
optional("org.projectreactor:reactor-core:1.0.0.BUILD-SNAPSHOT") optional("org.projectreactor:reactor-core:1.0.0.BUILD-SNAPSHOT")
optional("org.projectreactor:reactor-tcp:1.0.0.BUILD-SNAPSHOT") optional("org.projectreactor:reactor-tcp:1.0.0.BUILD-SNAPSHOT")
optional("org.eclipse.jetty.websocket:websocket-server:9.1.0.RC0") { optional("org.eclipse.jetty.websocket:websocket-server:9.1.0.RC0") {
...@@ -483,7 +483,7 @@ project("spring-jms") { ...@@ -483,7 +483,7 @@ project("spring-jms") {
optional("org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1") optional("org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1")
optional("javax.resource:connector-api:1.5") optional("javax.resource:connector-api:1.5")
optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12") optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
optional("com.fasterxml.jackson.core:jackson-databind:2.2.0") optional("com.fasterxml.jackson.core:jackson-databind:2.2.2")
} }
} }
...@@ -555,10 +555,10 @@ project("spring-web") { ...@@ -555,10 +555,10 @@ project("spring-web") {
optional("com.caucho:hessian:4.0.7") optional("com.caucho:hessian:4.0.7")
optional("rome:rome:1.0") optional("rome:rome:1.0")
optional("commons-fileupload:commons-fileupload:1.3") optional("commons-fileupload:commons-fileupload:1.3")
optional("org.apache.httpcomponents:httpclient:4.3-beta2") optional("org.apache.httpcomponents:httpclient:4.3.1")
optional("org.apache.httpcomponents:httpasyncclient:4.0-beta4") optional("org.apache.httpcomponents:httpasyncclient:4.0")
optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12") optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
optional("com.fasterxml.jackson.core:jackson-databind:2.2.0") optional("com.fasterxml.jackson.core:jackson-databind:2.2.2")
optional("taglibs:standard:1.1.2") optional("taglibs:standard:1.1.2")
optional("org.eclipse.jetty:jetty-servlet:9.1.0.RC0") { optional("org.eclipse.jetty:jetty-servlet:9.1.0.RC0") {
exclude group: "javax.servlet", module: "javax.servlet-api" exclude group: "javax.servlet", module: "javax.servlet-api"
...@@ -600,7 +600,7 @@ project("spring-websocket") { ...@@ -600,7 +600,7 @@ project("spring-websocket") {
exclude group: "javax.servlet", module: "javax.servlet" exclude group: "javax.servlet", module: "javax.servlet"
} }
optional("org.eclipse.jetty.websocket:websocket-client:9.1.0.RC0") optional("org.eclipse.jetty.websocket:websocket-client:9.1.0.RC0")
optional("com.fasterxml.jackson.core:jackson-databind:2.2.0") optional("com.fasterxml.jackson.core:jackson-databind:2.2.2")
optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12") optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
testCompile("org.apache.tomcat.embed:tomcat-embed-core:8.0.0-RC5") testCompile("org.apache.tomcat.embed:tomcat-embed-core:8.0.0-RC5")
testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}") testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
...@@ -675,7 +675,7 @@ project("spring-webmvc") { ...@@ -675,7 +675,7 @@ project("spring-webmvc") {
optional("velocity-tools:velocity-tools-view:1.4") optional("velocity-tools:velocity-tools-view:1.4")
optional("org.freemarker:freemarker:2.3.19") optional("org.freemarker:freemarker:2.3.19")
optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12") optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
optional("com.fasterxml.jackson.core:jackson-databind:2.2.0") optional("com.fasterxml.jackson.core:jackson-databind:2.2.2")
provided("javax.servlet:jstl:1.2") provided("javax.servlet:jstl:1.2")
provided("javax.servlet:javax.servlet-api:3.0.1") provided("javax.servlet:javax.servlet-api:3.0.1")
provided("javax.servlet.jsp:jsp-api:2.1") provided("javax.servlet.jsp:jsp-api:2.1")
...@@ -701,7 +701,7 @@ project("spring-webmvc") { ...@@ -701,7 +701,7 @@ project("spring-webmvc") {
testCompile("commons-fileupload:commons-fileupload:1.2") testCompile("commons-fileupload:commons-fileupload:1.2")
testCompile("commons-io:commons-io:1.3") testCompile("commons-io:commons-io:1.3")
testCompile("org.hibernate:hibernate-validator:4.3.0.Final") testCompile("org.hibernate:hibernate-validator:4.3.0.Final")
testCompile("org.apache.httpcomponents:httpclient:4.3-beta2") testCompile("org.apache.httpcomponents:httpclient:4.3.1")
testCompile("joda-time:joda-time:2.2") testCompile("joda-time:joda-time:2.2")
} }
...@@ -824,7 +824,7 @@ project("spring-test-mvc") { ...@@ -824,7 +824,7 @@ project("spring-test-mvc") {
testCompile("javax.servlet:jstl:1.2") testCompile("javax.servlet:jstl:1.2")
testCompile("org.hibernate:hibernate-validator:4.3.0.Final") testCompile("org.hibernate:hibernate-validator:4.3.0.Final")
testCompile("org.codehaus.jackson:jackson-mapper-asl:1.9.12") testCompile("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
testCompile("com.fasterxml.jackson.core:jackson-databind:2.2.0") testCompile("com.fasterxml.jackson.core:jackson-databind:2.2.2")
testCompile(project(":spring-context-support")) testCompile(project(":spring-context-support"))
testCompile(project(":spring-oxm")) testCompile(project(":spring-oxm"))
testCompile("com.thoughtworks.xstream:xstream:1.4.4") testCompile("com.thoughtworks.xstream:xstream:1.4.4")
......
...@@ -28,8 +28,8 @@ import org.apache.http.impl.client.CloseableHttpClient; ...@@ -28,8 +28,8 @@ import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.nio.client.CloseableHttpAsyncClient; import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
import org.apache.http.impl.nio.client.HttpAsyncClients; import org.apache.http.impl.nio.client.HttpAsyncClients;
import org.apache.http.nio.client.HttpAsyncClient; import org.apache.http.nio.client.HttpAsyncClient;
import org.apache.http.nio.reactor.IOReactorStatus;
import org.apache.http.protocol.HttpContext; import org.apache.http.protocol.HttpContext;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.util.Assert; import org.springframework.util.Assert;
...@@ -37,7 +37,7 @@ import org.springframework.util.Assert; ...@@ -37,7 +37,7 @@ import org.springframework.util.Assert;
/** /**
* Asynchronous extension of the {@link HttpComponentsClientHttpRequestFactory}. Uses * Asynchronous extension of the {@link HttpComponentsClientHttpRequestFactory}. Uses
* <a href="http://hc.apache.org/httpcomponents-asyncclient-dev/">Apache HttpComponents * <a href="http://hc.apache.org/httpcomponents-asyncclient-dev/">Apache HttpComponents
* HttpAsyncClient</a> to create requests. * HttpAsyncClient 4.0</a> to create requests.
* *
* @author Arjen Poutsma * @author Arjen Poutsma
* @since 4.0 * @since 4.0
...@@ -75,13 +75,15 @@ public class HttpComponentsAsyncClientHttpRequestFactory ...@@ -75,13 +75,15 @@ public class HttpComponentsAsyncClientHttpRequestFactory
* @param httpClient the HttpClient instance to use for this request factory * @param httpClient the HttpClient instance to use for this request factory
* @param httpAsyncClient the HttpAsyncClient instance to use for this request factory * @param httpAsyncClient the HttpAsyncClient instance to use for this request factory
*/ */
public HttpComponentsAsyncClientHttpRequestFactory(CloseableHttpClient httpClient, public HttpComponentsAsyncClientHttpRequestFactory(
CloseableHttpAsyncClient httpAsyncClient) { CloseableHttpClient httpClient, CloseableHttpAsyncClient httpAsyncClient) {
super(httpClient); super(httpClient);
Assert.notNull(httpAsyncClient, "'httpAsyncClient' must not be null"); Assert.notNull(httpAsyncClient, "'httpAsyncClient' must not be null");
this.httpAsyncClient = httpAsyncClient; this.httpAsyncClient = httpAsyncClient;
} }
/** /**
* Set the {@code HttpClient} used for * Set the {@code HttpClient} used for
* {@linkplain #createAsyncRequest(java.net.URI, org.springframework.http.HttpMethod) asynchronous execution}. * {@linkplain #createAsyncRequest(java.net.URI, org.springframework.http.HttpMethod) asynchronous execution}.
...@@ -105,7 +107,7 @@ public class HttpComponentsAsyncClientHttpRequestFactory ...@@ -105,7 +107,7 @@ public class HttpComponentsAsyncClientHttpRequestFactory
private void startAsyncClient() { private void startAsyncClient() {
CloseableHttpAsyncClient asyncClient = getHttpAsyncClient(); CloseableHttpAsyncClient asyncClient = getHttpAsyncClient();
if (asyncClient.getStatus() != IOReactorStatus.ACTIVE) { if (!asyncClient.isRunning()) {
asyncClient.start(); asyncClient.start();
} }
} }
...@@ -145,4 +147,5 @@ public class HttpComponentsAsyncClientHttpRequestFactory ...@@ -145,4 +147,5 @@ public class HttpComponentsAsyncClientHttpRequestFactory
getHttpAsyncClient().close(); getHttpAsyncClient().close();
} }
} }
} }
...@@ -52,12 +52,13 @@ import org.springframework.util.Assert; ...@@ -52,12 +52,13 @@ import org.springframework.util.Assert;
* @author Arjen Poutsma * @author Arjen Poutsma
* @since 3.1 * @since 3.1
*/ */
public class HttpComponentsClientHttpRequestFactory public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequestFactory, DisposableBean {
implements ClientHttpRequestFactory, DisposableBean {
private CloseableHttpClient httpClient;
private int connectTimeout; private int connectTimeout;
private int socketTimeout; private int socketTimeout;
private CloseableHttpClient httpClient;
private boolean bufferRequestBody = true; private boolean bufferRequestBody = true;
...@@ -80,6 +81,7 @@ public class HttpComponentsClientHttpRequestFactory ...@@ -80,6 +81,7 @@ public class HttpComponentsClientHttpRequestFactory
this.httpClient = httpClient; this.httpClient = httpClient;
} }
/** /**
* Set the {@code HttpClient} used for * Set the {@code HttpClient} used for
* {@linkplain #createRequest(URI, HttpMethod) synchronous execution}. * {@linkplain #createRequest(URI, HttpMethod) synchronous execution}.
...@@ -118,7 +120,6 @@ public class HttpComponentsClientHttpRequestFactory ...@@ -118,7 +120,6 @@ public class HttpComponentsClientHttpRequestFactory
/** /**
* Indicates whether this request factory should buffer the request body internally. * Indicates whether this request factory should buffer the request body internally.
*
* <p>Default is {@code true}. When sending large amounts of data via POST or PUT, it is * <p>Default is {@code true}. When sending large amounts of data via POST or PUT, it is
* recommended to change this property to {@code false}, so as not to run out of memory. * recommended to change this property to {@code false}, so as not to run out of memory.
*/ */
...@@ -126,20 +127,11 @@ public class HttpComponentsClientHttpRequestFactory ...@@ -126,20 +127,11 @@ public class HttpComponentsClientHttpRequestFactory
this.bufferRequestBody = bufferRequestBody; this.bufferRequestBody = bufferRequestBody;
} }
/**
* Indicates whether this request factory should buffer the request body internally.
*/
public boolean isBufferRequestBody() {
return bufferRequestBody;
}
@Override @Override
public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException { public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException {
CloseableHttpClient client = getHttpClient(); CloseableHttpClient client = getHttpClient();
Assert.state(client != null, Assert.state(client != null, "Synchronous execution requires an HttpClient to be set");
"Synchronous execution requires an HttpClient to be set");
HttpUriRequest httpRequest = createHttpUriRequest(httpMethod, uri); HttpUriRequest httpRequest = createHttpUriRequest(httpMethod, uri);
postProcessHttpRequest(httpRequest); postProcessHttpRequest(httpRequest);
HttpContext context = createHttpContext(httpMethod, uri); HttpContext context = createHttpContext(httpMethod, uri);
...@@ -159,13 +151,14 @@ public class HttpComponentsClientHttpRequestFactory ...@@ -159,13 +151,14 @@ public class HttpComponentsClientHttpRequestFactory
.setConnectTimeout(this.connectTimeout) .setConnectTimeout(this.connectTimeout)
.setSocketTimeout(this.socketTimeout) .setSocketTimeout(this.socketTimeout)
.build(); .build();
} else { }
else {
config = RequestConfig.DEFAULT; config = RequestConfig.DEFAULT;
} }
} }
context.setAttribute(HttpClientContext.REQUEST_CONFIG, config); context.setAttribute(HttpClientContext.REQUEST_CONFIG, config);
} }
if (bufferRequestBody) { if (this.bufferRequestBody) {
return new HttpComponentsClientHttpRequest(client, httpRequest, context); return new HttpComponentsClientHttpRequest(client, httpRequest, context);
} }
else { else {
...@@ -229,7 +222,7 @@ public class HttpComponentsClientHttpRequestFactory ...@@ -229,7 +222,7 @@ public class HttpComponentsClientHttpRequestFactory
*/ */
@Override @Override
public void destroy() throws Exception { public void destroy() throws Exception {
httpClient.close(); this.httpClient.close();
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册