Skip to content

Commit 7cb5d9a

Browse files
committed
updated
1 parent fc87783 commit 7cb5d9a

File tree

6 files changed

+178
-183
lines changed

6 files changed

+178
-183
lines changed

pom.xml

Lines changed: 121 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -1,140 +1,125 @@
11
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3-
<modelVersion>4.0.0</modelVersion>
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
44

5-
<groupId>doc-examples</groupId>
6-
<artifactId>lambda-java-example</artifactId>
7-
<packaging>jar</packaging>
8-
<version>1.0-SNAPSHOT</version>
9-
<name>lambda-java-example</name>
5+
<groupId>doc-examples</groupId>
6+
<artifactId>lambda-java-example</artifactId>
7+
<packaging>jar</packaging>
8+
<version>1.0-SNAPSHOT</version>
9+
<name>lambda-java-example</name>
10+
11+
<properties>
12+
<jackson.version>2.7.5</jackson.version>
13+
<spring.version>4.2.6.RELEASE</spring.version>
14+
</properties>
15+
<dependencies>
16+
<dependency>
17+
<groupId>com.amazonaws</groupId>
18+
<artifactId>aws-lambda-java-core</artifactId>
19+
<version>1.1.0</version>
20+
</dependency>
21+
<dependency>
22+
<groupId>com.amazonaws</groupId>
23+
<artifactId>aws-java-sdk-s3</artifactId>
24+
<version>1.11.14</version>
25+
<scope>runtime</scope>
26+
</dependency>
27+
28+
<dependency>
29+
<groupId>joda-time</groupId>
30+
<artifactId>joda-time</artifactId>
31+
<version>2.9.4</version>
32+
</dependency>
33+
<dependency>
34+
<groupId>com.fasterxml.jackson.core</groupId>
35+
<artifactId>jackson-core</artifactId>
36+
<version>${jackson.version}</version>
37+
</dependency>
38+
<dependency>
39+
<groupId>com.fasterxml.jackson.core</groupId>
40+
<artifactId>jackson-databind</artifactId>
41+
<version>${jackson.version}</version>
42+
</dependency>
43+
<dependency>
44+
<groupId>com.fasterxml.jackson.core</groupId>
45+
<artifactId>jackson-annotations</artifactId>
46+
<version>${jackson.version}</version>
47+
</dependency>
48+
<dependency>
49+
<groupId>commons-logging</groupId>
50+
<artifactId>commons-logging</artifactId>
51+
<version>1.2</version>
52+
</dependency>
53+
<dependency>
54+
<groupId>org.apache.httpcomponents</groupId>
55+
<artifactId>httpcore</artifactId>
56+
<version>4.4.5</version>
57+
</dependency>
58+
<dependency>
59+
<groupId>org.apache.httpcomponents</groupId>
60+
<artifactId>httpclient</artifactId>
61+
<version>4.5.2</version>
62+
</dependency>
63+
<!-- https://mvnrepository.com/artifact/org.mockito/mockito-all -->
64+
<dependency>
65+
<groupId>org.mockito</groupId>
66+
<artifactId>mockito-all</artifactId>
67+
<version>1.9.5</version>
68+
</dependency>
69+
<dependency>
70+
<groupId>org.springframework</groupId>
71+
<artifactId>spring-core</artifactId>
72+
<version>${spring.version}</version>
73+
</dependency>
74+
<dependency>
75+
<groupId>org.springframework</groupId>
76+
<artifactId>spring-context</artifactId>
77+
<version>${spring.version}</version>
78+
</dependency>
79+
<dependency>
80+
<groupId>org.springframework</groupId>
81+
<artifactId>spring-beans</artifactId>
82+
<version>${spring.version}</version>
83+
</dependency>
84+
<dependency>
85+
<groupId>org.springframework</groupId>
86+
<artifactId>spring-aop</artifactId>
87+
<version>${spring.version}</version>
88+
</dependency>
89+
<dependency>
90+
<groupId>org.springframework</groupId>
91+
<artifactId>spring-expression</artifactId>
92+
<version>${spring.version}</version>
93+
</dependency>
94+
</dependencies>
1095

11-
<properties>
12-
<jackson.version>2.7.5</jackson.version>
13-
<spring.version>4.2.6.RELEASE</spring.version>
14-
</properties>
15-
<dependencies>
16-
<dependency>
17-
<groupId>com.amazonaws</groupId>
18-
<artifactId>aws-lambda-java-core</artifactId>
19-
<version>1.1.0</version>
20-
</dependency>
21-
<dependency>
22-
<groupId>com.amazonaws</groupId>
23-
<artifactId>aws-java-sdk</artifactId>
24-
<version>1.1.0</version>
25-
</dependency>
26-
<dependency>
27-
<groupId>com.amazonaws</groupId>
28-
<artifactId>aws-lambda-java-events</artifactId>
29-
<version>1.1.0</version>
30-
</dependency>
31-
<dependency>
32-
<groupId>com.amazonaws</groupId>
33-
<artifactId>aws-java-sdk-s3</artifactId>
34-
<version>1.11.14</version>
35-
<scope>runtime</scope>
36-
</dependency>
37-
<dependency>
38-
<groupId>joda-time</groupId>
39-
<artifactId>joda-time</artifactId>
40-
<version>2.9.4</version>
41-
</dependency>
42-
<dependency>
43-
<groupId>com.fasterxml.jackson.core</groupId>
44-
<artifactId>jackson-core</artifactId>
45-
<version>${jackson.version}</version>
46-
</dependency>
47-
<dependency>
48-
<groupId>com.fasterxml.jackson.core</groupId>
49-
<artifactId>jackson-databind</artifactId>
50-
<version>${jackson.version}</version>
51-
</dependency>
52-
<dependency>
53-
<groupId>com.fasterxml.jackson.core</groupId>
54-
<artifactId>jackson-annotations</artifactId>
55-
<version>${jackson.version}</version>
56-
</dependency>
57-
<dependency>
58-
<groupId>commons-logging</groupId>
59-
<artifactId>commons-logging</artifactId>
60-
<version>1.2</version>
61-
</dependency>
62-
<dependency>
63-
<groupId>org.apache.httpcomponents</groupId>
64-
<artifactId>httpcore</artifactId>
65-
<version>4.4.5</version>
66-
</dependency>
67-
<dependency>
68-
<groupId>org.apache.httpcomponents</groupId>
69-
<artifactId>httpclient</artifactId>
70-
<version>4.5.2</version>
71-
</dependency>
72-
<dependency>
73-
<groupId>com.google.code.gson</groupId>
74-
<artifactId>gson</artifactId>
75-
<version>2.7</version>
76-
</dependency>
77-
<dependency>
78-
<groupId>org.springframework</groupId>
79-
<artifactId>spring-core</artifactId>
80-
<version>${spring.version}</version>
81-
</dependency>
82-
<dependency>
83-
<groupId>org.springframework</groupId>
84-
<artifactId>spring-context</artifactId>
85-
<version>${spring.version}</version>
86-
</dependency>
87-
<dependency>
88-
<groupId>org.springframework</groupId>
89-
<artifactId>spring-beans</artifactId>
90-
<version>${spring.version}</version>
91-
</dependency>
92-
<dependency>
93-
<groupId>org.springframework</groupId>
94-
<artifactId>spring-aop</artifactId>
95-
<version>${spring.version}</version>
96-
</dependency>
97-
<dependency>
98-
<groupId>org.springframework</groupId>
99-
<artifactId>spring-expression</artifactId>
100-
<version>${spring.version}</version>
101-
</dependency>
102-
<dependency>
103-
<groupId>junit</groupId>
104-
<artifactId>junit</artifactId>
105-
<version>4.12</version>
106-
<scope>test</scope>
107-
</dependency>
108-
109-
</dependencies>
110-
111-
<build>
112-
<plugins>
113-
<plugin>
114-
<groupId>org.apache.maven.plugins</groupId>
115-
<artifactId>maven-compiler-plugin</artifactId>
116-
<version>3.5.1</version>
117-
<configuration>
118-
<source>1.8</source>
119-
<target>1.8</target>
120-
</configuration>
121-
</plugin>
122-
<plugin>
123-
<groupId>org.apache.maven.plugins</groupId>
124-
<artifactId>maven-shade-plugin</artifactId>
125-
<version>2.3</version>
126-
<configuration>
127-
<createDependencyReducedPom>false</createDependencyReducedPom>
128-
</configuration>
129-
<executions>
130-
<execution>
131-
<phase>package</phase>
132-
<goals>
133-
<goal>shade</goal>
134-
</goals>
135-
</execution>
136-
</executions>
137-
</plugin>
138-
</plugins>
139-
</build>
96+
<build>
97+
<plugins>
98+
<plugin>
99+
<groupId>org.apache.maven.plugins</groupId>
100+
<artifactId>maven-compiler-plugin</artifactId>
101+
<version>3.5.1</version>
102+
<configuration>
103+
<source>1.8</source>
104+
<target>1.8</target>
105+
</configuration>
106+
</plugin>
107+
<plugin>
108+
<groupId>org.apache.maven.plugins</groupId>
109+
<artifactId>maven-shade-plugin</artifactId>
110+
<version>2.3</version>
111+
<configuration>
112+
<createDependencyReducedPom>false</createDependencyReducedPom>
113+
</configuration>
114+
<executions>
115+
<execution>
116+
<phase>package</phase>
117+
<goals>
118+
<goal>shade</goal>
119+
</goals>
120+
</execution>
121+
</executions>
122+
</plugin>
123+
</plugins>
124+
</build>
140125
</project>

src/main/java/com/example/lambda/LambdaFunctionHandler.java

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package com.example.lambda;
22

3-
import java.io.BufferedReader;
4-
import java.io.IOException;
5-
import java.io.InputStreamReader;
63
import java.io.StringWriter;
74
import java.util.ArrayList;
5+
import java.util.HashMap;
86
import java.util.List;
97
import java.util.Map;
108

119
import org.apache.http.Header;
1210
import org.apache.http.HttpResponse;
11+
import org.apache.http.HttpStatus;
1312
import org.apache.http.client.HttpClient;
1413
import org.apache.http.client.methods.HttpGet;
1514
import org.apache.http.impl.client.HttpClientBuilder;
@@ -18,32 +17,34 @@
1817

1918
import com.amazonaws.services.lambda.runtime.Context;
2019
import com.amazonaws.services.lambda.runtime.RequestHandler;
20+
import com.example.lambda.model.JSONResponse;
2121
import com.example.service.RouterService;
2222
import com.example.spring.Application;
2323

2424
public class LambdaFunctionHandler implements RequestHandler<Object, Object> {
2525

2626
RouterService routerService;
2727

28-
private HttpClient httpClient;
28+
public HttpClient httpClient;
2929

3030
public LambdaFunctionHandler() {
3131
httpClient = HttpClientBuilder.create().build();
32+
//load properties for routing
33+
routerService = Application.getBean(RouterService.class);
3234
}
3335

3436
@Override
3537
public Object handleRequest(Object input, Context context) {
38+
context.getLogger().log("input object type: " + input.getClass().getName());
3639
//request is just a map - cast
3740
Map<Object, Object> request = (Map) input;
38-
context.getLogger().log("Request: " + request.toString());
39-
//load properties for routing
40-
routerService = Application.getBean(RouterService.class);
41+
//log loaded router properties
4142
routerService.routes().forEach((t,u) -> context.getLogger().log("Property: " + t + "\nValue: " + u + "\n"));
4243

4344
//get the hostname from the routing file
4445
String hostName = routerService.routes().get(request.get("utility"));
4546

46-
//replace {}
47+
//recreate the HTTP request by replacing {} path parameters
4748
HttpGet httpGET = new HttpGet(hostName + getResourceURLFormatted(request));
4849
//set any headers coming in
4950
httpGET.setHeaders(getHeadersFromRequest(request));
@@ -54,24 +55,44 @@ public Object handleRequest(Object input, Context context) {
5455
}
5556

5657
HttpResponse response = null;
58+
JSONResponse jsonResponse = new JSONResponse();
5759

5860
// Execute your request and throw response
5961
try {
6062
response = httpClient.execute(httpGET);
61-
context.getLogger().log("Response is: " + EntityUtils.toString(response.getEntity()));
62-
} catch (IOException e) {
63+
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
64+
String message = Integer.toString(response.getStatusLine().getStatusCode()) +
65+
"[" + response.getStatusLine().getReasonPhrase() + "]";
66+
throw new RuntimeException(message);
67+
}
68+
69+
jsonResponse.setBody(EntityUtils.toString(response.getEntity()));
70+
extractResponseHeaders(response, jsonResponse);
71+
72+
} catch (Exception e) {
6373
context.getLogger().log(e.getMessage());
64-
}
65-
66-
return response;
74+
throw new RuntimeException(e);
75+
}
76+
return jsonResponse;
6777
}
78+
79+
protected void extractResponseHeaders(HttpResponse response, JSONResponse jsonResponse) {
80+
Header[] headers = response.getAllHeaders();
81+
if (headers.length > 0) {
82+
Map<String, String> headerMap = new HashMap<String, String>(headers.length);
83+
for (Header header : headers) {
84+
headerMap.put(header.getName(), header.getValue());
85+
}
86+
jsonResponse.setHeaders(headerMap);
87+
}
88+
}
6889

6990
/**
70-
* Recreate the url to use
91+
* Recreate the request url to use
7192
* @param requestMap
7293
* @return
7394
*/
74-
public Object getResourceURLFormatted(Map<Object, Object> requestMap) {
95+
protected Object getResourceURLFormatted(Map<Object, Object> requestMap) {
7596
//create buffer and add resource apth
7697
StringWriter writer = new StringWriter();
7798
writer.write(requestMap.get("resource_path").toString());
@@ -86,10 +107,15 @@ public Object getResourceURLFormatted(Map<Object, Object> requestMap) {
86107
return writer.toString();
87108
}
88109

89-
public Header[] getHeadersFromRequest(Map<Object, Object> requestMap) {
110+
/**
111+
* Get the custom headers and return
112+
* @param requestMap
113+
* @return Header[]
114+
*/
115+
protected Header[] getHeadersFromRequest(Map<Object, Object> requestMap) {
90116
List<Header> headers = new ArrayList<Header>();
91117
requestMap.forEach((k,v)->{
92-
if(k.toString().contains("HEADER_")){
118+
if(k.toString().contains("NEPTUNE_HEADER_")){
93119
headers.add(new BasicHeader(k.toString(), v.toString()));
94120
}
95121
});

0 commit comments

Comments
 (0)