31
31
import java .io .IOError ;
32
32
import java .io .IOException ;
33
33
import java .io .PrintStream ;
34
- import java .io .UnsupportedEncodingException ;
35
34
import java .lang .reflect .Constructor ;
36
35
import java .net .URLClassLoader ;
37
36
import java .security .Security ;
@@ -138,6 +137,42 @@ private static LambdaRequestHandler findRequestHandler(final String handlerStrin
138
137
return requestHandler ;
139
138
}
140
139
140
+ private static LambdaRequestHandler getLambdaRequestHandlerObject (String handler , LambdaContextLogger lambdaLogger ) throws ClassNotFoundException , IOException {
141
+ UnsafeUtil .disableIllegalAccessWarning ();
142
+
143
+ System .setOut (new PrintStream (new LambdaOutputStream (System .out ), false , "UTF-8" ));
144
+ System .setErr (new PrintStream (new LambdaOutputStream (System .err ), false , "UTF-8" ));
145
+ setupRuntimeLogger (lambdaLogger );
146
+
147
+ runtimeClient = new LambdaRuntimeApiClientImpl (LambdaEnvironment .RUNTIME_API );
148
+
149
+ String taskRoot = System .getProperty ("user.dir" );
150
+ String libRoot = "/opt/java" ;
151
+ // Make system classloader the customer classloader's parent to ensure any aws-lambda-java-core classes
152
+ // are loaded from the system classloader.
153
+ customerClassLoader = new CustomerClassLoader (taskRoot , libRoot , ClassLoader .getSystemClassLoader ());
154
+ Thread .currentThread ().setContextClassLoader (customerClassLoader );
155
+
156
+ // Load the user's handler
157
+ LambdaRequestHandler requestHandler = null ;
158
+ try {
159
+ requestHandler = findRequestHandler (handler , customerClassLoader );
160
+ } catch (UserFault userFault ) {
161
+ lambdaLogger .log (userFault .reportableError (), lambdaLogger .getLogFormat () == LogFormat .JSON ? LogLevel .ERROR : LogLevel .UNDEFINED );
162
+ LambdaError error = new LambdaError (
163
+ LambdaErrorConverter .fromUserFault (userFault ),
164
+ RapidErrorType .BadFunctionCode );
165
+ runtimeClient .reportInitError (error );
166
+ System .exit (1 );
167
+ }
168
+
169
+ if (INIT_TYPE_SNAP_START .equals (AWS_LAMBDA_INITIALIZATION_TYPE )) {
170
+ onInitComplete (lambdaLogger );
171
+ }
172
+
173
+ return requestHandler ;
174
+ }
175
+
141
176
public static void setupRuntimeLogger (LambdaLogger lambdaLogger )
142
177
throws ClassNotFoundException {
143
178
ReflectUtil .setStaticField (
@@ -178,8 +213,7 @@ private static LogSink createLogSink() {
178
213
}
179
214
180
215
public static void main (String [] args ) throws Throwable {
181
- try {
182
- LambdaContextLogger logger = initLogger ();
216
+ try (LambdaContextLogger logger = initLogger ()){
183
217
LambdaRequestHandler lambdaRequestHandler = getLambdaRequestHandlerObject (args [0 ], logger );
184
218
startRuntimeLoop (lambdaRequestHandler , logger );
185
219
@@ -198,42 +232,6 @@ private static LambdaContextLogger initLogger() {
198
232
return logger ;
199
233
}
200
234
201
- private static LambdaRequestHandler getLambdaRequestHandlerObject (String handler , LambdaContextLogger lambdaLogger ) throws UnsupportedEncodingException , ClassNotFoundException , IOException {
202
- UnsafeUtil .disableIllegalAccessWarning ();
203
-
204
- System .setOut (new PrintStream (new LambdaOutputStream (System .out ), false , "UTF-8" ));
205
- System .setErr (new PrintStream (new LambdaOutputStream (System .err ), false , "UTF-8" ));
206
- setupRuntimeLogger (lambdaLogger );
207
-
208
- runtimeClient = new LambdaRuntimeApiClientImpl (LambdaEnvironment .RUNTIME_API );
209
-
210
- String taskRoot = System .getProperty ("user.dir" );
211
- String libRoot = "/opt/java" ;
212
- // Make system classloader the customer classloader's parent to ensure any aws-lambda-java-core classes
213
- // are loaded from the system classloader.
214
- customerClassLoader = new CustomerClassLoader (taskRoot , libRoot , ClassLoader .getSystemClassLoader ());
215
- Thread .currentThread ().setContextClassLoader (customerClassLoader );
216
-
217
- // Load the user's handler
218
- LambdaRequestHandler requestHandler = null ;
219
- try {
220
- requestHandler = findRequestHandler (handler , customerClassLoader );
221
- } catch (UserFault userFault ) {
222
- lambdaLogger .log (userFault .reportableError (), lambdaLogger .getLogFormat () == LogFormat .JSON ? LogLevel .ERROR : LogLevel .UNDEFINED );
223
- LambdaError error = new LambdaError (
224
- LambdaErrorConverter .fromUserFault (userFault ),
225
- RapidErrorType .BadFunctionCode );
226
- runtimeClient .reportInitError (error );
227
- System .exit (1 );
228
- }
229
-
230
- if (INIT_TYPE_SNAP_START .equals (AWS_LAMBDA_INITIALIZATION_TYPE )) {
231
- onInitComplete (lambdaLogger );
232
- }
233
-
234
- return requestHandler ;
235
- }
236
-
237
235
private static void startRuntimeLoop (LambdaRequestHandler requestHandler , LambdaContextLogger lambdaLogger ) throws Throwable {
238
236
boolean shouldExit = false ;
239
237
while (!shouldExit ) {
0 commit comments