Skip to content

Commit 6593e95

Browse files
authored
add static modifier to S3EventNotification from method with InputStream (#5780)
* create a fromInputStream static method for creating events from input stream * changelog entry * use static on original method instead * exclude S3EventNotification from japicmp temporarily * changelog * changelog
1 parent 9ab9ff8 commit 6593e95

File tree

4 files changed

+134
-1
lines changed

4 files changed

+134
-1
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "bugfix",
3+
"category": "S3 Event Notification",
4+
"contributor": "",
5+
"description": "add static modifier to fromJson(InputStream) method of S3EventNotification"
6+
}

pom.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,8 @@
680680
<exclude>software.amazon.awssdk.regions.*</exclude>
681681
<!-- TODO revert - Temporarily disable because system setting USER_REGION was removed -->
682682
<exclude>software.amazon.awssdk.utils.JavaSystemSetting</exclude>
683+
<!-- TODO revert when s3EventNotification changes to static method is merged -->
684+
<exclude>software.amazon.awssdk.eventnotifications.s3.model.S3EventNotification</exclude>
683685
</excludes>
684686

685687
<ignoreMissingOldVersion>true</ignoreMissingOldVersion>

services-custom/s3-event-notifications/src/main/java/software/amazon/awssdk/eventnotifications/s3/model/S3EventNotification.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public static S3EventNotification fromJson(byte[] json) {
7373
* @param json the notification message in json format
7474
* @return an instance of notification message S3EventNotification
7575
*/
76-
public S3EventNotification fromJson(InputStream json) {
76+
public static S3EventNotification fromJson(InputStream json) {
7777
return S3EventNotificationReader.create().read(json);
7878
}
7979

services-custom/s3-event-notifications/src/test/java/software/amazon/awssdk/eventnotifications/s3/model/S3EventNotificationReaderTest.java

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static org.assertj.core.api.Assertions.assertThat;
1919
import static org.assertj.core.api.Assertions.assertThatThrownBy;
2020

21+
import java.io.ByteArrayInputStream;
2122
import java.time.Instant;
2223
import java.util.Arrays;
2324
import java.util.Collections;
@@ -454,4 +455,128 @@ void malformedJson_throwsException() {
454455
String json = "{\"Records\":[], \"toto\"}";
455456
assertThatThrownBy(() -> S3EventNotification.fromJson(json)).hasCauseInstanceOf(JsonParseException.class);
456457
}
458+
459+
@Test
460+
void fromJsonInputStream_handlesCorrectly() {
461+
String eventJson = "{ "
462+
+ " \"Records\":[ "
463+
+ " { "
464+
+ " \"eventVersion\":\"2.1\","
465+
+ " \"eventSource\":\"aws:s3\","
466+
+ " \"awsRegion\":\"us-west-2\","
467+
+ " \"eventTime\":\"1970-01-01T00:00:00.000Z\","
468+
+ " \"eventName\":\"ObjectCreated:Put\","
469+
+ " \"userIdentity\":{ "
470+
+ " \"principalId\":\"AIDAJDPLRKLG7UEXAMPLE\""
471+
+ " },"
472+
+ " \"requestParameters\":{ "
473+
+ " \"sourceIPAddress\":\"127.0.0.1\""
474+
+ " },"
475+
+ " \"responseElements\":{ "
476+
+ " \"x-amz-request-id\":\"C3D13FE58DE4C810\","
477+
+ " \"x-amz-id-2\":\"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD\""
478+
+ " },"
479+
+ " \"s3\":{ "
480+
+ " \"s3SchemaVersion\":\"1.0\","
481+
+ " \"configurationId\":\"testConfigRule\","
482+
+ " \"bucket\":{ "
483+
+ " \"name\":\"mybucket\","
484+
+ " \"ownerIdentity\":{ "
485+
+ " \"principalId\":\"A3NL1KOZZKExample\""
486+
+ " },"
487+
+ " \"arn\":\"arn:aws:s3:::mybucket\""
488+
+ " },"
489+
+ " \"object\":{ "
490+
+ " \"key\":\"HappyFace.jpg\","
491+
+ " \"size\":1024,"
492+
+ " \"eTag\":\"d41d8cd98f00b204e9800998ecf8427e\","
493+
+ " \"versionId\":\"096fKKXTRTtl3on89fVO.nfljtsv6qko\","
494+
+ " \"sequencer\":\"0055AED6DCD90281E5\""
495+
+ " }"
496+
+ " }"
497+
+ " }"
498+
+ " ]"
499+
+ "}";
500+
501+
S3EventNotification event = S3EventNotification.fromJson(new ByteArrayInputStream(eventJson.getBytes()));
502+
503+
assertThat(event.getRecords()).hasSize(1);
504+
505+
// verify constructors
506+
S3EventNotification expected = new S3EventNotification(
507+
Collections.singletonList(new S3EventNotificationRecord(
508+
"us-west-2",
509+
"ObjectCreated:Put",
510+
"aws:s3",
511+
"1970-01-01T00:00:00.000Z",
512+
"2.1",
513+
new RequestParameters("127.0.0.1"),
514+
new ResponseElements(
515+
"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD", "C3D13FE58DE4C810"),
516+
new S3(
517+
"testConfigRule",
518+
new S3Bucket(
519+
"mybucket",
520+
new UserIdentity("A3NL1KOZZKExample"),
521+
"arn:aws:s3:::mybucket"),
522+
new S3Object(
523+
"HappyFace.jpg",
524+
1024L,
525+
"d41d8cd98f00b204e9800998ecf8427e",
526+
"096fKKXTRTtl3on89fVO.nfljtsv6qko",
527+
"0055AED6DCD90281E5"),
528+
"1.0"
529+
),
530+
new UserIdentity("AIDAJDPLRKLG7UEXAMPLE")
531+
))
532+
);
533+
assertThat(event).isEqualTo(expected);
534+
535+
// verify getters
536+
S3EventNotificationRecord rec = event.getRecords().get(0);
537+
assertThat(rec).isNotNull();
538+
assertThat(rec.getAwsRegion()).isEqualTo("us-west-2");
539+
assertThat(rec.getEventName()).isEqualTo("ObjectCreated:Put");
540+
assertThat(rec.getEventTime()).isEqualTo(Instant.parse("1970-01-01T00:00:00.000Z"));
541+
assertThat(rec.getEventVersion()).isEqualTo("2.1");
542+
543+
UserIdentity userIdentity = rec.getUserIdentity();
544+
assertThat(userIdentity).isNotNull();
545+
assertThat(userIdentity.getPrincipalId()).isEqualTo("AIDAJDPLRKLG7UEXAMPLE");
546+
547+
RequestParameters requestParameters = rec.getRequestParameters();
548+
assertThat(requestParameters).isNotNull();
549+
assertThat(requestParameters.getSourceIpAddress()).isEqualTo("127.0.0.1");
550+
551+
ResponseElements responseElements = rec.getResponseElements();
552+
assertThat(responseElements).isNotNull();
553+
assertThat(responseElements.getXAmzRequestId()).isEqualTo("C3D13FE58DE4C810");
554+
assertThat(responseElements.getXAmzId2())
555+
.isEqualTo("FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD");
556+
557+
S3 s3 = rec.getS3();
558+
assertThat(s3).isNotNull();
559+
assertThat(s3.getS3SchemaVersion()).isEqualTo("1.0");
560+
assertThat(s3.getConfigurationId()).isEqualTo("testConfigRule");
561+
S3Bucket s3Bucket = s3.getBucket();
562+
assertThat(s3Bucket).isNotNull();
563+
assertThat(s3Bucket.getName()).isEqualTo("mybucket");
564+
assertThat(s3Bucket.getArn()).isEqualTo("arn:aws:s3:::mybucket");
565+
UserIdentity ownerIdentity = s3Bucket.getOwnerIdentity();
566+
assertThat(ownerIdentity).isNotNull();
567+
assertThat(ownerIdentity.getPrincipalId()).isEqualTo("A3NL1KOZZKExample");
568+
S3Object s3Object = s3.getObject();
569+
assertThat(s3Object).isNotNull();
570+
assertThat(s3Object.getKey()).isEqualTo("HappyFace.jpg");
571+
assertThat(s3Object.getETag()).isEqualTo("d41d8cd98f00b204e9800998ecf8427e");
572+
assertThat(s3Object.getSizeAsLong()).isEqualTo(1024L);
573+
assertThat(s3Object.getVersionId()).isEqualTo("096fKKXTRTtl3on89fVO.nfljtsv6qko");
574+
assertThat(s3Object.getSequencer()).isEqualTo("0055AED6DCD90281E5");
575+
576+
assertThat(rec.getGlacierEventData()).isNull();
577+
assertThat(rec.getIntelligentTieringEventData()).isNull();
578+
assertThat(rec.getLifecycleEventData()).isNull();
579+
assertThat(rec.getReplicationEventData()).isNull();
580+
581+
}
457582
}

0 commit comments

Comments
 (0)