48
48
*
49
49
* @author Violeta Georgieva
50
50
* @author Brian Clozel
51
- * @author Brian Clozel
52
51
* @since 5.0
53
52
* @see org.springframework.web.server.adapter.AbstractReactiveWebInitializer
54
53
*/
@@ -64,7 +63,7 @@ public TomcatHttpHandlerAdapter(HttpHandler httpHandler) {
64
63
protected ServletServerHttpRequest createRequest (HttpServletRequest request , AsyncContext asyncContext )
65
64
throws IOException , URISyntaxException {
66
65
67
- Assert .notNull (getServletPath (), "servletPath is not initialized. " );
66
+ Assert .notNull (getServletPath (), "Servlet path is not initialized" );
68
67
return new TomcatServerHttpRequest (
69
68
request , asyncContext , getServletPath (), getDataBufferFactory (), getBufferSize ());
70
69
}
@@ -77,16 +76,20 @@ protected ServletServerHttpResponse createResponse(HttpServletResponse response,
77
76
response , asyncContext , getDataBufferFactory (), getBufferSize (), request );
78
77
}
79
78
79
+
80
80
private static final class TomcatServerHttpRequest extends ServletServerHttpRequest {
81
81
82
- private static final Field COYOTE_REQUEST_FIELD = ReflectionUtils . findField ( RequestFacade . class , "request" ) ;
82
+ private static final Field COYOTE_REQUEST_FIELD ;
83
83
84
84
private final int bufferSize ;
85
85
86
86
private final DataBufferFactory factory ;
87
87
88
88
static {
89
- ReflectionUtils .makeAccessible (COYOTE_REQUEST_FIELD );
89
+ Field field = ReflectionUtils .findField (RequestFacade .class , "request" );
90
+ Assert .state (field != null , "Incompatible Tomcat implementation" );
91
+ ReflectionUtils .makeAccessible (field );
92
+ COYOTE_REQUEST_FIELD = field ;
90
93
}
91
94
92
95
TomcatServerHttpRequest (HttpServletRequest request , AsyncContext context ,
@@ -99,8 +102,10 @@ private static final class TomcatServerHttpRequest extends ServletServerHttpRequ
99
102
}
100
103
101
104
private static HttpHeaders createTomcatHttpHeaders (HttpServletRequest request ) {
102
- Request tomcatRequest = ((org .apache .catalina .connector .Request ) ReflectionUtils
103
- .getField (COYOTE_REQUEST_FIELD , request )).getCoyoteRequest ();
105
+ org .apache .catalina .connector .Request connectorRequest = (org .apache .catalina .connector .Request )
106
+ ReflectionUtils .getField (COYOTE_REQUEST_FIELD , request );
107
+ Assert .state (connectorRequest != null , "No Tomcat connector request" );
108
+ Request tomcatRequest = connectorRequest .getCoyoteRequest ();
104
109
TomcatHeadersAdapter headers = new TomcatHeadersAdapter (tomcatRequest .getMimeHeaders ());
105
110
return new HttpHeaders (headers );
106
111
}
@@ -112,11 +117,9 @@ protected DataBuffer readFromInputStream() throws IOException {
112
117
DataBuffer dataBuffer = this .factory .allocateBuffer (capacity );
113
118
try {
114
119
ByteBuffer byteBuffer = dataBuffer .asByteBuffer (0 , capacity );
115
-
116
120
ServletRequest request = getNativeRequest ();
117
121
int read = ((CoyoteInputStream ) request .getInputStream ()).read (byteBuffer );
118
122
logBytesRead (read );
119
-
120
123
if (read > 0 ) {
121
124
dataBuffer .writePosition (read );
122
125
release = false ;
@@ -140,10 +143,13 @@ else if (read == -1) {
140
143
141
144
private static final class TomcatServerHttpResponse extends ServletServerHttpResponse {
142
145
143
- private static final Field COYOTE_RESPONSE_FIELD = ReflectionUtils . findField ( ResponseFacade . class , "response" ) ;
146
+ private static final Field COYOTE_RESPONSE_FIELD ;
144
147
145
148
static {
146
- ReflectionUtils .makeAccessible (COYOTE_RESPONSE_FIELD );
149
+ Field field = ReflectionUtils .findField (ResponseFacade .class , "response" );
150
+ Assert .state (field != null , "Incompatible Tomcat implementation" );
151
+ ReflectionUtils .makeAccessible (field );
152
+ COYOTE_RESPONSE_FIELD = field ;
147
153
}
148
154
149
155
TomcatServerHttpResponse (HttpServletResponse response , AsyncContext context ,
@@ -153,8 +159,10 @@ private static final class TomcatServerHttpResponse extends ServletServerHttpRes
153
159
}
154
160
155
161
private static HttpHeaders createTomcatHttpHeaders (HttpServletResponse response ) {
156
- Response tomcatResponse = ((org .apache .catalina .connector .Response ) ReflectionUtils
157
- .getField (COYOTE_RESPONSE_FIELD , response )).getCoyoteResponse ();
162
+ org .apache .catalina .connector .Response connectorResponse = (org .apache .catalina .connector .Response )
163
+ ReflectionUtils .getField (COYOTE_RESPONSE_FIELD , response );
164
+ Assert .state (connectorResponse != null , "No Tomcat connector response" );
165
+ Response tomcatResponse = connectorResponse .getCoyoteResponse ();
158
166
TomcatHeadersAdapter headers = new TomcatHeadersAdapter (tomcatResponse .getMimeHeaders ());
159
167
return new HttpHeaders (headers );
160
168
}
0 commit comments