Skip to content

Commit 17aede5

Browse files
authored
Merge pull request awsdocs#413 from awsdocs/rework-blank-java
Rework blank-java, general Java code cleanup
2 parents 56569af + 4ca3ba6 commit 17aede5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+132
-344
lines changed

sample-apps/.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ build
1111
*.zip
1212
bin
1313
obj
14-
main
1514
Gemfile.lock
1615
lib
1716
__pycache__
1817
*.pyc
18+
.DS_Store

sample-apps/blank-java/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ The project source includes function code and supporting resources:
1414
Use the following instructions to deploy the sample application.
1515

1616
# Requirements
17+
- An AWS account.
1718
- [Java 8 runtime environment (SE JRE)](https://www.oracle.com/java/technologies/javase-downloads.html)
1819
- [Gradle 5](https://gradle.org/releases/) or [Maven 3](https://maven.apache.org/docs/history.html)
1920
- The Bash shell. For Linux and macOS, this is included by default. In Windows 10, you can install the [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) to get a Windows-integrated version of Ubuntu and Bash.

sample-apps/blank-java/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ dependencies {
1616
implementation 'com.amazonaws:aws-xray-recorder-sdk-aws-sdk-v2-instrumentor'
1717
implementation 'com.amazonaws:aws-lambda-java-core:1.2.1'
1818
implementation 'com.amazonaws:aws-lambda-java-events:2.2.9'
19-
implementation 'com.google.code.gson:gson:2.8.9'
2019
implementation 'org.apache.logging.log4j:log4j-api:[2.17.1,)'
2120
implementation 'org.apache.logging.log4j:log4j-core:[2.17.1,)'
2221
runtimeOnly 'org.apache.logging.log4j:log4j-slf4j18-impl:[2.17.1,)'
2322
runtimeOnly 'com.amazonaws:aws-lambda-java-log4j2:1.5.0'
23+
testImplementation 'com.amazonaws:aws-lambda-java-tests:1.1.1'
2424
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
2525
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.0'
2626
}

sample-apps/blank-java/event.json

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,5 @@
11
{
2-
"Records": [
3-
{
4-
"messageId": "19dd0b57-b21e-4ac1-bd88-01bbb068cb78",
5-
"receiptHandle": "MessageReceiptHandle",
6-
"body": "Hello from SQS!",
7-
"attributes": {
8-
"ApproximateReceiveCount": "1",
9-
"SentTimestamp": "1523232000000",
10-
"SenderId": "123456789012",
11-
"ApproximateFirstReceiveTimestamp": "1523232000001"
12-
},
13-
"messageAttributes": {},
14-
"md5OfBody": "7b270e59b47ff90a553787216d55d91d",
15-
"eventSource": "aws:sqs",
16-
"eventSourceARN": "arn:aws:sqs:us-west-2:123456789012:MyQueue",
17-
"awsRegion": "us-west-2"
18-
}
19-
]
2+
"key1": "value1",
3+
"key2": "value2",
4+
"key3": "value3"
205
}

sample-apps/blank-java/pom.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,6 @@
2727
<artifactId>aws-lambda-java-log4j2</artifactId>
2828
<version>1.5.0</version>
2929
</dependency>
30-
<dependency>
31-
<groupId>com.google.code.gson</groupId>
32-
<artifactId>gson</artifactId>
33-
<version>2.8.9</version>
34-
</dependency>
3530
<dependency>
3631
<groupId>org.apache.logging.log4j</groupId>
3732
<artifactId>log4j-api</artifactId>
@@ -84,7 +79,12 @@
8479
<version>5.6.0</version>
8580
<scope>test</scope>
8681
</dependency>
87-
82+
<dependency>
83+
<groupId>com.amazonaws</groupId>
84+
<artifactId>aws-lambda-java-tests</artifactId>
85+
<version>1.1.1</version>
86+
<scope>test</scope>
87+
</dependency>
8888
</dependencies>
8989

9090
<build>
Lines changed: 23 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,35 @@
11
package example;
22

33
import com.amazonaws.services.lambda.runtime.Context;
4-
import com.amazonaws.services.lambda.runtime.LambdaLogger;
54
import com.amazonaws.services.lambda.runtime.RequestHandler;
6-
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
7-
import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage;
85

9-
import software.amazon.awssdk.services.lambda.model.GetAccountSettingsRequest;
10-
import software.amazon.awssdk.services.lambda.model.GetAccountSettingsResponse;
11-
import software.amazon.awssdk.services.lambda.model.ServiceException;
12-
import software.amazon.awssdk.services.lambda.LambdaAsyncClient;
13-
import software.amazon.awssdk.services.lambda.model.AccountUsage;
14-
15-
import com.google.gson.Gson;
16-
import com.google.gson.GsonBuilder;
6+
import java.util.Map;
177

188
import org.slf4j.Logger;
199
import org.slf4j.LoggerFactory;
2010

21-
import java.lang.StringBuilder;
22-
import java.util.Map;
23-
import java.util.List;
24-
import java.util.concurrent.CompletableFuture;
11+
import software.amazon.awssdk.services.lambda.LambdaClient;
12+
import software.amazon.awssdk.services.lambda.model.GetAccountSettingsResponse;
13+
import software.amazon.awssdk.services.lambda.model.LambdaException;
2514

2615
// Handler value: example.Handler
27-
public class Handler implements RequestHandler<SQSEvent, String>{
28-
private static final Logger logger = LoggerFactory.getLogger(Handler.class);
29-
private static final Gson gson = new GsonBuilder().setPrettyPrinting().create();
30-
private static final LambdaAsyncClient lambdaClient = LambdaAsyncClient.create();
31-
public Handler(){
32-
CompletableFuture<GetAccountSettingsResponse> accountSettings = lambdaClient.getAccountSettings(GetAccountSettingsRequest.builder().build());
33-
try {
34-
GetAccountSettingsResponse settings = accountSettings.get();
35-
} catch(Exception e) {
36-
e.getStackTrace();
37-
}
38-
}
39-
@Override
40-
public String handleRequest(SQSEvent event, Context context)
41-
{
42-
String response = new String();
43-
// call Lambda API
44-
logger.info("Getting account settings");
45-
CompletableFuture<GetAccountSettingsResponse> accountSettings =
46-
lambdaClient.getAccountSettings(GetAccountSettingsRequest.builder().build());
47-
// log execution details
48-
logger.info("ENVIRONMENT VARIABLES: {}", gson.toJson(System.getenv()));
49-
logger.info("CONTEXT: {}", gson.toJson(context));
50-
logger.info("EVENT: {}", gson.toJson(event));
51-
// process event
52-
for(SQSMessage msg : event.getRecords()){
53-
logger.info(msg.getBody());
54-
}
55-
// process Lambda API response
56-
try {
57-
GetAccountSettingsResponse settings = accountSettings.get();
58-
response = gson.toJson(settings.accountUsage());
59-
logger.info("Account usage: {}", response);
60-
} catch(Exception e) {
61-
e.getStackTrace();
16+
public class Handler implements RequestHandler<Map<String,String>, String> {
17+
18+
private static final Logger logger = LoggerFactory.getLogger(Handler.class);
19+
private static final LambdaClient lambdaClient = LambdaClient.builder().build();
20+
21+
@Override
22+
public String handleRequest(Map<String,String> event, Context context) {
23+
24+
logger.info("ENVIRONMENT VARIABLES: " + System.getenv());
25+
logger.info("EVENT: " + event);
26+
27+
GetAccountSettingsResponse response = null;
28+
try {
29+
response = lambdaClient.getAccountSettings();
30+
} catch(LambdaException e) {
31+
System.err.println(e.getMessage());
32+
}
33+
return response != null ? "Total code size for your account is " + response.accountLimit().totalCodeSize() + " bytes" : "Error";
6234
}
63-
return response;
64-
}
65-
}
35+
}
Lines changed: 15 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,33 @@
11
package example;
22

3-
import static org.junit.jupiter.api.Assertions.assertEquals;
43
import static org.junit.jupiter.api.Assertions.assertTrue;
5-
import org.junit.jupiter.api.Test;
4+
import org.junit.jupiter.params.ParameterizedTest;
65

76
import com.amazonaws.services.lambda.runtime.Context;
8-
import com.amazonaws.services.lambda.runtime.LambdaLogger;
9-
import com.amazonaws.services.lambda.runtime.RequestHandler;
10-
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
11-
import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage;
7+
import com.amazonaws.services.lambda.runtime.tests.annotations.Event;
128

13-
import com.google.gson.Gson;
14-
import com.google.gson.GsonBuilder;
15-
16-
import org.slf4j.Logger;
17-
import org.slf4j.LoggerFactory;
18-
19-
import java.util.List;
20-
import java.util.ArrayList;
21-
import java.io.IOException;
22-
import java.nio.charset.StandardCharsets;
23-
import java.nio.file.Files;
24-
import java.nio.file.Paths;
25-
import java.util.stream.Stream;
9+
import java.util.Map;
2610

2711
import com.amazonaws.xray.AWSXRay;
2812
import com.amazonaws.xray.AWSXRayRecorderBuilder;
2913
import com.amazonaws.xray.strategy.sampling.NoSamplingStrategy;
3014

3115
class InvokeTest {
32-
private static final Logger logger = LoggerFactory.getLogger(InvokeTest.class);
33-
Gson gson = new GsonBuilder()
34-
.registerTypeAdapter(SQSEvent.class, new SQSEventDeserializer())
35-
.setPrettyPrinting()
36-
.create();
3716

3817
public InvokeTest() {
39-
AWSXRayRecorderBuilder builder = AWSXRayRecorderBuilder.standard();
40-
builder.withSamplingStrategy(new NoSamplingStrategy());
41-
AWSXRay.setGlobalRecorder(builder.build());
42-
}
43-
44-
@Test
45-
void invokeTest() {
46-
AWSXRay.beginSegment("blank-java-test");
47-
String path = "src/test/resources/event.json";
48-
String eventString = loadJsonFile(path);
49-
SQSEvent event = gson.fromJson(eventString, SQSEvent.class);
50-
Context context = new TestContext();
51-
String requestId = context.getAwsRequestId();
52-
Handler handler = new Handler();
53-
String result = handler.handleRequest(event, context);
54-
assertTrue(result.contains("totalCodeSize"));
55-
AWSXRay.endSegment();
18+
AWSXRayRecorderBuilder builder = AWSXRayRecorderBuilder.standard();
19+
builder.withSamplingStrategy(new NoSamplingStrategy());
20+
AWSXRay.setGlobalRecorder(builder.build());
5621
}
5722

58-
private static String loadJsonFile(String path)
59-
{
60-
StringBuilder stringBuilder = new StringBuilder();
61-
try (Stream<String> stream = Files.lines( Paths.get(path), StandardCharsets.UTF_8))
62-
{
63-
stream.forEach(s -> stringBuilder.append(s));
64-
}
65-
catch (IOException e)
66-
{
67-
e.printStackTrace();
68-
}
69-
return stringBuilder.toString();
23+
@ParameterizedTest
24+
@Event(value = "event.json", type = Map.class)
25+
void invokeTest(Map<String, String> event) {
26+
AWSXRay.beginSegment("blank-java-test");
27+
Context context = new TestContext();
28+
Handler handler = new Handler();
29+
String result = handler.handleRequest(event, context);
30+
assertTrue(result.contains("Total code size for your account"));
31+
AWSXRay.endSegment();
7032
}
7133
}

sample-apps/blank-java/src/test/java/example/SQSEventDeserializer.java

Lines changed: 0 additions & 42 deletions
This file was deleted.

sample-apps/java-basic/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ repositories {
88

99
dependencies {
1010
implementation 'com.amazonaws:aws-lambda-java-core:1.2.1'
11-
implementation 'com.google.code.gson:gson:2.8.9'
1211
testImplementation 'org.apache.logging.log4j:log4j-api:[2.17.1,)'
1312
testImplementation 'org.apache.logging.log4j:log4j-core:[2.17.1,)'
1413
testImplementation 'org.apache.logging.log4j:log4j-slf4j18-impl:[2.17.1,)'

sample-apps/java-basic/pom.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,6 @@
1717
<artifactId>aws-lambda-java-core</artifactId>
1818
<version>1.2.1</version>
1919
</dependency>
20-
<dependency>
21-
<groupId>com.google.code.gson</groupId>
22-
<artifactId>gson</artifactId>
23-
<version>2.8.9</version>
24-
</dependency>
2520
<dependency>
2621
<groupId>org.apache.logging.log4j</groupId>
2722
<artifactId>log4j-api</artifactId>

sample-apps/java-basic/src/main/java/example/Handler.java

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,18 @@
44
import com.amazonaws.services.lambda.runtime.RequestHandler;
55
import com.amazonaws.services.lambda.runtime.LambdaLogger;
66

7-
import com.google.gson.Gson;
8-
import com.google.gson.GsonBuilder;
9-
107
import java.util.Map;
118

129
// Handler value: example.Handler
13-
public class Handler implements RequestHandler<Map<String,String>, String>{
14-
Gson gson = new GsonBuilder().setPrettyPrinting().create();
10+
public class Handler implements RequestHandler<Map<String,String>, Void>{
11+
1512
@Override
16-
public String handleRequest(Map<String,String> event, Context context)
13+
public Void handleRequest(Map<String,String> event, Context context)
1714
{
1815
LambdaLogger logger = context.getLogger();
19-
String response = "200 OK";
20-
// log execution details
21-
logger.log("ENVIRONMENT VARIABLES: " + gson.toJson(System.getenv()));
22-
logger.log("CONTEXT: " + gson.toJson(context));
23-
// process event
24-
logger.log("EVENT: " + gson.toJson(event));
16+
logger.log("ENVIRONMENT VARIABLES: " + System.getenv());
17+
logger.log("EVENT: " + event);
2518
logger.log("EVENT TYPE: " + event.getClass());
26-
return response;
19+
return null;
2720
}
2821
}

sample-apps/java-basic/src/main/java/example/HandlerDivide.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,23 @@
44
import com.amazonaws.services.lambda.runtime.RequestHandler;
55
import com.amazonaws.services.lambda.runtime.LambdaLogger;
66

7-
import com.google.gson.Gson;
8-
import com.google.gson.GsonBuilder;
9-
107
import java.util.List;
118

129
// Handler value: example.HandlerDivide
1310
public class HandlerDivide implements RequestHandler<List<Integer>, Integer>{
14-
Gson gson = new GsonBuilder().setPrettyPrinting().create();
11+
1512
@Override
1613
public Integer handleRequest(List<Integer> event, Context context)
1714
{
1815
LambdaLogger logger = context.getLogger();
19-
// process event
2016
if ( event.size() != 2 )
2117
{
2218
throw new InputLengthException("Input must be an array that contains 2 numbers.");
2319
}
2420
int numerator = event.get(0);
2521
int denominator = event.get(1);
26-
logger.log("EVENT: " + gson.toJson(event));
27-
logger.log("EVENT TYPE: " + event.getClass().toString());
22+
logger.log("EVENT: Numerator is " + event.get(0).toString() +
23+
"; Denominator is " + event.get(1).toString());
2824
return numerator/denominator;
2925
}
3026
}

0 commit comments

Comments
 (0)