Browse Source

Avoid ClassCastException in TomcatHttpHandlerAdapter

Closes gh-24707
pull/24740/head
Rossen Stoyanchev 6 years ago
parent
commit
b121c0e2ea
  1. 11
      spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHttpHandlerAdapter.java

11
spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHttpHandlerAdapter.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2018 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -23,6 +23,7 @@ import java.nio.ByteBuffer; @@ -23,6 +23,7 @@ import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import javax.servlet.AsyncContext;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
@ -131,13 +132,17 @@ public class TomcatHttpHandlerAdapter extends ServletHttpHandlerAdapter { @@ -131,13 +132,17 @@ public class TomcatHttpHandlerAdapter extends ServletHttpHandlerAdapter {
@Override
protected DataBuffer readFromInputStream() throws IOException {
ServletInputStream inputStream = ((ServletRequest) getNativeRequest()).getInputStream();
if (!(inputStream instanceof CoyoteInputStream)) {
// It's possible InputStream can be wrapped, preventing use of CoyoteInputStream
return super.readFromInputStream();
}
boolean release = true;
int capacity = this.bufferSize;
DataBuffer dataBuffer = this.factory.allocateBuffer(capacity);
try {
ByteBuffer byteBuffer = dataBuffer.asByteBuffer(0, capacity);
ServletRequest request = getNativeRequest();
int read = ((CoyoteInputStream) request.getInputStream()).read(byteBuffer);
int read = ((CoyoteInputStream) inputStream).read(byteBuffer);
logBytesRead(read);
if (read > 0) {
dataBuffer.writePosition(read);

Loading…
Cancel
Save