Enable Jetty 12 support in WebFlux

Closes gh-29575
This commit is contained in:
Juergen Hoeller 2023-03-04 17:37:26 +01:00
parent 3854861a8a
commit c9aba1eaad
2 changed files with 12 additions and 13 deletions

View File

@ -37,12 +37,11 @@ dependencies {
optional("org.eclipse.jetty:jetty-servlet") { optional("org.eclipse.jetty:jetty-servlet") {
exclude group: "jakarta.servlet", module: "jakarta.servlet-api" exclude group: "jakarta.servlet", module: "jakarta.servlet-api"
} }
/* Jetty 12: see org.springframework.http.server.reactive.JettyHttpHandlerAdapter optional("org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.0.beta0") {
optional("org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.0.alpha2") {
exclude group: "jakarta.servlet", module: "jakarta.servlet-api" exclude group: "jakarta.servlet", module: "jakarta.servlet-api"
exclude group: "org.eclipse.jetty", module: "jetty-session" exclude group: "org.eclipse.jetty", module: "jetty-server"
exclude group: "org.eclipse.jetty", module: "jetty-servlet"
} }
*/
optional("org.eclipse.jetty:jetty-reactive-httpclient") optional("org.eclipse.jetty:jetty-reactive-httpclient")
optional('org.apache.httpcomponents.client5:httpclient5') optional('org.apache.httpcomponents.client5:httpclient5')
optional('org.apache.httpcomponents.core5:httpcore5-reactive') optional('org.apache.httpcomponents.core5:httpcore5-reactive')

View File

@ -17,6 +17,7 @@
package org.springframework.http.server.reactive; package org.springframework.http.server.reactive;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@ -52,10 +53,8 @@ public class JettyHttpHandlerAdapter extends ServletHttpHandlerAdapter {
private static final boolean jetty11Present = ClassUtils.isPresent( private static final boolean jetty11Present = ClassUtils.isPresent(
"org.eclipse.jetty.server.HttpOutput", JettyHttpHandlerAdapter.class.getClassLoader()); "org.eclipse.jetty.server.HttpOutput", JettyHttpHandlerAdapter.class.getClassLoader());
/* Jetty 12: see spring-web.gradle
private static final boolean jetty12Present = ClassUtils.isPresent( private static final boolean jetty12Present = ClassUtils.isPresent(
"org.eclipse.jetty.ee10.servlet.HttpOutput", JettyHttpHandlerAdapter.class.getClassLoader()); "org.eclipse.jetty.ee10.servlet.HttpOutput", JettyHttpHandlerAdapter.class.getClassLoader());
*/
public JettyHttpHandlerAdapter(HttpHandler httpHandler) { public JettyHttpHandlerAdapter(HttpHandler httpHandler) {
@ -85,12 +84,10 @@ public class JettyHttpHandlerAdapter extends ServletHttpHandlerAdapter {
return new Jetty11ServerHttpResponse( return new Jetty11ServerHttpResponse(
response, context, getDataBufferFactory(), getBufferSize(), request); response, context, getDataBufferFactory(), getBufferSize(), request);
} }
/* Jetty 12: see spring-web.gradle
else if (jetty12Present) { else if (jetty12Present) {
return new Jetty12ServerHttpResponse( return new Jetty12ServerHttpResponse(
response, context, getDataBufferFactory(), getBufferSize(), request); response, context, getDataBufferFactory(), getBufferSize(), request);
} }
*/
else { else {
return super.createResponse(response, context, request); return super.createResponse(response, context, request);
} }
@ -178,7 +175,6 @@ public class JettyHttpHandlerAdapter extends ServletHttpHandlerAdapter {
} }
/* Jetty 12: see spring-web.gradle
private static final class Jetty12ServerHttpResponse extends ServletServerHttpResponse { private static final class Jetty12ServerHttpResponse extends ServletServerHttpResponse {
Jetty12ServerHttpResponse(HttpServletResponse response, AsyncContext asyncContext, Jetty12ServerHttpResponse(HttpServletResponse response, AsyncContext asyncContext,
@ -192,14 +188,18 @@ public class JettyHttpHandlerAdapter extends ServletHttpHandlerAdapter {
protected int writeToOutputStream(DataBuffer dataBuffer) throws IOException { protected int writeToOutputStream(DataBuffer dataBuffer) throws IOException {
OutputStream output = getOutputStream(); OutputStream output = getOutputStream();
if (output instanceof org.eclipse.jetty.ee10.servlet.HttpOutput httpOutput) { if (output instanceof org.eclipse.jetty.ee10.servlet.HttpOutput httpOutput) {
ByteBuffer input = dataBuffer.toByteBuffer(); int len = 0;
int len = input.remaining(); try (DataBuffer.ByteBufferIterator iterator = dataBuffer.readableByteBuffers()) {
httpOutput.write(input); while (iterator.hasNext() && httpOutput.isReady()) {
ByteBuffer byteBuffer = iterator.next();
len += byteBuffer.remaining();
httpOutput.write(byteBuffer);
}
}
return len; return len;
} }
return super.writeToOutputStream(dataBuffer); return super.writeToOutputStream(dataBuffer);
} }
} }
*/
} }