diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml
index ff6e4b710..21f73ae99 100644
--- a/aws-serverless-java-container-core/pom.xml
+++ b/aws-serverless-java-container-core/pom.xml
@@ -71,11 +71,6 @@
commons-fileupload2
2.0-SNAPSHOT
-
- org.eclipse.angus
- angus-mail
- 2.0.1
-
org.apache.httpcomponents
diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java
index 1531315e9..5211e68df 100644
--- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java
+++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java
@@ -17,22 +17,25 @@
import com.amazonaws.serverless.proxy.internal.SecurityUtils;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import jakarta.activation.spi.MimeTypeRegistryProvider;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import jakarta.servlet.*;
import jakarta.servlet.ServletContext;
import jakarta.servlet.descriptor.JspConfigDescriptor;
-import jakarta.activation.MimetypesFileTypeMap;
import java.io.File;
+import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
+import java.net.URLConnection;
+import java.nio.file.Files;
+import java.nio.file.InvalidPathException;
+import java.nio.file.Paths;
import java.util.*;
-import java.util.stream.Collectors;
/**
@@ -60,7 +63,6 @@ public class AwsServletContext
private Map initParameters;
private AwsLambdaServletContainerHandler containerHandler;
private Logger log = LoggerFactory.getLogger(AwsServletContext.class);
- private MimetypesFileTypeMap mimeTypes; // lazily loaded in the getMimeType method
//-------------------------------------------------------------
@@ -160,18 +162,32 @@ public int getEffectiveMinorVersion() {
@Override
@SuppressFBWarnings("PATH_TRAVERSAL_IN") // suppressing because we are using the getValidFilePath
- public String getMimeType(String s) {
- if (s == null || !s.contains(".")) {
+ public String getMimeType(String file) {
+ if (file == null || !file.contains(".")) {
return null;
}
- if (mimeTypes == null) {
- mimeTypes = new MimetypesFileTypeMap();
+
+ String mimeType = null;
+
+ // may not work on Lambda until mailcap package is present https://github.com/awslabs/aws-serverless-java-container/pull/504
+ try {
+ mimeType = Files.probeContentType(Paths.get(file));
+ } catch (IOException | InvalidPathException e) {
+ log("unable to probe for content type, will use fallback", e);
+ }
+
+ if (mimeType == null) {
+ try {
+ String mimeTypeGuess = URLConnection.guessContentTypeFromName(new File(file).getName());
+ if (mimeTypeGuess !=null) {
+ mimeType = mimeTypeGuess;
+ }
+ } catch (Exception e) {
+ log("couldn't find a better contentType than " + mimeType + " for file " + file, e);
+ }
}
- // TODO: The getContentType method of the MimetypesFileTypeMap returns application/octet-stream
- // instead of null when the type cannot be found. We should replace with an implementation that
- // loads the System mime types ($JAVA_HOME/lib/mime.types
- return mimeTypes.getContentType(s);
+ return mimeType;
}
diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java
index ed84462a5..58d0b0542 100644
--- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java
+++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java
@@ -65,12 +65,19 @@ void getMimeType_mimeTypeOfCorrectFile_expectMime() {
mimeType = ctx.getMimeType("file://" + tmpFilePath);
assertEquals("text/plain", mimeType);
}
+ @Test
+ void getMimeType_mimeTypeOfJavascript_expectApplicationJavascript() {
+ String tmpFilePath = TMP_DIR + "some.js";
+ AwsServletContext ctx = new AwsServletContext(null);
+ String mimeType = ctx.getMimeType(tmpFilePath);
+ assertEquals("text/javascript", mimeType);
+ }
@Test
- void getMimeType_unknownExtension_expectAppOctetStream() {
+ void getMimeType_unknownExtension_expectNull() {
AwsServletContext ctx = new AwsServletContext(null);
String mimeType = ctx.getMimeType("myfile.unkext");
- assertEquals("application/octet-stream", mimeType);
+ assertNull(mimeType);
}