Skip to content

Commit 18e38fd

Browse files
committed
Initial commit
1 parent 5175368 commit 18e38fd

File tree

5 files changed

+223
-0
lines changed

5 files changed

+223
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
target

pom.xml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<groupId>in.erail</groupId>
5+
<artifactId>api-framwork-amazon-lambda</artifactId>
6+
<version>1.0-SNAPSHOT</version>
7+
<packaging>jar</packaging>
8+
<dependencies>
9+
<dependency>
10+
<groupId>com.amazonaws</groupId>
11+
<artifactId>aws-lambda-java-core</artifactId>
12+
<version>1.1.0</version>
13+
</dependency>
14+
<dependency>
15+
<groupId>com.amazonaws</groupId>
16+
<artifactId>aws-lambda-java-events</artifactId>
17+
<version>1.1.0</version>
18+
</dependency>
19+
<dependency>
20+
<groupId>in.erail</groupId>
21+
<artifactId>api-framwork</artifactId>
22+
<version>1.0-SNAPSHOT</version>
23+
</dependency>
24+
<dependency>
25+
<groupId>in.erail</groupId>
26+
<artifactId>api-framwork</artifactId>
27+
<version>1.0-SNAPSHOT</version>
28+
<classifier>common-config</classifier>
29+
<type>zip</type>
30+
</dependency>
31+
<dependency>
32+
<groupId>com.amazonaws</groupId>
33+
<artifactId>aws-lambda-java-log4j2</artifactId>
34+
<version>1.0.0</version>
35+
</dependency>
36+
</dependencies>
37+
<properties>
38+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
39+
<maven.compiler.source>1.8</maven.compiler.source>
40+
<maven.compiler.target>1.8</maven.compiler.target>
41+
</properties>
42+
</project>
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package in.erail.amazon.lambda;
2+
3+
import com.amazonaws.services.lambda.runtime.Context;
4+
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
5+
import com.google.common.io.ByteStreams;
6+
import in.erail.glue.Glue;
7+
import in.erail.service.RESTService;
8+
import io.reactivex.Single;
9+
import io.reactivex.schedulers.Schedulers;
10+
import io.vertx.core.buffer.Buffer;
11+
import io.vertx.core.json.JsonObject;
12+
import io.vertx.reactivex.core.eventbus.Message;
13+
import java.io.IOException;
14+
import java.io.InputStream;
15+
import java.io.OutputStream;
16+
import java.io.OutputStreamWriter;
17+
import java.util.concurrent.CompletableFuture;
18+
import java.util.concurrent.ExecutionException;
19+
import java.util.logging.Level;
20+
import java.util.logging.Logger;
21+
22+
/**
23+
*
24+
* @author vinay
25+
*/
26+
public class AWSLambda implements RequestStreamHandler {
27+
28+
private final RESTService mService;
29+
30+
public AWSLambda(String pComponent) {
31+
mService = Glue.instance().resolve(pComponent);
32+
}
33+
34+
@Override
35+
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
36+
37+
JsonObject requestJson = new JsonObject(Buffer.buffer(ByteStreams.toByteArray(inputStream)));
38+
JsonObject responseJson = handleMessage(requestJson);
39+
40+
try (OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8")) {
41+
writer.write(responseJson.toString());
42+
}
43+
}
44+
45+
public JsonObject handleMessage(JsonObject pJsonObject) {
46+
47+
JsonObject msg;
48+
49+
try {
50+
CompletableFuture<JsonObject> result = new CompletableFuture<>();
51+
MessageAWSLambda<JsonObject> message = new MessageAWSLambda<>(result, pJsonObject);
52+
53+
Single
54+
.just(message)
55+
.map(m -> new Message<JsonObject>(message))
56+
.subscribeOn(Schedulers.computation())
57+
.subscribe(m -> getService().process(m));
58+
59+
msg = result.get();
60+
} catch (InterruptedException | ExecutionException ex) {
61+
msg = new JsonObject();
62+
Logger.getLogger(AWSLambda.class.getName()).log(Level.SEVERE, null, ex);
63+
}
64+
65+
return transform(msg);
66+
}
67+
68+
public JsonObject transform(JsonObject pMsg) {
69+
70+
if (!pMsg.containsKey("isBase64Encoded")) {
71+
pMsg.put("isBase64Encoded", Boolean.FALSE);
72+
}
73+
74+
if (!pMsg.containsKey("statusCode")) {
75+
pMsg.put("statusCode", "200");
76+
}
77+
78+
if (!pMsg.containsKey("headers")) {
79+
pMsg.put("headers", new JsonObject());
80+
}
81+
82+
if (!pMsg.containsKey("body")) {
83+
pMsg.put("body", new JsonObject().toString());
84+
} else {
85+
String body = pMsg.getValue("body").toString();
86+
pMsg.put("body", body);
87+
}
88+
89+
return pMsg;
90+
}
91+
92+
public RESTService getService() {
93+
return mService;
94+
}
95+
96+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package in.erail.amazon.lambda;
2+
3+
import io.vertx.core.AsyncResult;
4+
import io.vertx.core.Handler;
5+
import io.vertx.core.MultiMap;
6+
import io.vertx.core.eventbus.DeliveryOptions;
7+
import io.vertx.core.eventbus.Message;
8+
import io.vertx.core.json.JsonObject;
9+
import java.util.concurrent.CompletableFuture;
10+
11+
/**
12+
*
13+
* @author vinay
14+
*/
15+
public class MessageAWSLambda<T> implements Message<T> {
16+
17+
private CompletableFuture<T> mResult;
18+
private T mBody;
19+
20+
public MessageAWSLambda(CompletableFuture<T> pResult) {
21+
this(pResult, null);
22+
}
23+
24+
public MessageAWSLambda(CompletableFuture<T> pResult, T pBody) {
25+
this.mResult = pResult;
26+
this.mBody = pBody;
27+
}
28+
29+
@Override
30+
public String address() {
31+
throw new UnsupportedOperationException("Not supported yet.");
32+
}
33+
34+
@Override
35+
public MultiMap headers() {
36+
throw new UnsupportedOperationException("Not supported yet.");
37+
}
38+
39+
@Override
40+
public T body() {
41+
return mBody;
42+
}
43+
44+
@Override
45+
public String replyAddress() {
46+
throw new UnsupportedOperationException("Not supported yet.");
47+
}
48+
49+
@Override
50+
public boolean isSend() {
51+
throw new UnsupportedOperationException("Not supported yet.");
52+
}
53+
54+
@Override
55+
public void reply(Object pMessage) {
56+
mResult.complete((T) pMessage);
57+
}
58+
59+
@Override
60+
public <R> void reply(Object pMessage, Handler<AsyncResult<Message<R>>> pReplyHandler) {
61+
throw new UnsupportedOperationException("Not supported yet.");
62+
}
63+
64+
@Override
65+
public void reply(Object pMessage, DeliveryOptions pOptions) {
66+
throw new UnsupportedOperationException("Not supported yet.");
67+
}
68+
69+
@Override
70+
public <R> void reply(Object pMessage, DeliveryOptions pOptions, Handler<AsyncResult<Message<R>>> pReplyHandler) {
71+
throw new UnsupportedOperationException("Not supported yet.");
72+
}
73+
74+
@Override
75+
public void fail(int pFailureCode, String pMessage) {
76+
mResult.complete((T) new JsonObject().put("error", pMessage));
77+
}
78+
79+
}

target/maven-archiver/pom.properties

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#Generated by Maven
2+
#Thu Jan 11 18:47:26 GMT 2018
3+
version=1.0-SNAPSHOT
4+
groupId=in.erail
5+
artifactId=api-framwork-amazon-lambda

0 commit comments

Comments
 (0)