io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler Maven / Gradle / Ivy
package io.quarkus.amazon.lambda.runtime;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
import io.quarkus.runtime.Application;
/**
* Intended to be used within a java runtime lambda deployment.
* This handler is a tiny wrapper for the app-developer-defined lambda handler.
* It delegates to a wrapper that uses arc to instantiate the
* app-developer's handler. Jackson is used to (de)serialize input and output types of app-dev's handler.
*
*/
public class QuarkusStreamHandler implements RequestStreamHandler {
protected static final String deploymentStatus;
protected static boolean started = false;
static {
StringWriter error = new StringWriter();
PrintWriter errorWriter = new PrintWriter(error, true);
if (Application.currentApplication() == null) { // were we already bootstrapped? Needed for mock azure unit testing.
try {
Class appClass = Class.forName("io.quarkus.runner.ApplicationImpl");
String[] args = {};
Application app = (Application) appClass.newInstance();
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
app.stop();
}
});
app.start(args);
errorWriter.println("Quarkus bootstrapped successfully.");
started = true;
} catch (Exception ex) {
errorWriter.println("Quarkus bootstrap failed.");
ex.printStackTrace(errorWriter);
}
} else {
errorWriter.println("Quarkus bootstrapped successfully.");
started = true;
}
deploymentStatus = error.toString();
}
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
if (!started) {
throw new IOException(deploymentStatus);
}
AmazonLambdaRecorder.handle(inputStream, outputStream, context);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy