Browse Source

Polish AbstractServerHttpResponse

pull/1111/head
Rossen Stoyanchev 10 years ago
parent
commit
7401d10f91
  1. 66
      spring-web-reactive/src/main/java/org/springframework/http/server/reactive/AbstractServerHttpResponse.java
  2. 19
      spring-web-reactive/src/main/java/org/springframework/http/server/reactive/ReactorServerHttpResponse.java
  3. 18
      spring-web-reactive/src/main/java/org/springframework/http/server/reactive/RxNettyServerHttpResponse.java
  4. 15
      spring-web-reactive/src/main/java/org/springframework/http/server/reactive/ServletServerHttpResponse.java
  5. 19
      spring-web-reactive/src/main/java/org/springframework/http/server/reactive/UndertowServerHttpResponse.java

66
spring-web-reactive/src/main/java/org/springframework/http/server/reactive/AbstractServerHttpResponse.java

@ -45,7 +45,7 @@ import org.springframework.util.MultiValueMap; @@ -45,7 +45,7 @@ import org.springframework.util.MultiValueMap;
*/
public abstract class AbstractServerHttpResponse implements ServerHttpResponse {
private static Log logger = LogFactory.getLog(AbstractServerHttpResponse.class);
private Log logger = LogFactory.getLog(getClass());
private static final int STATE_NEW = 1;
@ -53,17 +53,20 @@ public abstract class AbstractServerHttpResponse implements ServerHttpResponse { @@ -53,17 +53,20 @@ public abstract class AbstractServerHttpResponse implements ServerHttpResponse {
private static final int STATE_COMMITTED = 3;
private final DataBufferFactory dataBufferFactory;
private HttpStatus statusCode;
private final HttpHeaders headers;
private final MultiValueMap<String, ResponseCookie> cookies;
private final AtomicInteger state = new AtomicInteger(STATE_NEW);
private final List<Supplier<? extends Mono<Void>>> beforeCommitActions = new ArrayList<>(4);
private final DataBufferFactory dataBufferFactory;
private final AtomicInteger state = new AtomicInteger(STATE_NEW);
public AbstractServerHttpResponse(DataBufferFactory dataBufferFactory) {
Assert.notNull(dataBufferFactory, "'dataBufferFactory' must not be null");
@ -73,13 +76,29 @@ public abstract class AbstractServerHttpResponse implements ServerHttpResponse { @@ -73,13 +76,29 @@ public abstract class AbstractServerHttpResponse implements ServerHttpResponse {
this.cookies = new LinkedMultiValueMap<String, ResponseCookie>();
}
@Override
public final DataBufferFactory bufferFactory() {
return this.dataBufferFactory;
}
@Override
public boolean setStatusCode(HttpStatus statusCode) {
Assert.notNull(statusCode);
if (STATE_NEW == this.state.get()) {
this.statusCode = statusCode;
return true;
}
else if (logger.isDebugEnabled()) {
logger.debug("Can't set the status " + statusCode.toString() +
" because the HTTP response has already been committed");
}
return false;
}
protected HttpStatus getStatusCode() {
return statusCode;
return this.statusCode;
}
@Override
@ -100,6 +119,12 @@ public abstract class AbstractServerHttpResponse implements ServerHttpResponse { @@ -100,6 +119,12 @@ public abstract class AbstractServerHttpResponse implements ServerHttpResponse {
return this.cookies;
}
@Override
public void beforeCommit(Supplier<? extends Mono<Void>> action) {
Assert.notNull(action);
this.beforeCommitActions.add(action);
}
@Override
public Mono<Void> writeWith(Publisher<DataBuffer> publisher) {
return new ChannelSendOperator<>(publisher, writePublisher ->
@ -127,6 +152,12 @@ public abstract class AbstractServerHttpResponse implements ServerHttpResponse { @@ -127,6 +152,12 @@ public abstract class AbstractServerHttpResponse implements ServerHttpResponse {
return mono;
}
/**
* Implement this method to write to the underlying the response.
* @param body the publisher to write with
*/
protected abstract Mono<Void> writeWithInternal(Publisher<DataBuffer> body);
/**
* Implement this method to write the status code to the underlying response.
* This method is called once only.
@ -145,35 +176,10 @@ public abstract class AbstractServerHttpResponse implements ServerHttpResponse { @@ -145,35 +176,10 @@ public abstract class AbstractServerHttpResponse implements ServerHttpResponse {
*/
protected abstract void writeCookies();
/**
* Implement this method to write to the underlying the response.
* @param body the publisher to write with
*/
protected abstract Mono<Void> writeWithInternal(Publisher<DataBuffer> body);
@Override
public void beforeCommit(Supplier<? extends Mono<Void>> action) {
Assert.notNull(action);
this.beforeCommitActions.add(action);
}
@Override
public Mono<Void> setComplete() {
return applyBeforeCommit();
}
@Override
public boolean setStatusCode(HttpStatus statusCode) {
Assert.notNull(statusCode);
if (STATE_NEW == this.state.get()) {
this.statusCode = statusCode;
return true;
}
else if (logger.isDebugEnabled()) {
logger.debug("Can't set the status " + statusCode.toString() +
" because the HTTP response has already been committed");
}
return false;
}
}

19
spring-web-reactive/src/main/java/org/springframework/http/server/reactive/ReactorServerHttpResponse.java

@ -48,6 +48,7 @@ public class ReactorServerHttpResponse extends AbstractServerHttpResponse @@ -48,6 +48,7 @@ public class ReactorServerHttpResponse extends AbstractServerHttpResponse
private final HttpChannel channel;
public ReactorServerHttpResponse(HttpChannel response,
DataBufferFactory dataBufferFactory) {
super(dataBufferFactory);
@ -60,6 +61,15 @@ public class ReactorServerHttpResponse extends AbstractServerHttpResponse @@ -60,6 +61,15 @@ public class ReactorServerHttpResponse extends AbstractServerHttpResponse
return this.channel;
}
@Override
protected void writeStatusCode() {
HttpStatus statusCode = this.getStatusCode();
if (statusCode != null) {
getReactorChannel().status(HttpResponseStatus.valueOf(statusCode.value()));
}
}
@Override
protected Mono<Void> writeWithInternal(Publisher<DataBuffer> publisher) {
return Flux.from(publisher)
@ -70,14 +80,6 @@ public class ReactorServerHttpResponse extends AbstractServerHttpResponse @@ -70,14 +80,6 @@ public class ReactorServerHttpResponse extends AbstractServerHttpResponse
.then();
}
@Override
protected void writeStatusCode() {
HttpStatus statusCode = this.getStatusCode();
if (statusCode != null) {
getReactorChannel().status(HttpResponseStatus.valueOf(statusCode.value()));
}
}
@Override
protected void writeHeaders() {
for (String name : getHeaders().keySet()) {
@ -119,4 +121,5 @@ public class ReactorServerHttpResponse extends AbstractServerHttpResponse @@ -119,4 +121,5 @@ public class ReactorServerHttpResponse extends AbstractServerHttpResponse
return this.channel.sendFile(file, position, count);
});
}
}

18
spring-web-reactive/src/main/java/org/springframework/http/server/reactive/RxNettyServerHttpResponse.java

@ -46,6 +46,7 @@ public class RxNettyServerHttpResponse extends AbstractServerHttpResponse { @@ -46,6 +46,7 @@ public class RxNettyServerHttpResponse extends AbstractServerHttpResponse {
private final HttpServerResponse<ByteBuf> response;
public RxNettyServerHttpResponse(HttpServerResponse<ByteBuf> response,
NettyDataBufferFactory dataBufferFactory) {
super(dataBufferFactory);
@ -59,6 +60,15 @@ public class RxNettyServerHttpResponse extends AbstractServerHttpResponse { @@ -59,6 +60,15 @@ public class RxNettyServerHttpResponse extends AbstractServerHttpResponse {
return this.response;
}
@Override
protected void writeStatusCode() {
HttpStatus statusCode = this.getStatusCode();
if (statusCode != null) {
this.response.setStatus(HttpResponseStatus.valueOf(statusCode.value()));
}
}
@Override
protected Mono<Void> writeWithInternal(Publisher<DataBuffer> body) {
Observable<ByteBuf> content = RxJava1ObservableConverter.from(body).map(this::toByteBuf);
@ -70,14 +80,6 @@ public class RxNettyServerHttpResponse extends AbstractServerHttpResponse { @@ -70,14 +80,6 @@ public class RxNettyServerHttpResponse extends AbstractServerHttpResponse {
return (buffer instanceof FlushingDataBuffer ? new FlushingByteBuf(byteBuf) : byteBuf);
}
@Override
protected void writeStatusCode() {
HttpStatus statusCode = this.getStatusCode();
if (statusCode != null) {
this.response.setStatus(HttpResponseStatus.valueOf(statusCode.value()));
}
}
@Override
protected void writeHeaders() {
for (String name : getHeaders().keySet()) {

15
spring-web-reactive/src/main/java/org/springframework/http/server/reactive/ServletServerHttpResponse.java

@ -23,8 +23,6 @@ import java.util.function.Function; @@ -23,8 +23,6 @@ import java.util.function.Function;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.reactivestreams.Publisher;
import reactor.core.publisher.Mono;
@ -42,12 +40,11 @@ import org.springframework.util.Assert; @@ -42,12 +40,11 @@ import org.springframework.util.Assert;
*/
public class ServletServerHttpResponse extends AbstractServerHttpResponse {
private static final Log logger = LogFactory.getLog(ServletServerHttpResponse.class);
private final HttpServletResponse response;
private final Function<Publisher<DataBuffer>, Mono<Void>> responseBodyWriter;
public ServletServerHttpResponse(HttpServletResponse response,
DataBufferFactory dataBufferFactory,
Function<Publisher<DataBuffer>, Mono<Void>> responseBodyWriter) {
@ -58,14 +55,11 @@ public class ServletServerHttpResponse extends AbstractServerHttpResponse { @@ -58,14 +55,11 @@ public class ServletServerHttpResponse extends AbstractServerHttpResponse {
this.responseBodyWriter = responseBodyWriter;
}
public HttpServletResponse getServletResponse() {
return this.response;
}
@Override
protected Mono<Void> writeWithInternal(Publisher<DataBuffer> publisher) {
return this.responseBodyWriter.apply(publisher);
}
@Override
protected void writeStatusCode() {
@ -75,6 +69,11 @@ public class ServletServerHttpResponse extends AbstractServerHttpResponse { @@ -75,6 +69,11 @@ public class ServletServerHttpResponse extends AbstractServerHttpResponse {
}
}
@Override
protected Mono<Void> writeWithInternal(Publisher<DataBuffer> publisher) {
return this.responseBodyWriter.apply(publisher);
}
@Override
protected void writeHeaders() {
for (Map.Entry<String, List<String>> entry : getHeaders().entrySet()) {

19
spring-web-reactive/src/main/java/org/springframework/http/server/reactive/UndertowServerHttpResponse.java

@ -54,6 +54,7 @@ public class UndertowServerHttpResponse extends AbstractServerHttpResponse @@ -54,6 +54,7 @@ public class UndertowServerHttpResponse extends AbstractServerHttpResponse
private final HttpServerExchange exchange;
public UndertowServerHttpResponse(HttpServerExchange exchange,
DataBufferFactory dataBufferFactory) {
super(dataBufferFactory);
@ -66,6 +67,16 @@ public class UndertowServerHttpResponse extends AbstractServerHttpResponse @@ -66,6 +67,16 @@ public class UndertowServerHttpResponse extends AbstractServerHttpResponse
return this.exchange;
}
@Override
protected void writeStatusCode() {
HttpStatus statusCode = this.getStatusCode();
if (statusCode != null) {
getUndertowExchange().setStatusCode(statusCode.value());
}
}
@Override
protected Mono<Void> writeWithInternal(Publisher<DataBuffer> publisher) {
return Mono.from(s -> {
@ -101,14 +112,6 @@ public class UndertowServerHttpResponse extends AbstractServerHttpResponse @@ -101,14 +112,6 @@ public class UndertowServerHttpResponse extends AbstractServerHttpResponse
}
}
@Override
protected void writeStatusCode() {
HttpStatus statusCode = this.getStatusCode();
if (statusCode != null) {
getUndertowExchange().setStatusCode(statusCode.value());
}
}
@Override
protected void writeHeaders() {
for (Map.Entry<String, List<String>> entry : getHeaders().entrySet()) {

Loading…
Cancel
Save