· 6 years ago · Nov 04, 2019, 04:02 PM
1package com.test;
2
3import com.amazonaws.AmazonServiceException;
4import com.amazonaws.ClientConfiguration;
5import com.amazonaws.DefaultRequest;
6import com.amazonaws.Protocol;
7import com.amazonaws.Response;
8import com.amazonaws.auth.AWS4Signer;
9import com.amazonaws.auth.BasicAWSCredentials;
10import com.amazonaws.http.AmazonHttpClient;
11import com.amazonaws.http.ExecutionContext;
12import com.amazonaws.http.HttpMethodName;
13import com.amazonaws.http.HttpResponse;
14import com.amazonaws.http.HttpResponseHandler;
15import com.amazonaws.util.IOUtils;
16import org.springframework.beans.factory.annotation.Value;
17import org.springframework.core.io.Resource;
18import org.springframework.web.bind.annotation.GetMapping;
19import org.springframework.web.bind.annotation.RestController;
20
21import java.io.IOException;
22import java.net.URI;
23import java.util.HashMap;
24import java.util.Map;
25
26@RestController
27public class MyService {
28
29 @Value("classpath:json/payload.json")
30 Resource resource;
31 private static final String API_KEY = "myAPIKey";
32 private static final String API_NAME = "myAPIName";
33 private static final String REGION = "us-west-2";
34 private static final String ACCESS_KEY = "myAccessKey";
35 private static final String SECRET_KEY = "mySecretKey";
36 private static final String ENDPOINT = "myEndpoint";
37 private static final String HOST = "myHost";
38// private static final String SHA256 = "required";
39
40 @GetMapping("/")
41 public String run() throws IOException {
42
43 final String payload = IOUtils.toString(resource.getInputStream());
44
45 // Request Headers
46 Map<String, String> headers = new HashMap<>();
47 headers.put("Content-Type", "application/json");
48 headers.put("Host", HOST);
49// headers.put("Content-Length", String.valueOf(payload.length()));
50// headers.put("x-amz-content-sha256", SHA256);
51 headers.put("x-api-key", API_KEY);
52
53 // Buid Request
54 DefaultRequest<String> request = new DefaultRequest<>(API_NAME);
55 request.setEndpoint(URI.create(ENDPOINT));
56 request.setHttpMethod(HttpMethodName.POST);
57 request.setContent(resource.getInputStream());
58 request.setHeaders(headers);
59
60 // Sign Request
61 BasicAWSCredentials awsCredentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY);
62 AWS4Signer aws4Signer = new AWS4Signer(false);
63 aws4Signer.setServiceName(API_NAME);
64 aws4Signer.setRegionName(REGION);
65 aws4Signer.sign(request, awsCredentials);
66
67 ClientConfiguration config = new ClientConfiguration();
68 config.setProtocol(Protocol.HTTPS);
69 AmazonHttpClient client = new AmazonHttpClient(config);
70 Response<Void> response = client.requestExecutionBuilder()
71 .request(request)
72 .errorResponseHandler(new MyErrorHandler())
73 .executionContext(new ExecutionContext(true))
74 .execute();
75
76 System.out.println(IOUtils.toString(response.getHttpResponse().getContent()));
77 return "ok";
78 }
79
80 static class MyErrorHandler implements HttpResponseHandler<AmazonServiceException> {
81
82 @Override
83 public AmazonServiceException handle(HttpResponse response) throws Exception {
84 AmazonServiceException exception = new AmazonServiceException("Something Went Wrong!");
85 exception.setStatusCode(response.getStatusCode());
86
87 String msg = response.getStatusText() + ". ";
88 if (response.getContent() != null) {
89 msg += IOUtils.toString(response.getContent());
90 }
91
92 exception.setErrorCode(msg);
93 return exception;
94 }
95
96 @Override
97 public boolean needsConnectionLeftOpen() {
98 return false;
99 }
100 }
101}