Browse Source

referencing fields of a class using this

pull/1111/head
Marek Hawrylczak 11 years ago
parent
commit
f1bec5f1e4
  1. 66
      spring-web-reactive/src/main/java/org/springframework/reactive/web/http/undertow/RequestBodyPublisher.java
  2. 2
      spring-web-reactive/src/main/java/org/springframework/reactive/web/http/undertow/RequestHandlerAdapter.java
  3. 66
      spring-web-reactive/src/main/java/org/springframework/reactive/web/http/undertow/ResponseBodySubscriber.java
  4. 6
      spring-web-reactive/src/main/java/org/springframework/reactive/web/http/undertow/UndertowHttpServer.java
  5. 10
      spring-web-reactive/src/main/java/org/springframework/reactive/web/http/undertow/UndertowServerHttpRequest.java
  6. 4
      spring-web-reactive/src/main/java/org/springframework/reactive/web/http/undertow/UndertowServerHttpResponse.java

66
spring-web-reactive/src/main/java/org/springframework/reactive/web/http/undertow/RequestBodyPublisher.java

@ -55,12 +55,12 @@ class RequestBodyPublisher implements Publisher<ByteBuffer> {
if (s == null) { if (s == null) {
throw SpecificationExceptions.spec_2_13_exception(); throw SpecificationExceptions.spec_2_13_exception();
} }
if (subscriber != null) { if (this.subscriber != null) {
s.onError(new IllegalStateException("Only one subscriber allowed")); s.onError(new IllegalStateException("Only one subscriber allowed"));
} }
subscriber = s; this.subscriber = s;
subscriber.onSubscribe(new RequestBodySubscription()); this.subscriber.onSubscribe(new RequestBodySubscription());
} }
private class RequestBodySubscription private class RequestBodySubscription
@ -74,7 +74,7 @@ class RequestBodyPublisher implements Publisher<ByteBuffer> {
@Override @Override
public void cancel() { public void cancel() {
subscriptionClosed = true; this.subscriptionClosed = true;
close(); close();
} }
@ -82,7 +82,7 @@ class RequestBodyPublisher implements Publisher<ByteBuffer> {
public void request(long n) { public void request(long n) {
BackpressureUtils.checkRequest(n, subscriber); BackpressureUtils.checkRequest(n, subscriber);
if (subscriptionClosed) { if (this.subscriptionClosed) {
return; return;
} }
@ -96,13 +96,13 @@ class RequestBodyPublisher implements Publisher<ByteBuffer> {
} }
private void doOnNext(ByteBuffer buffer) { private void doOnNext(ByteBuffer buffer) {
draining = false; this.draining = false;
buffer.flip(); buffer.flip();
subscriber.onNext(buffer); subscriber.onNext(buffer);
} }
private void doOnComplete() { private void doOnComplete() {
subscriptionClosed = true; this.subscriptionClosed = true;
try { try {
subscriber.onComplete(); subscriber.onComplete();
} }
@ -112,7 +112,7 @@ class RequestBodyPublisher implements Publisher<ByteBuffer> {
} }
private void doOnError(Throwable t) { private void doOnError(Throwable t) {
subscriptionClosed = true; this.subscriptionClosed = true;
try { try {
subscriber.onError(t); subscriber.onError(t);
} }
@ -122,19 +122,19 @@ class RequestBodyPublisher implements Publisher<ByteBuffer> {
} }
private void close() { private void close() {
if (pooledBuffer != null) { if (this.pooledBuffer != null) {
safeClose(pooledBuffer); safeClose(this.pooledBuffer);
pooledBuffer = null; this.pooledBuffer = null;
} }
if (channel != null) { if (this.channel != null) {
safeClose(channel); safeClose(this.channel);
channel = null; this.channel = null;
} }
} }
@Override @Override
public void run() { public void run() {
if (subscriptionClosed || draining) { if (this.subscriptionClosed || this.draining) {
return; return;
} }
@ -142,12 +142,12 @@ class RequestBodyPublisher implements Publisher<ByteBuffer> {
return; return;
} }
draining = true; this.draining = true;
if (channel == null) { if (this.channel == null) {
channel = exchange.getRequestChannel(); this.channel = exchange.getRequestChannel();
if (channel == null) { if (this.channel == null) {
if (exchange.isRequestComplete()) { if (exchange.isRequestComplete()) {
return; return;
} }
@ -157,21 +157,21 @@ class RequestBodyPublisher implements Publisher<ByteBuffer> {
} }
} }
} }
if (pooledBuffer == null) { if (this.pooledBuffer == null) {
pooledBuffer = exchange.getConnection().getByteBufferPool().allocate(); this.pooledBuffer = exchange.getConnection().getByteBufferPool().allocate();
} }
else { else {
pooledBuffer.getBuffer().clear(); this.pooledBuffer.getBuffer().clear();
} }
try { try {
ByteBuffer buffer = pooledBuffer.getBuffer(); ByteBuffer buffer = this.pooledBuffer.getBuffer();
int count; int count;
do { do {
count = channel.read(buffer); count = this.channel.read(buffer);
if (count == 0) { if (count == 0) {
channel.getReadSetter().set(this); this.channel.getReadSetter().set(this);
channel.resumeReads(); this.channel.resumeReads();
} }
else if (count == -1) { else if (count == -1) {
if (buffer.position() > 0) { if (buffer.position() > 0) {
@ -181,11 +181,11 @@ class RequestBodyPublisher implements Publisher<ByteBuffer> {
} }
else { else {
if (buffer.remaining() == 0) { if (buffer.remaining() == 0) {
if (demand == 0) { if (this.demand == 0) {
channel.suspendReads(); this.channel.suspendReads();
} }
doOnNext(buffer); doOnNext(buffer);
if (demand > 0) { if (this.demand > 0) {
scheduleNextMessage(); scheduleNextMessage();
} }
break; break;
@ -200,12 +200,12 @@ class RequestBodyPublisher implements Publisher<ByteBuffer> {
@Override @Override
public void handleEvent(StreamSourceChannel channel) { public void handleEvent(StreamSourceChannel channel) {
if (subscriptionClosed) { if (this.subscriptionClosed) {
return; return;
} }
try { try {
ByteBuffer buffer = pooledBuffer.getBuffer(); ByteBuffer buffer = this.pooledBuffer.getBuffer();
int count; int count;
do { do {
count = channel.read(buffer); count = channel.read(buffer);
@ -220,11 +220,11 @@ class RequestBodyPublisher implements Publisher<ByteBuffer> {
} }
else { else {
if (buffer.remaining() == 0) { if (buffer.remaining() == 0) {
if (demand == 0) { if (this.demand == 0) {
channel.suspendReads(); channel.suspendReads();
} }
doOnNext(buffer); doOnNext(buffer);
if (demand > 0) { if (this.demand > 0) {
scheduleNextMessage(); scheduleNextMessage();
} }
break; break;

2
spring-web-reactive/src/main/java/org/springframework/reactive/web/http/undertow/RequestHandlerAdapter.java

@ -50,7 +50,7 @@ class RequestHandlerAdapter implements io.undertow.server.HttpHandler {
new UndertowServerHttpResponse(exchange, responseBodySubscriber); new UndertowServerHttpResponse(exchange, responseBodySubscriber);
exchange.dispatch(); exchange.dispatch();
httpHandler.handle(request, response).subscribe(new Subscriber<Void>() { this.httpHandler.handle(request, response).subscribe(new Subscriber<Void>() {
@Override @Override
public void onSubscribe(Subscription subscription) { public void onSubscribe(Subscription subscription) {
subscription.request(Long.MAX_VALUE); subscription.request(Long.MAX_VALUE);

66
spring-web-reactive/src/main/java/org/springframework/reactive/web/http/undertow/ResponseBodySubscriber.java

@ -60,29 +60,29 @@ class ResponseBodySubscriber extends BaseSubscriber<ByteBuffer>
@Override @Override
public void onSubscribe(Subscription s) { public void onSubscribe(Subscription s) {
super.onSubscribe(s); super.onSubscribe(s);
subscription = s; this.subscription = s;
subscription.request(1); this.subscription.request(1);
} }
@Override @Override
public void onNext(ByteBuffer buffer) { public void onNext(ByteBuffer buffer) {
super.onNext(buffer); super.onNext(buffer);
if (responseChannel == null) { if (this.responseChannel == null) {
responseChannel = exchange.getResponseChannel(); this.responseChannel = this.exchange.getResponseChannel();
} }
writing.incrementAndGet(); this.writing.incrementAndGet();
try { try {
int c; int c;
do { do {
c = responseChannel.write(buffer); c = this.responseChannel.write(buffer);
} while (buffer.hasRemaining() && c > 0); } while (buffer.hasRemaining() && c > 0);
if (buffer.hasRemaining()) { if (buffer.hasRemaining()) {
writing.incrementAndGet(); this.writing.incrementAndGet();
enqueue(buffer); enqueue(buffer);
responseChannel.getWriteSetter().set(this); this.responseChannel.getWriteSetter().set(this);
responseChannel.resumeWrites(); this.responseChannel.resumeWrites();
} }
else { else {
this.subscription.request(1); this.subscription.request(1);
@ -93,8 +93,8 @@ class ResponseBodySubscriber extends BaseSubscriber<ByteBuffer>
onError(ex); onError(ex);
} }
finally { finally {
writing.decrementAndGet(); this.writing.decrementAndGet();
if (closing.get()) { if (this.closing.get()) {
closeIfDone(); closeIfDone();
} }
} }
@ -103,12 +103,12 @@ class ResponseBodySubscriber extends BaseSubscriber<ByteBuffer>
private void enqueue(ByteBuffer src) { private void enqueue(ByteBuffer src) {
do { do {
PooledByteBuffer pooledBuffer = PooledByteBuffer pooledBuffer =
exchange.getConnection().getByteBufferPool().allocate(); this.exchange.getConnection().getByteBufferPool().allocate();
ByteBuffer dst = pooledBuffer.getBuffer(); ByteBuffer dst = pooledBuffer.getBuffer();
copy(dst, src); copy(dst, src);
dst.flip(); dst.flip();
buffers.add(pooledBuffer); this.buffers.add(pooledBuffer);
} while (src.remaining() > 0); } while (src.remaining() > 0);
} }
@ -124,25 +124,25 @@ class ResponseBodySubscriber extends BaseSubscriber<ByteBuffer>
try { try {
int c; int c;
do { do {
ByteBuffer buffer = buffers.peek().getBuffer(); ByteBuffer buffer = this.buffers.peek().getBuffer();
do { do {
c = channel.write(buffer); c = channel.write(buffer);
} while (buffer.hasRemaining() && c > 0); } while (buffer.hasRemaining() && c > 0);
if (!buffer.hasRemaining()) { if (!buffer.hasRemaining()) {
safeClose(buffers.remove()); safeClose(this.buffers.remove());
} }
} while (!buffers.isEmpty() && c > 0); } while (!this.buffers.isEmpty() && c > 0);
if (!buffers.isEmpty()) { if (!this.buffers.isEmpty()) {
channel.resumeWrites(); channel.resumeWrites();
} }
else { else {
writing.decrementAndGet(); this.writing.decrementAndGet();
if (closing.get()) { if (this.closing.get()) {
closeIfDone(); closeIfDone();
} }
else { else {
subscription.request(1); this.subscription.request(1);
} }
} }
} }
@ -154,10 +154,10 @@ class ResponseBodySubscriber extends BaseSubscriber<ByteBuffer>
@Override @Override
public void onError(Throwable t) { public void onError(Throwable t) {
super.onError(t); super.onError(t);
if (!exchange.isResponseStarted() && if (!this.exchange.isResponseStarted() &&
exchange.getStatusCode() < INTERNAL_SERVER_ERROR.value()) { this.exchange.getStatusCode() < INTERNAL_SERVER_ERROR.value()) {
exchange.setStatusCode(INTERNAL_SERVER_ERROR.value()); this.exchange.setStatusCode(INTERNAL_SERVER_ERROR.value());
} }
logger.error("ResponseBodySubscriber error", t); logger.error("ResponseBodySubscriber error", t);
} }
@ -166,15 +166,15 @@ class ResponseBodySubscriber extends BaseSubscriber<ByteBuffer>
public void onComplete() { public void onComplete() {
super.onComplete(); super.onComplete();
if (responseChannel != null) { if (this.responseChannel != null) {
closing.set(true); this.closing.set(true);
closeIfDone(); closeIfDone();
} }
} }
private void closeIfDone() { private void closeIfDone() {
if (writing.get() == 0) { if (this.writing.get() == 0) {
if (closing.compareAndSet(true, false)) { if (this.closing.compareAndSet(true, false)) {
closeChannel(); closeChannel();
} }
} }
@ -182,16 +182,16 @@ class ResponseBodySubscriber extends BaseSubscriber<ByteBuffer>
private void closeChannel() { private void closeChannel() {
try { try {
responseChannel.shutdownWrites(); this.responseChannel.shutdownWrites();
if (!responseChannel.flush()) { if (!this.responseChannel.flush()) {
responseChannel.getWriteSetter().set( this.responseChannel.getWriteSetter().set(
flushingChannelListener( flushingChannelListener(
o -> safeClose(responseChannel), o -> safeClose(this.responseChannel),
closingChannelExceptionHandler())); closingChannelExceptionHandler()));
responseChannel.resumeWrites(); this.responseChannel.resumeWrites();
} }
responseChannel = null; this.responseChannel = null;
} }
catch (IOException ex) { catch (IOException ex) {
onError(ex); onError(ex);

6
spring-web-reactive/src/main/java/org/springframework/reactive/web/http/undertow/UndertowHttpServer.java

@ -40,7 +40,7 @@ public class UndertowHttpServer extends HttpServerSupport
HttpHandler handler = new RequestHandlerAdapter(getHttpHandler()); HttpHandler handler = new RequestHandlerAdapter(getHttpHandler());
undertowServer = Undertow.builder() this.undertowServer = Undertow.builder()
.addHttpListener(getPort() != -1 ? getPort() : 8080, "localhost") .addHttpListener(getPort() != -1 ? getPort() : 8080, "localhost")
.setHandler(handler) .setHandler(handler)
.build(); .build();
@ -49,7 +49,7 @@ public class UndertowHttpServer extends HttpServerSupport
@Override @Override
public void start() { public void start() {
if (!running) { if (!running) {
undertowServer.start(); this.undertowServer.start();
running = true; running = true;
} }
@ -58,7 +58,7 @@ public class UndertowHttpServer extends HttpServerSupport
@Override @Override
public void stop() { public void stop() {
if (running) { if (running) {
undertowServer.stop(); this.undertowServer.stop();
running = false; running = false;
} }
} }

10
spring-web-reactive/src/main/java/org/springframework/reactive/web/http/undertow/UndertowServerHttpRequest.java

@ -54,15 +54,15 @@ class UndertowServerHttpRequest implements ReactiveServerHttpRequest {
@Override @Override
public HttpMethod getMethod() { public HttpMethod getMethod() {
return HttpMethod.valueOf(exchange.getRequestMethod().toString()); return HttpMethod.valueOf(this.exchange.getRequestMethod().toString());
} }
@Override @Override
public URI getURI() { public URI getURI() {
try { try {
StringBuilder uri = new StringBuilder(exchange.getRequestPath()); StringBuilder uri = new StringBuilder(this.exchange.getRequestPath());
if (StringUtils.hasLength(exchange.getQueryString())) { if (StringUtils.hasLength(this.exchange.getQueryString())) {
uri.append('?').append(exchange.getQueryString()); uri.append('?').append(this.exchange.getQueryString());
} }
return new URI(uri.toString()); return new URI(uri.toString());
} }
@ -75,7 +75,7 @@ class UndertowServerHttpRequest implements ReactiveServerHttpRequest {
public HttpHeaders getHeaders() { public HttpHeaders getHeaders() {
if (this.headers == null) { if (this.headers == null) {
this.headers = new HttpHeaders(); this.headers = new HttpHeaders();
for (HeaderValues headerValues : exchange.getRequestHeaders()) { for (HeaderValues headerValues : this.exchange.getRequestHeaders()) {
for (String value : headerValues) { for (String value : headerValues) {
this.headers.add(headerValues.getHeaderName().toString(), value); this.headers.add(headerValues.getHeaderName().toString(), value);
} }

4
spring-web-reactive/src/main/java/org/springframework/reactive/web/http/undertow/UndertowServerHttpResponse.java

@ -51,7 +51,7 @@ class UndertowServerHttpResponse implements ReactiveServerHttpResponse {
@Override @Override
public void setStatusCode(HttpStatus status) { public void setStatusCode(HttpStatus status) {
exchange.setStatusCode(status.value()); this.exchange.setStatusCode(status.value());
} }
@Override @Override
@ -103,7 +103,7 @@ class UndertowServerHttpResponse implements ReactiveServerHttpResponse {
if (!this.headersWritten) { if (!this.headersWritten) {
for (Map.Entry<String, List<String>> entry : this.headers.entrySet()) { for (Map.Entry<String, List<String>> entry : this.headers.entrySet()) {
String headerName = entry.getKey(); String headerName = entry.getKey();
exchange.getResponseHeaders() this.exchange.getResponseHeaders()
.addAll(HttpString.tryFromString(headerName), entry.getValue()); .addAll(HttpString.tryFromString(headerName), entry.getValue());
} }

Loading…
Cancel
Save