Early registration of ReadListener

This is similar to the WriteListener changes on the ServerHttpResponse
where we are more naturally exposed to a delayed write. Nevertheless
we could also have a delayed read and should be consistent. The early
initialization of the RequestBodyPublisher also simplifies the
internal implementation a bit.
This commit is contained in:
Rossen Stoyanchev
2016-12-14 16:12:08 -05:00
parent 3370f41c61
commit 4738a61e98
2 changed files with 34 additions and 45 deletions

View File

@@ -16,14 +16,18 @@
package org.springframework.http.server.reactive;
import java.io.ByteArrayInputStream;
import java.util.Arrays;
import java.util.Collections;
import javax.servlet.AsyncContext;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import org.junit.Test;
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
import org.springframework.mock.web.test.DelegatingServletInputStream;
import org.springframework.mock.web.test.MockAsyncContext;
import org.springframework.mock.web.test.MockHttpServletRequest;
import org.springframework.mock.web.test.MockHttpServletResponse;
@@ -75,9 +79,25 @@ public class ServerHttpRequestTests {
}
private ServerHttpRequest createHttpRequest(String path) throws Exception {
HttpServletRequest request = new MockHttpServletRequest("GET", path);
HttpServletRequest request = new MockHttpServletRequest("GET", path) {
@Override
public ServletInputStream getInputStream() {
return new TestServletInputStream();
}
};
AsyncContext asyncContext = new MockAsyncContext(request, new MockHttpServletResponse());
return new ServletServerHttpRequest(request, asyncContext, new DefaultDataBufferFactory(), 1024);
}
private static class TestServletInputStream extends DelegatingServletInputStream {
public TestServletInputStream() {
super(new ByteArrayInputStream(new byte[0]));
}
@Override
public void setReadListener(ReadListener readListener) {
// Ignore
}
}
}