Skip to content

Commit bde11ef

Browse files
markusguldenKevinGilmore
authored andcommitted
BAEL-1821 (eugenp#4487)
* Moved Lambda examples to separate module Implementation of API Gateway example * Format fixes * Format fixes * Minor fixes * Minor fixes * Minor fixes
1 parent 6522191 commit bde11ef

File tree

10 files changed

+334
-0
lines changed

10 files changed

+334
-0
lines changed

aws-lambda/pom.xml

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<parent>
6+
<artifactId>parent-modules</artifactId>
7+
<groupId>com.baeldung</groupId>
8+
<version>1.0.0-SNAPSHOT</version>
9+
</parent>
10+
<modelVersion>4.0.0</modelVersion>
11+
12+
<groupId>com.baeldung</groupId>
13+
<artifactId>aws-lambda</artifactId>
14+
<version>0.1.0-SNAPSHOT</version>
15+
<packaging>jar</packaging>
16+
<name>aws-lambda</name>
17+
18+
<dependencies>
19+
20+
<dependency>
21+
<groupId>com.amazonaws</groupId>
22+
<artifactId>aws-java-sdk-dynamodb</artifactId>
23+
<version>1.11.241</version>
24+
</dependency>
25+
<dependency>
26+
<groupId>com.amazonaws</groupId>
27+
<artifactId>aws-java-sdk-core</artifactId>
28+
<version>1.11.241</version>
29+
</dependency>
30+
<dependency>
31+
<groupId>com.amazonaws</groupId>
32+
<artifactId>aws-lambda-java-core</artifactId>
33+
<version>${aws-lambda-java-core.version}</version>
34+
<exclusions>
35+
<exclusion>
36+
<artifactId>commons-logging</artifactId>
37+
<groupId>commons-logging</groupId>
38+
</exclusion>
39+
</exclusions>
40+
</dependency>
41+
<dependency>
42+
<groupId>com.amazonaws</groupId>
43+
<artifactId>aws-lambda-java-events</artifactId>
44+
<version>${aws-lambda-java-events.version}</version>
45+
<exclusions>
46+
<exclusion>
47+
<artifactId>commons-logging</artifactId>
48+
<groupId>commons-logging</groupId>
49+
</exclusion>
50+
</exclusions>
51+
</dependency>
52+
<dependency>
53+
<groupId>com.google.code.gson</groupId>
54+
<artifactId>gson</artifactId>
55+
<version>${gson.version}</version>
56+
</dependency>
57+
<dependency>
58+
<groupId>commons-io</groupId>
59+
<artifactId>commons-io</artifactId>
60+
<version>${commons-io.version}</version>
61+
</dependency>
62+
<dependency>
63+
<groupId>com.googlecode.json-simple</groupId>
64+
<artifactId>json-simple</artifactId>
65+
<version>${json-simple.version}</version>
66+
</dependency>
67+
</dependencies>
68+
<build>
69+
<plugins>
70+
<plugin>
71+
<groupId>org.apache.maven.plugins</groupId>
72+
<artifactId>maven-shade-plugin</artifactId>
73+
<version>${maven-shade-plugin.version}</version>
74+
<configuration>
75+
<createDependencyReducedPom>false</createDependencyReducedPom>
76+
</configuration>
77+
<executions>
78+
<execution>
79+
<phase>package</phase>
80+
<goals>
81+
<goal>shade</goal>
82+
</goals>
83+
</execution>
84+
</executions>
85+
</plugin>
86+
</plugins>
87+
</build>
88+
<properties>
89+
<json-simple.version>1.1.1</json-simple.version>
90+
<org.json.version>20180130</org.json.version>
91+
<commons-io.version>2.5</commons-io.version>
92+
<aws-lambda-java-events.version>1.3.0</aws-lambda-java-events.version>
93+
<aws-lambda-java-core.version>1.2.0</aws-lambda-java-core.version>
94+
<gson.version>2.8.2</gson.version>
95+
<aws-java-sdk-core.version>1.11.241</aws-java-sdk-core.version>
96+
<maven-shade-plugin.version>3.0.0</maven-shade-plugin.version>
97+
<maven-dependency-plugin.version>2.10</maven-dependency-plugin.version>
98+
</properties>
99+
</project>

aws/src/main/java/com/baeldung/lambda/LambdaMethodHandler.java renamed to aws-lambda/src/main/java/com/baeldung/lambda/LambdaMethodHandler.java

File renamed without changes.

aws/src/main/java/com/baeldung/lambda/LambdaRequestHandler.java renamed to aws-lambda/src/main/java/com/baeldung/lambda/LambdaRequestHandler.java

File renamed without changes.

aws/src/main/java/com/baeldung/lambda/LambdaRequestStreamHandler.java renamed to aws-lambda/src/main/java/com/baeldung/lambda/LambdaRequestStreamHandler.java

File renamed without changes.
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
package com.baeldung.lambda.apigateway;
2+
3+
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
4+
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
5+
import com.amazonaws.services.dynamodbv2.document.*;
6+
import com.amazonaws.services.dynamodbv2.document.spec.PutItemSpec;
7+
import com.amazonaws.services.lambda.runtime.Context;
8+
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
9+
import com.baeldung.lambda.apigateway.model.Person;
10+
import org.json.simple.JSONObject;
11+
import org.json.simple.parser.JSONParser;
12+
import org.json.simple.parser.ParseException;
13+
14+
import java.io.*;
15+
16+
public class APIDemoHandler implements RequestStreamHandler {
17+
18+
private JSONParser parser = new JSONParser();
19+
private static final String DYNAMODB_TABLE_NAME = System.getenv("TABLE_NAME");
20+
21+
@Override
22+
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
23+
24+
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
25+
JSONObject responseJson = new JSONObject();
26+
27+
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.defaultClient();
28+
DynamoDB dynamoDb = new DynamoDB(client);
29+
30+
try {
31+
JSONObject event = (JSONObject) parser.parse(reader);
32+
33+
if (event.get("body") != null) {
34+
35+
Person person = new Person((String) event.get("body"));
36+
37+
dynamoDb.getTable(DYNAMODB_TABLE_NAME)
38+
.putItem(new PutItemSpec().withItem(new Item().withNumber("id", person.getId())
39+
.withString("firstName", person.getFirstName())
40+
.withString("lastName", person.getLastName()).withNumber("age", person.getAge())
41+
.withString("address", person.getAddress())));
42+
}
43+
44+
JSONObject responseBody = new JSONObject();
45+
responseBody.put("message", "New item created");
46+
47+
JSONObject headerJson = new JSONObject();
48+
headerJson.put("x-custom-header", "my custom header value");
49+
50+
responseJson.put("statusCode", 200);
51+
responseJson.put("headers", headerJson);
52+
responseJson.put("body", responseBody.toString());
53+
54+
} catch (ParseException pex) {
55+
responseJson.put("statusCode", 400);
56+
responseJson.put("exception", pex);
57+
}
58+
59+
OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8");
60+
writer.write(responseJson.toString());
61+
writer.close();
62+
}
63+
64+
public void handleGetByPathParam(InputStream inputStream, OutputStream outputStream, Context context)
65+
throws IOException {
66+
67+
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
68+
JSONObject responseJson = new JSONObject();
69+
70+
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.defaultClient();
71+
DynamoDB dynamoDb = new DynamoDB(client);
72+
73+
Item result = null;
74+
try {
75+
JSONObject event = (JSONObject) parser.parse(reader);
76+
JSONObject responseBody = new JSONObject();
77+
78+
if (event.get("pathParameters") != null) {
79+
80+
JSONObject pps = (JSONObject) event.get("pathParameters");
81+
if (pps.get("id") != null) {
82+
83+
int id = Integer.parseInt((String) pps.get("id"));
84+
result = dynamoDb.getTable(DYNAMODB_TABLE_NAME).getItem("id", id);
85+
}
86+
87+
}
88+
if (result != null) {
89+
90+
Person person = new Person(result.toJSON());
91+
responseBody.put("Person", person);
92+
responseJson.put("statusCode", 200);
93+
} else {
94+
95+
responseBody.put("message", "No item found");
96+
responseJson.put("statusCode", 404);
97+
}
98+
99+
JSONObject headerJson = new JSONObject();
100+
headerJson.put("x-custom-header", "my custom header value");
101+
102+
responseJson.put("headers", headerJson);
103+
responseJson.put("body", responseBody.toString());
104+
105+
} catch (ParseException pex) {
106+
responseJson.put("statusCode", 400);
107+
responseJson.put("exception", pex);
108+
}
109+
110+
OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8");
111+
writer.write(responseJson.toString());
112+
writer.close();
113+
}
114+
115+
public void handleGetByQueryParam(InputStream inputStream, OutputStream outputStream, Context context)
116+
throws IOException {
117+
118+
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
119+
JSONObject responseJson = new JSONObject();
120+
121+
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.defaultClient();
122+
DynamoDB dynamoDb = new DynamoDB(client);
123+
124+
Item result = null;
125+
try {
126+
JSONObject event = (JSONObject) parser.parse(reader);
127+
JSONObject responseBody = new JSONObject();
128+
129+
if (event.get("queryStringParameters") != null) {
130+
131+
JSONObject qps = (JSONObject) event.get("queryStringParameters");
132+
if (qps.get("id") != null) {
133+
134+
int id = Integer.parseInt((String) qps.get("id"));
135+
result = dynamoDb.getTable(DYNAMODB_TABLE_NAME).getItem("id", id);
136+
}
137+
}
138+
139+
if (result != null) {
140+
141+
Person person = new Person(result.toJSON());
142+
responseBody.put("Person", person);
143+
responseJson.put("statusCode", 200);
144+
} else {
145+
146+
responseBody.put("message", "No item found");
147+
responseJson.put("statusCode", 404);
148+
}
149+
150+
JSONObject headerJson = new JSONObject();
151+
headerJson.put("x-custom-header", "my custom header value");
152+
153+
responseJson.put("headers", headerJson);
154+
responseJson.put("body", responseBody.toString());
155+
156+
} catch (ParseException pex) {
157+
responseJson.put("statusCode", 400);
158+
responseJson.put("exception", pex);
159+
}
160+
161+
OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8");
162+
writer.write(responseJson.toString());
163+
writer.close();
164+
}
165+
166+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.baeldung.lambda.apigateway.model;
2+
3+
import com.google.gson.Gson;
4+
import com.google.gson.GsonBuilder;
5+
6+
public class Person {
7+
8+
private int id;
9+
private String firstName;
10+
private String lastName;
11+
private int age;
12+
private String address;
13+
14+
public Person(String json) {
15+
Gson gson = new Gson();
16+
Person request = gson.fromJson(json, Person.class);
17+
this.id = request.getId();
18+
this.firstName = request.getFirstName();
19+
this.lastName = request.getLastName();
20+
this.age = request.getAge();
21+
this.address = request.getAddress();
22+
}
23+
24+
public String toString() {
25+
final Gson gson = new GsonBuilder().setPrettyPrinting().create();
26+
return gson.toJson(this);
27+
}
28+
29+
public int getId() {
30+
return id;
31+
}
32+
33+
public void setId(int id) {
34+
this.id = id;
35+
}
36+
37+
public String getFirstName() {
38+
return firstName;
39+
}
40+
41+
public void setFirstName(String firstName) {
42+
this.firstName = firstName;
43+
}
44+
45+
public String getLastName() {
46+
return lastName;
47+
}
48+
49+
public void setLastName(String lastName) {
50+
this.lastName = lastName;
51+
}
52+
53+
public int getAge() {
54+
return age;
55+
}
56+
57+
public void setAge(int age) {
58+
this.age = age;
59+
}
60+
61+
public String getAddress() {
62+
return address;
63+
}
64+
65+
public void setAddress(String address) {
66+
this.address = address;
67+
}
68+
}

aws/src/main/java/com/baeldung/lambda/dynamodb/SavePersonHandler.java renamed to aws-lambda/src/main/java/com/baeldung/lambda/dynamodb/SavePersonHandler.java

File renamed without changes.

aws/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonRequest.java renamed to aws-lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonRequest.java

File renamed without changes.

aws/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonResponse.java renamed to aws-lambda/src/main/java/com/baeldung/lambda/dynamodb/bean/PersonResponse.java

File renamed without changes.

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<module>atomix</module>
1919
<module>apache-cayenne</module>
2020
<module>aws</module>
21+
<module>aws-lambda</module>
2122
<module>akka-streams</module>
2223
<module>algorithms</module>
2324
<module>annotations</module>

0 commit comments

Comments
 (0)