Skip to content

Commit f8246ac

Browse files
authored
Merge pull request #6 from vinscom/develop
Release 2.4.3 Pre Release
2 parents 18b3394 + 7af6680 commit f8246ac

File tree

13 files changed

+484
-124
lines changed

13 files changed

+484
-124
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#/in/erail/amazon/lambda/service/ProxyService
2+
$class=in.erail.amazon.lambda.service.ProxyService
3+
4+
operationId=API_PROXY_SERVICE_GET
5+
serviceUniqueId=API_PROXY_SERVICE_GET
6+
vertx=/io/vertx/core/Vertx
7+
enable=true
8+
log=true
9+
host^=/in/erail/server/HttpServerOptions.host
10+
port^=/in/erail/server/HttpServerOptions.port
11+
webClient=/io/vertx/ext/web/client/WebClient
12+
server=/in/erail/server/Server
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
#/in/erail/route/OpenAPI3RouteBuilder
22

33
services+=\
4-
/in/erail/service/SessionGetService
4+
/in/erail/service/HelloService

config-layers/test/in/erail/route/openapi3.json renamed to config-layers/common/in/erail/route/openapi3.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
"version": "1.0.0"
66
},
77
"paths": {
8-
"/session": {
8+
"/hello": {
99
"get": {
1010
"summary": "Get all session messages",
1111
"description": "Return all session messages",
12-
"operationId": "API_SESSION_GET",
12+
"operationId": "API_HELLO_GET",
1313
"responses": {
1414
"200": {
1515
"description": "Return all messages",
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#/in/erail/service/HelloService
2+
$class=in.erail.service.HelloService
3+
4+
operationId=API_HELLO_GET
5+
serviceUniqueId=API_HELLO_GET
6+
vertx=/io/vertx/core/Vertx
7+
enable=true
8+
log=true

config-layers/test/in/erail/service/SessionGetService.properties

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

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,4 +180,4 @@
180180
</plugins>
181181
</build>
182182
<name>api-framework-amazon-lambda</name>
183-
</project>
183+
</project>

src/main/java/in/erail/amazon/lambda/AWSLambda.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,20 @@ public Single<String> handleMessage(JsonObject pRequest) {
7070
.subscribeOn(Schedulers.computation())
7171
.map(this::convertBodyToBase64)
7272
.map(reqJson -> reqJson.mapTo(RequestEvent.class))
73+
.doOnSuccess(this::populateSystemProperties)
7374
.flatMapMaybe(req -> getService().process(req))
7475
.toSingle(new ResponseEvent())
7576
.map(resp -> JsonObject.mapFrom(resp))
7677
.map(this::sanatizeResponse)
7778
.map(respJson -> respJson.toString());
7879
}
7980

81+
protected void populateSystemProperties(RequestEvent pRequest) {
82+
Optional
83+
.ofNullable(pRequest.getRequestContext().get("stage"))
84+
.ifPresent(s -> System.setProperty("stage", s.toString()));
85+
}
86+
8087
protected JsonObject sanatizeResponse(JsonObject pResp) {
8188
Preconditions.checkNotNull(pResp);
8289

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
package in.erail.amazon.lambda.service;
2+
3+
import com.google.common.base.Joiner;
4+
import in.erail.model.RequestEvent;
5+
import in.erail.model.ResponseEvent;
6+
import in.erail.server.Server;
7+
import in.erail.service.RESTServiceImpl;
8+
import io.reactivex.Maybe;
9+
import io.vertx.reactivex.core.MultiMap;
10+
import io.vertx.reactivex.core.buffer.Buffer;
11+
import io.vertx.reactivex.ext.web.client.HttpRequest;
12+
import io.vertx.reactivex.ext.web.client.WebClient;
13+
import java.io.UnsupportedEncodingException;
14+
import java.net.URLEncoder;
15+
import java.nio.charset.StandardCharsets;
16+
import java.util.ArrayList;
17+
import java.util.List;
18+
import java.util.Map;
19+
import java.util.Optional;
20+
import java.util.logging.Level;
21+
import java.util.logging.Logger;
22+
import org.apache.logging.log4j.util.Strings;
23+
24+
/**
25+
*
26+
* @author vinay
27+
*/
28+
public class ProxyService extends RESTServiceImpl {
29+
30+
private String mHost;
31+
private int mPort;
32+
private String mPathPrefix;
33+
private WebClient mWebClient;
34+
private Server mServer;
35+
36+
protected String generateURL(RequestEvent pRequest) {
37+
StringBuilder sb = new StringBuilder("http://");
38+
39+
sb
40+
.append(getHost())
41+
.append(":")
42+
.append(getPort());
43+
44+
if (Strings.isNotBlank(getPathPrefix())) {
45+
sb.append(getPathPrefix());
46+
}
47+
48+
sb.append(pRequest.getPath());
49+
50+
Optional
51+
.ofNullable(pRequest.getQueryStringParameters())
52+
.filter((t) -> !t.isEmpty())
53+
.ifPresent((t) -> {
54+
List<String> queryList = t
55+
.entrySet()
56+
.stream()
57+
.reduce(new ArrayList<>(), (acc, entry) -> {
58+
try {
59+
StringBuilder param = new StringBuilder();
60+
param.append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8.name()));
61+
param.append("=");
62+
param.append(URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8.name()));
63+
acc.add(param.toString());
64+
} catch (UnsupportedEncodingException ex) {
65+
Logger.getLogger(ProxyService.class.getName()).log(Level.SEVERE, null, ex);
66+
}
67+
return acc;
68+
}, (first, second) -> {
69+
first.addAll(second);
70+
return first;
71+
});
72+
sb.append("?").append(Joiner.on("&").join(queryList));
73+
});
74+
75+
return sb.toString();
76+
}
77+
78+
@Override
79+
public Maybe<ResponseEvent> process(RequestEvent proxyRequest) {
80+
81+
//Build Request
82+
HttpRequest<Buffer> clientRequest = getWebClient().requestAbs(proxyRequest.getHttpMethod(), generateURL(proxyRequest));
83+
84+
//Add Headers
85+
Optional<Map<String, String>> headers = Optional
86+
.ofNullable(proxyRequest.getHeaders())
87+
.filter(t -> !t.isEmpty());
88+
89+
headers.ifPresent((t) -> t.forEach((k, v) -> clientRequest.putHeader(k, v)));
90+
91+
//Add Body
92+
byte[] body = Optional
93+
.ofNullable(proxyRequest.getBody())
94+
.orElse(new byte[0]);
95+
96+
//Send Request
97+
return clientRequest
98+
.rxSendBuffer(Buffer.buffer(body))
99+
.map((resp) -> {
100+
ResponseEvent event = new ResponseEvent();
101+
102+
//Add Headers
103+
Optional
104+
.ofNullable(resp.headers())
105+
.orElse(MultiMap.caseInsensitiveMultiMap())
106+
.entries()
107+
.stream()
108+
.forEach((t) -> event.addHeader(t.getKey(), t.getValue()));
109+
110+
event.setStatusCode(resp.statusCode());
111+
event.setIsBase64Encoded(true);
112+
113+
Optional
114+
.ofNullable(resp.body())
115+
.ifPresent(b -> event.setBody(b.getBytes()));
116+
117+
return event;
118+
})
119+
.doOnSuccess(e -> getLog().debug(() -> e.toString()))
120+
.toMaybe();
121+
}
122+
123+
public String getHost() {
124+
return mHost;
125+
}
126+
127+
public void setHost(String pHost) {
128+
this.mHost = pHost;
129+
}
130+
131+
public int getPort() {
132+
return mPort;
133+
}
134+
135+
public void setPort(int pPort) {
136+
this.mPort = pPort;
137+
}
138+
139+
public String getPathPrefix() {
140+
return mPathPrefix;
141+
}
142+
143+
public void setPathPrefix(String pPathPrefix) {
144+
this.mPathPrefix = pPathPrefix;
145+
}
146+
147+
public WebClient getWebClient() {
148+
return mWebClient;
149+
}
150+
151+
public void setWebClient(WebClient pWebClient) {
152+
this.mWebClient = pWebClient;
153+
}
154+
155+
public Server getServer() {
156+
return mServer;
157+
}
158+
159+
public void setServer(Server pServer) {
160+
this.mServer = pServer;
161+
}
162+
163+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package in.erail.service;
2+
3+
import com.google.common.net.MediaType;
4+
import in.erail.model.RequestEvent;
5+
import in.erail.model.ResponseEvent;
6+
import io.reactivex.Maybe;
7+
import io.vertx.core.json.JsonArray;
8+
9+
public class HelloService extends RESTServiceImpl {
10+
11+
private JsonArray mHelloData = new JsonArray();
12+
13+
public HelloService() {
14+
mHelloData.add("S1");
15+
mHelloData.add("S2");
16+
mHelloData.add("S3");
17+
mHelloData.add("S4");
18+
mHelloData.add("S5");
19+
}
20+
21+
@Override
22+
public Maybe<ResponseEvent> process(RequestEvent pRequest) {
23+
return Maybe.just(new ResponseEvent()
24+
.setBody(getHelloData().toString().getBytes())
25+
.setMediaType(MediaType.JSON_UTF_8));
26+
}
27+
28+
public JsonArray getHelloData() {
29+
return mHelloData;
30+
}
31+
32+
public void setHelloData(JsonArray pHelloData) {
33+
this.mHelloData = pHelloData;
34+
}
35+
36+
}

0 commit comments

Comments
 (0)