diff --git a/.changes/next-release/bugfix-AWSSDKforJavav2-75d93e4.json b/.changes/next-release/bugfix-AWSSDKforJavav2-75d93e4.json new file mode 100644 index 000000000000..5a6cee49c5ee --- /dev/null +++ b/.changes/next-release/bugfix-AWSSDKforJavav2-75d93e4.json @@ -0,0 +1,6 @@ +{ + "type": "bugfix", + "category": "AWS SDK for Java v2", + "description": "Include the sdk-core mime.types resource in the native-image resource configuration so default MIME type detection works in GraalVM native images. Fixes [#7063](https://github.com/aws/aws-sdk-java-v2/issues/7063)", + "contributor": "sjh9714" +} diff --git a/core/sdk-core/src/main/resources/META-INF/native-image/software.amazon.awssdk/sdk-core/resource-config.json b/core/sdk-core/src/main/resources/META-INF/native-image/software.amazon.awssdk/sdk-core/resource-config.json index e445c5021c38..f2fc4e67315f 100644 --- a/core/sdk-core/src/main/resources/META-INF/native-image/software.amazon.awssdk/sdk-core/resource-config.json +++ b/core/sdk-core/src/main/resources/META-INF/native-image/software.amazon.awssdk/sdk-core/resource-config.json @@ -3,6 +3,9 @@ "includes": [ { "pattern": "software/amazon/awssdk/services/\\w+/execution.interceptors" + }, + { + "pattern": "\\Qsoftware/amazon/awssdk/core/util/mime.types\\E" }] } -} \ No newline at end of file +} diff --git a/core/sdk-core/src/test/java/software/amazon/awssdk/core/internal/util/MimetypeTest.java b/core/sdk-core/src/test/java/software/amazon/awssdk/core/internal/util/MimetypeTest.java index 95406a1f119c..a4de0fd29492 100644 --- a/core/sdk-core/src/test/java/software/amazon/awssdk/core/internal/util/MimetypeTest.java +++ b/core/sdk-core/src/test/java/software/amazon/awssdk/core/internal/util/MimetypeTest.java @@ -19,12 +19,19 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import java.io.IOException; +import java.io.InputStream; import java.nio.file.Path; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import software.amazon.awssdk.utils.IoUtils; public class MimetypeTest { + private static final String MIME_TYPES_RESOURCE = "software/amazon/awssdk/core/util/mime.types"; + private static final String NATIVE_IMAGE_RESOURCE_CONFIG = + "META-INF/native-image/software.amazon.awssdk/sdk-core/resource-config.json"; + private static Mimetype mimetype; @BeforeAll @@ -58,4 +65,14 @@ public void pathWithoutFileName_defaulttoBeStream() throws Exception { when(mockPath.getFileName()).thenReturn(null); assertThat(mimetype.getMimetype(mockPath)).isEqualTo(Mimetype.MIMETYPE_OCTET_STREAM); } + + @Test + public void nativeImageResourceConfig_includesMimeTypes() throws IOException { + try (InputStream resourceConfig = Mimetype.class.getClassLoader().getResourceAsStream(NATIVE_IMAGE_RESOURCE_CONFIG)) { + assertThat(resourceConfig).isNotNull(); + + String resourceConfigContents = IoUtils.toUtf8String(resourceConfig); + assertThat(resourceConfigContents).contains(MIME_TYPES_RESOURCE); + } + } }