提交 129d7bef 编写于 作者: J Juergen Hoeller

Polishing

上级 d94ce0a1
......@@ -38,8 +38,7 @@ import org.springframework.web.WebApplicationInitializer;
* @author Arjen Poutsma
* @since 5.0
*/
public abstract class AbstractServletHttpHandlerAdapterInitializer
implements WebApplicationInitializer {
public abstract class AbstractServletHttpHandlerAdapterInitializer implements WebApplicationInitializer {
/**
* The default servlet name. Can be customized by overriding {@link #getServletName}.
......@@ -69,18 +68,16 @@ public abstract class AbstractServletHttpHandlerAdapterInitializer
HttpHandler httpHandler = createHttpHandler();
Assert.notNull(httpHandler,
"createHttpHandler() did not return a HttpHandler for servlet ["
+ servletName + "]");
"createHttpHandler() did not return a HttpHandler for servlet [" + servletName + "]");
ServletHttpHandlerAdapter servlet = createServlet(httpHandler);
Assert.notNull(servlet,
"createHttpHandler() did not return a ServletHttpHandlerAdapter for servlet ["
+ servletName + "]");
"createHttpHandler() did not return a ServletHttpHandlerAdapter for servlet [" + servletName + "]");
ServletRegistration.Dynamic registration = servletContext.addServlet(servletName, servlet);
Assert.notNull(registration,
"Failed to register servlet with name '" + servletName + "'." +
"Check if there is another servlet registered under the same name.");
"Check if there is another servlet registered under the same name.");
registration.setLoadOnStartup(1);
registration.addMapping(getServletMappings());
......
......@@ -19,24 +19,25 @@ package org.springframework.http.client.reactive;
import java.net.URI;
import java.util.function.Function;
import org.springframework.http.HttpMethod;
import reactor.core.publisher.Mono;
import reactor.ipc.netty.config.ClientOptions;
import reactor.ipc.netty.http.HttpException;
import reactor.ipc.netty.http.HttpInbound;
import org.springframework.http.HttpMethod;
/**
* Reactor-Netty implementation of {@link ClientHttpConnector}
*
* @author Brian Clozel
* @see reactor.ipc.netty.http.HttpClient
* @since 5.0
* @see reactor.ipc.netty.http.HttpClient
*/
public class ReactorClientHttpConnector implements ClientHttpConnector {
private final ClientOptions clientOptions;
/**
* Create a Reactor Netty {@link ClientHttpConnector} with default {@link ClientOptions}
* and SSL support enabled.
......@@ -52,6 +53,7 @@ public class ReactorClientHttpConnector implements ClientHttpConnector {
this.clientOptions = clientOptions;
}
@Override
public Mono<ClientHttpResponse> connect(HttpMethod method, URI uri,
Function<? super ClientHttpRequest, Mono<Void>> requestCallback) {
......@@ -66,4 +68,4 @@ public class ReactorClientHttpConnector implements ClientHttpConnector {
.map(httpInbound -> new ReactorClientHttpResponse(httpInbound));
}
}
\ No newline at end of file
}
......@@ -47,6 +47,7 @@ public abstract class AbstractServerHttpMessageWriter<T> implements ServerHttpMe
this.writer = writer;
}
@Override
public boolean canWrite(ResolvableType elementType, MediaType mediaType) {
return this.writer.canWrite(elementType, mediaType);
......@@ -78,14 +79,13 @@ public abstract class AbstractServerHttpMessageWriter<T> implements ServerHttpMe
/**
* Invoked before writing the response to resolve hints by
* {@link #write(Publisher, ResolvableType, ResolvableType, MediaType, ServerHttpRequest, ServerHttpResponse, Map)}.
*
* @param streamType the original type used for the method return value. For annotation
* based controllers, the {@link MethodParameter} is available via {@link ResolvableType#getSource()}.
* @param elementType the stream element type to process
* @param mediaType the content type to use when writing. May be {@code null} to
* indicate that the default content type of the converter must be used.
* @param request the current HTTP request
* @return Additional information about how to write the body
* @return additional information about how to write the body
*/
protected abstract Map<String, Object> resolveWriteHints(ResolvableType streamType, ResolvableType elementType,
MediaType mediaType, ServerHttpRequest request);
......
......@@ -18,16 +18,15 @@ package org.springframework.http.server.reactive;
import java.util.function.Function;
import io.netty.handler.codec.http.HttpResponseStatus;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import reactor.core.publisher.Mono;
import reactor.ipc.netty.http.HttpChannel;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.io.buffer.NettyDataBufferFactory;
import org.springframework.util.Assert;
import io.netty.handler.codec.http.HttpResponseStatus;
/**
* Adapt {@link HttpHandler} to the Reactor Netty channel handling function.
*
......@@ -43,7 +42,7 @@ public class ReactorHttpHandlerAdapter implements Function<HttpChannel, Mono<Voi
public ReactorHttpHandlerAdapter(HttpHandler httpHandler) {
Assert.notNull(httpHandler, "'httpHandler' is required.");
Assert.notNull(httpHandler, "HttpHandler is required");
this.httpHandler = httpHandler;
}
......
......@@ -86,15 +86,13 @@ import org.springframework.util.ClassUtils;
*/
public final class WebClient {
private static final ClassLoader classLoader = WebClient.class.getClassLoader();
private static final boolean jackson2Present =
ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", WebClient.class.getClassLoader()) &&
ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", WebClient.class.getClassLoader());
private static final boolean jackson2Present = ClassUtils
.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader)
&& ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator",
classLoader);
private static final boolean jaxb2Present =
ClassUtils.isPresent("javax.xml.bind.Binder", WebClient.class.getClassLoader());
private static final boolean jaxb2Present = ClassUtils
.isPresent("javax.xml.bind.Binder", classLoader);
private ClientHttpConnector clientHttpConnector;
......@@ -107,7 +105,6 @@ public final class WebClient {
* Create a {@code WebClient} instance, using the {@link ClientHttpConnector}
* implementation given as an argument to drive the underlying
* implementation.
*
* Register by default the following Encoders and Decoders:
* <ul>
* <li>{@link ByteBufferEncoder} / {@link ByteBufferDecoder}</li>
......@@ -115,7 +112,6 @@ public final class WebClient {
* <li>{@link Jaxb2XmlEncoder} / {@link Jaxb2XmlDecoder}</li>
* <li>{@link Jackson2JsonEncoder} / {@link Jackson2JsonDecoder}</li>
* </ul>
*
* @param clientHttpConnector the {@code ClientHttpRequestFactory} to use
*/
public WebClient(ClientHttpConnector clientHttpConnector) {
......@@ -124,8 +120,9 @@ public final class WebClient {
this.webClientConfig.setResponseErrorHandler(new DefaultResponseErrorHandler());
}
/**
* Adds default HTTP message readers.
* Add default HTTP message readers.
*/
protected final void addDefaultHttpMessageReaders(List<HttpMessageReader<?>> messageReaders) {
messageReaders.add(new DecoderHttpMessageReader<>(new ByteBufferDecoder()));
......@@ -140,7 +137,7 @@ public final class WebClient {
}
/**
* Adds default HTTP message writers.
* Add default HTTP message writers.
*/
protected final void addDefaultHttpMessageWriters(List<HttpMessageWriter<?>> messageWriters) {
messageWriters.add(new EncoderHttpMessageWriter<>(new ByteBufferEncoder()));
......@@ -187,11 +184,10 @@ public final class WebClient {
Collections.unmodifiableList(interceptors) : Collections.emptyList());
}
/**
* Perform the actual HTTP request/response exchange
*
* <p>
* Requesting from the exposed {@code Flux} will result in:
* <p>Requesting from the exposed {@code Flux} will result in:
* <ul>
* <li>building the actual HTTP request using the provided {@code ClientWebRequestBuilder}</li>
* <li>encoding the HTTP request body with the configured {@code HttpMessageWriter}s</li>
......@@ -199,7 +195,6 @@ public final class WebClient {
* </ul>
*/
public WebResponseActions perform(ClientWebRequestBuilder builder) {
ClientWebRequest clientWebRequest = builder.build();
DefaultClientHttpRequestInterceptionChain interception =
new DefaultClientHttpRequestInterceptionChain(this.clientHttpConnector,
......@@ -214,7 +209,6 @@ public final class WebClient {
public void doWithStatus(Consumer<HttpStatus> consumer) {
clientResponse.doOnNext(clientHttpResponse -> consumer.accept(clientHttpResponse.getStatusCode()));
}
@Override
public <T> T extract(ResponseExtractor<T> extractor) {
return extractor.extract(clientResponse, webClientConfig);
......@@ -222,6 +216,7 @@ public final class WebClient {
};
}
protected class DefaultWebClientConfig implements WebClientConfig {
private List<HttpMessageReader<?>> messageReaders;
......@@ -230,7 +225,6 @@ public final class WebClient {
private ResponseErrorHandler responseErrorHandler;
public DefaultWebClientConfig() {
this.messageReaders = new ArrayList<>();
addDefaultHttpMessageReaders(this.messageReaders);
......@@ -266,13 +260,13 @@ public final class WebClient {
}
}
protected class DefaultRequestCallback implements Function<ClientHttpRequest, Mono<Void>> {
private final ClientWebRequest clientWebRequest;
private final List<Consumer<? super HttpMessage>> requestCustomizers;
public DefaultRequestCallback(ClientWebRequest clientWebRequest,
List<Consumer<? super HttpMessage>> requestCustomizers) {
this.clientWebRequest = clientWebRequest;
......@@ -303,9 +297,8 @@ public final class WebClient {
}
@SuppressWarnings({"unchecked", "rawtypes"})
protected Mono<Void> writeRequestBody(Publisher<?> content,
ResolvableType requestType, ClientHttpRequest request,
List<HttpMessageWriter<?>> messageWriters) {
protected Mono<Void> writeRequestBody(Publisher<?> content, ResolvableType requestType,
ClientHttpRequest request, List<HttpMessageWriter<?>> messageWriters) {
MediaType contentType = request.getHeaders().getContentType();
Optional<HttpMessageWriter<?>> messageWriter = resolveWriter(messageWriters, requestType, contentType);
......@@ -324,6 +317,7 @@ public final class WebClient {
}
}
protected class DefaultClientHttpRequestInterceptionChain implements ClientHttpRequestInterceptionChain {
private final ClientHttpConnector connector;
......@@ -337,10 +331,9 @@ public final class WebClient {
private int index;
public DefaultClientHttpRequestInterceptionChain(ClientHttpConnector connector,
List<ClientHttpRequestInterceptor> interceptors,
ClientWebRequest clientWebRequest) {
List<ClientHttpRequestInterceptor> interceptors, ClientWebRequest clientWebRequest) {
Assert.notNull(connector, "'connector' should not be null");
Assert.notNull(connector, "ClientHttpConnector should not be null");
this.connector = connector;
this.interceptors = interceptors;
this.clientWebRequest = clientWebRequest;
......@@ -364,7 +357,6 @@ public final class WebClient {
new DefaultRequestCallback(this.clientWebRequest, this.requestCustomizers));
}
}
}
}
\ No newline at end of file
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册