3131import java .io .IOError ;
3232import java .io .IOException ;
3333import java .io .PrintStream ;
34- import java .io .UnsupportedEncodingException ;
3534import java .lang .reflect .Constructor ;
3635import java .net .URLClassLoader ;
3736import java .security .Security ;
@@ -138,6 +137,42 @@ private static LambdaRequestHandler findRequestHandler(final String handlerStrin
138137 return requestHandler ;
139138 }
140139
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+
141176 public static void setupRuntimeLogger (LambdaLogger lambdaLogger )
142177 throws ClassNotFoundException {
143178 ReflectUtil .setStaticField (
@@ -178,8 +213,7 @@ private static LogSink createLogSink() {
178213 }
179214
180215 public static void main (String [] args ) throws Throwable {
181- try {
182- LambdaContextLogger logger = initLogger ();
216+ try (LambdaContextLogger logger = initLogger ()){
183217 LambdaRequestHandler lambdaRequestHandler = getLambdaRequestHandlerObject (args [0 ], logger );
184218 startRuntimeLoop (lambdaRequestHandler , logger );
185219
@@ -198,42 +232,6 @@ private static LambdaContextLogger initLogger() {
198232 return logger ;
199233 }
200234
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-
237235 private static void startRuntimeLoop (LambdaRequestHandler requestHandler , LambdaContextLogger lambdaLogger ) throws Throwable {
238236 boolean shouldExit = false ;
239237 while (!shouldExit ) {
0 commit comments