From 09919582b4671621a8b03de9b2bb2158dc7f7b6d Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Fri, 18 Nov 2022 11:28:30 +1100 Subject: [PATCH 01/14] cleanup mimetypes --- .../org/eclipse/jetty/http/MimeTypes.java | 31 ++++++------------- .../org/eclipse/jetty/server/Context.java | 3 ++ .../ee10/servlet/ServletContextHandler.java | 4 +-- 3 files changed, 15 insertions(+), 23 deletions(-) diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java index 025fd63e925f..228bbf6766af 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java @@ -39,11 +39,10 @@ */ public class MimeTypes { - private static final Logger LOG = LoggerFactory.getLogger(MimeTypes.class); - private static final Map __dftMimeMap = new HashMap(); - private static final Map __inferredEncodings = new HashMap(); - private static final Map __assumedEncodings = new HashMap(); + private static final Map __dftMimeMap = new HashMap<>(); + private static final Map __inferredEncodings = new HashMap<>(); + private static final Map __assumedEncodings = new HashMap<>(); public enum Type { @@ -244,7 +243,7 @@ public Type getBaseType() Properties props = new Properties(); props.load(reader); props.stringPropertyNames().stream() - .filter(x -> x != null) + .filter(Objects::nonNull) .forEach(x -> __dftMimeMap.put(StringUtil.asciiToLowerCase(x), normalizeMimeType(props.getProperty(x)))); @@ -286,7 +285,7 @@ else if (__dftMimeMap.size() < props.keySet().size()) Properties props = new Properties(); props.load(reader); props.stringPropertyNames().stream() - .filter(t -> t != null) + .filter(Objects::nonNull) .forEach(t -> { String charset = props.getProperty(t); @@ -323,7 +322,7 @@ else if ((__inferredEncodings.size() + __assumedEncodings.size()) < props.keySet } } - private final Map _mimeMap = new HashMap(); + private final Map _mimeMap = new HashMap<>(); /** * Constructor. @@ -375,8 +374,7 @@ public static String getDefaultMimeByExtension(String filename) break; String ext = StringUtil.asciiToLowerCase(filename.substring(i + 1)); - if (type == null) - type = __dftMimeMap.get(ext); + type = __dftMimeMap.get(ext); } } @@ -411,8 +409,7 @@ public String getMimeByExtension(String filename) break; String ext = StringUtil.asciiToLowerCase(filename.substring(i + 1)); - if (_mimeMap != null) - type = _mimeMap.get(ext); + type = _mimeMap.get(ext); if (type == null) type = __dftMimeMap.get(ext); } @@ -420,8 +417,7 @@ public String getMimeByExtension(String filename) if (type == null) { - if (_mimeMap != null) - type = _mimeMap.get("*"); + type = _mimeMap.get("*"); if (type == null) type = __dftMimeMap.get("*"); } @@ -615,14 +611,7 @@ public static String getContentTypeWithoutCharset(String value) if ('"' == b) { - if (quote) - { - quote = false; - } - else - { - quote = true; - } + quote = !quote; switch (state) { diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/Context.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/Context.java index c3daec8cad33..69ffa56d4193 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/Context.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/Context.java @@ -16,6 +16,7 @@ import java.util.List; import java.util.concurrent.Executor; +import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.util.Attributes; import org.eclipse.jetty.util.Decorator; import org.eclipse.jetty.util.resource.Resource; @@ -47,6 +48,8 @@ public interface Context extends Attributes, Decorator, Executor List getVirtualHosts(); + MimeTypes getMimeTypes(); + @Override /** execute runnable in container thread scoped to context */ void execute(Runnable runnable); diff --git a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextHandler.java b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextHandler.java index 99bab2447faf..eadf82a994d1 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextHandler.java +++ b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextHandler.java @@ -192,7 +192,7 @@ public interface ServletContainerInitializerCaller extends LifeCycle {} private String _defaultRequestCharacterEncoding; private String _defaultResponseCharacterEncoding; private String _contextPathEncoded = "/"; - protected MimeTypes _mimeTypes; // TODO move to core context? + protected MimeTypes _mimeTypes; private Map _localeEncodingMap; private String[] _welcomeFiles; private Logger _logger; @@ -2813,7 +2813,7 @@ public String getMimeType(String file) { if (_mimeTypes == null) return null; - return _mimeTypes.getMimeByExtension(file); + return getContext().getMimeTypes().getMimeByExtension(file); } @Override From c8d803d1d0af15069bbc35a8a6b29fbc6a49d1de Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Sun, 20 Nov 2022 07:48:19 +1100 Subject: [PATCH 02/14] cleanup mimetypes WIP --- .../docs/programming/server/HandlerDocs.java | 2 +- .../client/HttpClientProxyProtocolTest.java | 8 +- .../client/util/TypedContentProviderTest.java | 2 +- .../jetty/http/CachingHttpContentFactory.java | 6 +- .../org/eclipse/jetty/http/HttpContent.java | 6 +- .../org/eclipse/jetty/http/MimeTypes.java | 478 +++++++++--------- .../jetty/http/PreCompressedHttpContent.java | 4 +- .../jetty/http/ResourceHttpContent.java | 4 +- .../org/eclipse/jetty/server/FormFields.java | 4 +- .../jetty/server/handler/DefaultHandler.java | 2 +- .../jetty/server/handler/DelayedHandler.java | 2 +- .../jetty/server/handler/ErrorProcessor.java | 14 +- .../eclipse/jetty/server/HttpChannelTest.java | 46 +- .../jetty/server/HttpConnectionTest.java | 4 +- .../eclipse/jetty/server/RequestLogTest.java | 4 +- .../server/handler/ContextHandlerTest.java | 10 +- .../server/handler/DelayedHandlerTest.java | 2 +- .../jetty/server/handler/DumpHandler.java | 2 +- .../jetty/server/handler/HelloHandler.java | 2 +- .../HttpClientTransportDynamicTest.java | 8 +- .../security/openid/OpenIdAuthenticator.java | 2 +- .../ee10/proxy/ForwardProxyTLSServerTest.java | 6 +- .../jetty/ee10/servlet/ErrorHandler.java | 16 +- .../ee10/servlet/ServletContextRequest.java | 6 +- .../ee10/servlet/ServletContextResponse.java | 2 +- .../authentication/FormAuthenticator.java | 2 +- .../eclipse/jetty/ee10/servlet/FormTest.java | 2 +- .../jetty/examples/Jetty12Example.java | 2 +- .../jetty/ee9/nested/ErrorHandler.java | 16 +- .../org/eclipse/jetty/ee9/nested/Request.java | 8 +- .../eclipse/jetty/ee9/nested/Response.java | 2 +- .../jetty/ee9/nested/ContextHandlerTest.java | 2 +- .../eclipse/jetty/ee9/nested/DumpHandler.java | 2 +- .../eclipse/jetty/ee9/nested/RequestTest.java | 18 +- .../security/openid/OpenIdAuthenticator.java | 2 +- .../ee9/proxy/ForwardProxyTLSServerTest.java | 6 +- .../authentication/FormAuthenticator.java | 2 +- .../eclipse/jetty/ee9/servlet/FormTest.java | 2 +- .../ee9/servlet/MultiPartServletTest.java | 6 +- 39 files changed, 353 insertions(+), 361 deletions(-) diff --git a/documentation/jetty-documentation/src/main/java/org/eclipse/jetty/docs/programming/server/HandlerDocs.java b/documentation/jetty-documentation/src/main/java/org/eclipse/jetty/docs/programming/server/HandlerDocs.java index 4388c1112956..a1736bc0e0fc 100644 --- a/documentation/jetty-documentation/src/main/java/org/eclipse/jetty/docs/programming/server/HandlerDocs.java +++ b/documentation/jetty-documentation/src/main/java/org/eclipse/jetty/docs/programming/server/HandlerDocs.java @@ -224,7 +224,7 @@ public Request.Processor handle(Request request) throws Exception return (req, res, callback) -> { res.setStatus(200); - res.getHeaders().add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_HTML_UTF_8.asString()); + res.getHeaders().add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_HTML_UTF_8.asString()); Content.Sink.write(res, true, index.toString(), callback); }; } diff --git a/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientProxyProtocolTest.java b/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientProxyProtocolTest.java index dcde2d567b74..a30d03d9807a 100644 --- a/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientProxyProtocolTest.java +++ b/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientProxyProtocolTest.java @@ -90,7 +90,7 @@ public void testClientProxyProtocolV1() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN.asString()); Content.Sink.write(response, true, String.valueOf(Request.getRemotePort(request)), callback); } }); @@ -128,7 +128,7 @@ public void testClientProxyProtocolV2() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN.asString()); Content.Sink.write(response, true, String.valueOf(Request.getRemotePort(request)), callback); } }); @@ -177,7 +177,7 @@ public void process(Request request, Response response, Callback callback) assertNotNull(proxyEndPoint.getTLV(typeTLS)); assertEquals(tlsVersion, proxyEndPoint.getAttribute(ProxyConnectionFactory.TLS_VERSION)); } - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN.asString()); Content.Sink.write(response, true, String.valueOf(Request.getRemotePort(request)), callback); } }); @@ -223,7 +223,7 @@ public void testProxyProtocolWrappingHTTPProxy() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN.asString()); Content.Sink.write(response, true, String.valueOf(Request.getRemotePort(request)), callback); } }); diff --git a/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/util/TypedContentProviderTest.java b/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/util/TypedContentProviderTest.java index de5a1f97217d..cce1eab1ca5d 100644 --- a/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/util/TypedContentProviderTest.java +++ b/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/util/TypedContentProviderTest.java @@ -54,7 +54,7 @@ public void testFormContentProvider(Scenario scenario) throws Exception protected void service(Request request, Response response) { assertEquals("POST", request.getMethod()); - assertEquals(MimeTypes.Type.FORM_ENCODED.asString(), request.getHeaders().get(HttpHeader.CONTENT_TYPE)); + assertEquals(MimeTypes.Known.FORM_ENCODED.asString(), request.getHeaders().get(HttpHeader.CONTENT_TYPE)); FormFields.from(request).whenComplete((fields, failure) -> { assertEquals(value1, fields.get(name1).getValue()); diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/CachingHttpContentFactory.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/CachingHttpContentFactory.java index 4718a623ba03..8917be780fbd 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/CachingHttpContentFactory.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/CachingHttpContentFactory.java @@ -297,7 +297,7 @@ protected class CachedHttpContent extends HttpContent.Wrapper implements Caching private final Set _compressedFormats; private final String _lastModifiedValue; private final String _characterEncoding; - private final MimeTypes.Type _mimeType; + private final MimeTypes.Known _mimeType; private final HttpField _contentLength; private final Instant _lastModifiedInstant; private final HttpField _lastModified; @@ -445,7 +445,7 @@ public String getCharacterEncoding() } @Override - public MimeTypes.Type getMimeType() + public MimeTypes.Known getMimeType() { return _mimeType; } @@ -530,7 +530,7 @@ public String getCharacterEncoding() } @Override - public MimeTypes.Type getMimeType() + public MimeTypes.Known getMimeType() { return null; } diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpContent.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpContent.java index 9a5f5be38786..337249c8e58b 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpContent.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpContent.java @@ -18,7 +18,7 @@ import java.time.Instant; import java.util.Set; -import org.eclipse.jetty.http.MimeTypes.Type; +import org.eclipse.jetty.http.MimeTypes.Known; import org.eclipse.jetty.util.resource.Resource; /** @@ -39,7 +39,7 @@ public interface HttpContent String getCharacterEncoding(); - Type getMimeType(); + Known getMimeType(); HttpField getContentEncoding(); @@ -121,7 +121,7 @@ public String getCharacterEncoding() } @Override - public Type getMimeType() + public Known getMimeType() { return _delegate.getMimeType(); } diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java index 228bbf6766af..7599c6f58814 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java @@ -23,7 +23,6 @@ import java.util.HashSet; import java.util.Locale; import java.util.Map; -import java.util.Map.Entry; import java.util.Objects; import java.util.Properties; import java.util.Set; @@ -37,14 +36,11 @@ /** * MIME Type enum and utilities */ -public class MimeTypes +public interface MimeTypes { - private static final Logger LOG = LoggerFactory.getLogger(MimeTypes.class); - private static final Map __dftMimeMap = new HashMap<>(); - private static final Map __inferredEncodings = new HashMap<>(); - private static final Map __assumedEncodings = new HashMap<>(); + Logger LOG = LoggerFactory.getLogger(MimeTypes.class); - public enum Type + enum Known { FORM_ENCODED("application/x-www-form-urlencoded"), MESSAGE_HTTP("message/http"), @@ -52,41 +48,41 @@ public enum Type MULTIPART_FORM_DATA("multipart/form-data"), TEXT_HTML("text/html") - { - @Override - public HttpField getContentTypeField(Charset charset) { - if (Objects.equals(charset, StandardCharsets.UTF_8)) - return TEXT_HTML_UTF_8.getContentTypeField(); - if (Objects.equals(charset, StandardCharsets.ISO_8859_1)) - return TEXT_HTML_8859_1.getContentTypeField(); - return super.getContentTypeField(charset); - } - }, + @Override + public HttpField getContentTypeField(Charset charset) + { + if (Objects.equals(charset, StandardCharsets.UTF_8)) + return TEXT_HTML_UTF_8.getContentTypeField(); + if (Objects.equals(charset, StandardCharsets.ISO_8859_1)) + return TEXT_HTML_8859_1.getContentTypeField(); + return super.getContentTypeField(charset); + } + }, TEXT_PLAIN("text/plain") - { - @Override - public HttpField getContentTypeField(Charset charset) { - if (Objects.equals(charset, StandardCharsets.UTF_8)) - return TEXT_PLAIN_UTF_8.getContentTypeField(); - if (Objects.equals(charset, StandardCharsets.ISO_8859_1)) - return TEXT_PLAIN_8859_1.getContentTypeField(); - return super.getContentTypeField(charset); - } - }, + @Override + public HttpField getContentTypeField(Charset charset) + { + if (Objects.equals(charset, StandardCharsets.UTF_8)) + return TEXT_PLAIN_UTF_8.getContentTypeField(); + if (Objects.equals(charset, StandardCharsets.ISO_8859_1)) + return TEXT_PLAIN_8859_1.getContentTypeField(); + return super.getContentTypeField(charset); + } + }, TEXT_XML("text/xml") - { - @Override - public HttpField getContentTypeField(Charset charset) { - if (Objects.equals(charset, StandardCharsets.UTF_8)) - return TEXT_XML_UTF_8.getContentTypeField(); - if (Objects.equals(charset, StandardCharsets.ISO_8859_1)) - return TEXT_XML_8859_1.getContentTypeField(); - return super.getContentTypeField(charset); - } - }, + @Override + public HttpField getContentTypeField(Charset charset) + { + if (Objects.equals(charset, StandardCharsets.UTF_8)) + return TEXT_XML_UTF_8.getContentTypeField(); + if (Objects.equals(charset, StandardCharsets.ISO_8859_1)) + return TEXT_XML_8859_1.getContentTypeField(); + return super.getContentTypeField(charset); + } + }, TEXT_JSON("text/json", StandardCharsets.UTF_8), APPLICATION_JSON("application/json", StandardCharsets.UTF_8), @@ -106,14 +102,14 @@ public HttpField getContentTypeField(Charset charset) APPLICATION_JSON_UTF_8("application/json;charset=utf-8", APPLICATION_JSON); private final String _string; - private final Type _base; + private final Known _base; private final ByteBuffer _buffer; private final Charset _charset; private final String _charsetString; private final boolean _assumedCharset; private final HttpField _field; - Type(String s) + Known(String s) { _string = s; _buffer = BufferUtil.toBuffer(s); @@ -124,7 +120,7 @@ public HttpField getContentTypeField(Charset charset) _field = new PreEncodedHttpField(HttpHeader.CONTENT_TYPE, _string); } - Type(String s, Type base) + Known(String s, Known base) { _string = s; _buffer = BufferUtil.toBuffer(s); @@ -136,7 +132,7 @@ public HttpField getContentTypeField(Charset charset) _field = new PreEncodedHttpField(HttpHeader.CONTENT_TYPE, _string); } - Type(String s, Charset cs) + Known(String s, Charset cs) { _string = s; _base = this; @@ -195,18 +191,18 @@ public HttpField getContentTypeField(Charset charset) return new HttpField(HttpHeader.CONTENT_TYPE, getContentTypeWithoutCharset(_string) + ";charset=" + charset.name()); } - public Type getBaseType() + public Known getBaseType() { return _base; } } - public static final Index CACHE = new Index.Builder() + Index CACHE = new Index.Builder() .caseSensitive(false) .withAll(() -> { - Map result = new HashMap<>(); - for (Type type : Type.values()) + Map result = new HashMap<>(); + for (Known type : Known.values()) { String key1 = type.toString(); result.put(key1, type); @@ -221,236 +217,266 @@ public Type getBaseType() }) .build(); - static + /** + * Get the MIME type by filename extension. + * + * @param filename A file name + * @return MIME type matching the longest dot extension of the + * file name. + */ + default String getMimeByExtension(String filename) { - for (MimeTypes.Type type : MimeTypes.Type.values()) + String type = null; + + if (filename != null) { - if (type.isCharsetAssumed()) - __assumedEncodings.put(type.asString(), type.getCharsetString()); + int i = -1; + while (type == null) + { + i = filename.indexOf(".", i + 1); + + if (i < 0 || i >= filename.length()) + break; + + String ext = StringUtil.asciiToLowerCase(filename.substring(i + 1)); + type = getMimeForExtension(ext); + } } - String resourceName = "mime.properties"; - try (InputStream stream = MimeTypes.class.getResourceAsStream(resourceName)) + if (type == null) + { + type = getMimeForExtension("*"); + } + + return type; + } + + String getMimeForExtension(String extension); + + String getCharsetInferredFromContentType(String contentType); + + String getCharsetAssumedFromContentType(String contentType); + + MimeTypes DEFAULTS = new MimeTypes() + { + private Map _mimeMap = new HashMap<>(); + private Map _inferredEncodings = new HashMap<>(); + private Map _assumedEncodings = new HashMap<>(); + { - if (stream == null) + for (Known type : Known.values()) { - LOG.warn("Missing mime-type resource: {}", resourceName); + if (type.isCharsetAssumed()) + _assumedEncodings.put(type.asString(), type.getCharsetString()); } - else + + String resourceName = "mime.properties"; + try (InputStream stream = MimeTypes.class.getResourceAsStream(resourceName)) { - try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) + if (stream == null) { - Properties props = new Properties(); - props.load(reader); - props.stringPropertyNames().stream() - .filter(Objects::nonNull) - .forEach(x -> - __dftMimeMap.put(StringUtil.asciiToLowerCase(x), normalizeMimeType(props.getProperty(x)))); - - if (__dftMimeMap.isEmpty()) + LOG.warn("Missing mime-type resource: {}", resourceName); + } + else + { + try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) { - LOG.warn("Empty mime types at {}", resourceName); + Properties props = new Properties(); + props.load(reader); + props.stringPropertyNames().stream() + .filter(Objects::nonNull) + .forEach(x -> + _mimeMap.put(StringUtil.asciiToLowerCase(x), normalizeMimeType(props.getProperty(x)))); + + if (_mimeMap.isEmpty()) + { + LOG.warn("Empty mime types at {}", resourceName); + } + else if (_mimeMap.size() < props.keySet().size()) + { + LOG.warn("Duplicate or null mime-type extension in resource: {}", resourceName); + } } - else if (__dftMimeMap.size() < props.keySet().size()) + catch (IOException e) { - LOG.warn("Duplicate or null mime-type extension in resource: {}", resourceName); + if (LOG.isDebugEnabled()) + LOG.warn("Unable to read mime-type resource: {}", resourceName, e); + else + LOG.warn("Unable to read mime-type resource: {} - {}", resourceName, e.toString()); } } - catch (IOException e) - { - if (LOG.isDebugEnabled()) - LOG.warn("Unable to read mime-type resource: {}", resourceName, e); - else - LOG.warn("Unable to read mime-type resource: {} - {}", resourceName, e.toString()); - } } - } - catch (IOException e) - { - if (LOG.isDebugEnabled()) - LOG.warn("Unable to load mime-type resource: {}", resourceName, e); - else - LOG.warn("Unable to load mime-type resource: {} - {}", resourceName, e.toString()); - } + catch (IOException e) + { + if (LOG.isDebugEnabled()) + LOG.warn("Unable to load mime-type resource: {}", resourceName, e); + else + LOG.warn("Unable to load mime-type resource: {} - {}", resourceName, e.toString()); + } - resourceName = "encoding.properties"; - try (InputStream stream = MimeTypes.class.getResourceAsStream(resourceName)) - { - if (stream == null) - LOG.warn("Missing encoding resource: {}", resourceName); - else + resourceName = "encoding.properties"; + try (InputStream stream = MimeTypes.class.getResourceAsStream(resourceName)) { - try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) + if (stream == null) + LOG.warn("Missing encoding resource: {}", resourceName); + else { - Properties props = new Properties(); - props.load(reader); - props.stringPropertyNames().stream() - .filter(Objects::nonNull) - .forEach(t -> - { - String charset = props.getProperty(t); - if (charset.startsWith("-")) - __assumedEncodings.put(t, charset.substring(1)); - else - __inferredEncodings.put(t, props.getProperty(t)); - }); - - if (__inferredEncodings.isEmpty()) + try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) { - LOG.warn("Empty encodings at {}", resourceName); + Properties props = new Properties(); + props.load(reader); + props.stringPropertyNames().stream() + .filter(Objects::nonNull) + .forEach(t -> + { + String charset = props.getProperty(t); + if (charset.startsWith("-")) + _assumedEncodings.put(t, charset.substring(1)); + else + _inferredEncodings.put(t, props.getProperty(t)); + }); + + if (_inferredEncodings.isEmpty()) + { + LOG.warn("Empty encodings at {}", resourceName); + } + else if ((_inferredEncodings.size() + _assumedEncodings.size()) < props.keySet().size()) + { + LOG.warn("Null or duplicate encodings in resource: {}", resourceName); + } } - else if ((__inferredEncodings.size() + __assumedEncodings.size()) < props.keySet().size()) + catch (IOException e) { - LOG.warn("Null or duplicate encodings in resource: {}", resourceName); + if (LOG.isDebugEnabled()) + LOG.warn("Unable to read encoding resource: {}", resourceName, e); + else + LOG.warn("Unable to read encoding resource: {} - {}", resourceName, e.toString()); } } - catch (IOException e) - { - if (LOG.isDebugEnabled()) - LOG.warn("Unable to read encoding resource: {}", resourceName, e); - else - LOG.warn("Unable to read encoding resource: {} - {}", resourceName, e.toString()); - } + } + catch (IOException e) + { + if (LOG.isDebugEnabled()) + LOG.warn("Unable to load encoding resource: {}", resourceName, e); + else + LOG.warn("Unable to load encoding resource: {} - {}", resourceName, e.toString()); } } - catch (IOException e) + + @Override + public String getMimeForExtension(String extension) { - if (LOG.isDebugEnabled()) - LOG.warn("Unable to load encoding resource: {}", resourceName, e); - else - LOG.warn("Unable to load encoding resource: {} - {}", resourceName, e.toString()); + return _mimeMap.get(extension); } - } - private final Map _mimeMap = new HashMap<>(); - - /** - * Constructor. - */ - public MimeTypes() - { - } - - public Map getMimeMap() - { - return _mimeMap; - } + @Override + public String getCharsetInferredFromContentType(String contentType) + { + return _inferredEncodings.get(contentType); + } - /** - * @param mimeMap A Map of file extension to mime-type. - */ - public void setMimeMap(Map mimeMap) - { - _mimeMap.clear(); - if (mimeMap != null) + @Override + public String getCharsetAssumedFromContentType(String contentType) { - for (Entry ext : mimeMap.entrySet()) - { - _mimeMap.put(StringUtil.asciiToLowerCase(ext.getKey()), normalizeMimeType(ext.getValue())); - } + return _assumedEncodings.get(contentType); } - } + }; - /** - * Get the MIME type by filename extension. - * Lookup only the static default mime map. - * - * @param filename A file name - * @return MIME type matching the longest dot extension of the - * file name. - */ - public static String getDefaultMimeByExtension(String filename) + class Wrapper implements MimeTypes { - String type = null; + private final MimeTypes _wrapped; - if (filename != null) + public Wrapper(MimeTypes wrapped) { - int i = -1; - while (type == null) - { - i = filename.indexOf(".", i + 1); + _wrapped = wrapped; + } - if (i < 0 || i >= filename.length()) - break; + public MimeTypes getWrapped() + { + return _wrapped; + } - String ext = StringUtil.asciiToLowerCase(filename.substring(i + 1)); - type = __dftMimeMap.get(ext); - } + @Override + public String getMimeForExtension(String extension) + { + return getWrapped().getMimeForExtension(extension); } - if (type == null) + @Override + public String getCharsetInferredFromContentType(String contentType) { - type = __dftMimeMap.get("*"); + return getWrapped().getCharsetInferredFromContentType(contentType); } - return type; + @Override + public String getCharsetAssumedFromContentType(String contentType) + { + return getWrapped().getCharsetAssumedFromContentType(contentType); + } } - /** - * Get the MIME type by filename extension. - * Lookup the content and static default mime maps. - * - * @param filename A file name - * @return MIME type matching the longest dot extension of the - * file name. - */ - public String getMimeByExtension(String filename) + class Mapped extends Wrapper { - String type = null; - - if (filename != null) + private final Map _mimeMap = new HashMap<>(); + private Map _inferredEncodings = new HashMap<>(); + private Map _assumedEncodings = new HashMap<>(); + + /** + * Constructor. + */ + public Mapped(MimeTypes defaults) { - int i = -1; - while (type == null) - { - i = filename.indexOf(".", i + 1); - - if (i < 0 || i >= filename.length()) - break; + super(defaults); + } - String ext = StringUtil.asciiToLowerCase(filename.substring(i + 1)); - type = _mimeMap.get(ext); - if (type == null) - type = __dftMimeMap.get(ext); - } + @Override + public String getMimeForExtension(String extension) + { + String mimeType = _mimeMap.get(extension); + return mimeType == null ? super.getMimeForExtension(extension) : mimeType; } - if (type == null) + @Override + public String getCharsetInferredFromContentType(String contentType) { - type = _mimeMap.get("*"); - if (type == null) - type = __dftMimeMap.get("*"); + String charset = _inferredEncodings.get(contentType); + return charset == null ? super.getCharsetInferredFromContentType(contentType) : charset; } - return type; - } + @Override + public String getCharsetAssumedFromContentType(String contentType) + { + String charset = _assumedEncodings.get(contentType); + return (charset == null) ? super.getCharsetAssumedFromContentType(contentType) : charset; + } - /** - * Set a mime mapping - * - * @param extension the extension - * @param type the mime type - */ - public void addMimeMapping(String extension, String type) - { - _mimeMap.put(StringUtil.asciiToLowerCase(extension), normalizeMimeType(type)); + /** + * Set a mime mapping + * + * @param extension the extension + * @param type the mime type + */ + public void addMimeMapping(String extension, String type) + { + _mimeMap.put(StringUtil.asciiToLowerCase(extension), normalizeMimeType(type)); + } } - public static Set getKnownMimeTypes() + static Set getKnownMimeTypes() { return new HashSet<>(__dftMimeMap.values()); } private static String normalizeMimeType(String type) { - MimeTypes.Type t = CACHE.get(type); + Known t = CACHE.get(type); if (t != null) return t.asString(); return StringUtil.asciiToLowerCase(type); } - public static String getCharsetFromContentType(String value) + static String getCharsetFromContentType(String value) { if (value == null) return null; @@ -563,41 +589,7 @@ else if (' ' != b) return null; } - /** - * Access a mutable map of mime type to the charset inferred from that content type. - * An inferred encoding is used by when encoding/decoding a stream and is - * explicitly set in any metadata (eg Content-Type). - * - * @return Map of mime type to charset - */ - public static Map getInferredEncodings() - { - return __inferredEncodings; - } - - /** - * Access a mutable map of mime type to the charset assumed for that content type. - * An assumed encoding is used by when encoding/decoding a stream, but is not - * explicitly set in any metadata (eg Content-Type). - * - * @return Map of mime type to charset - */ - public static Map getAssumedEncodings() - { - return __assumedEncodings; - } - - public static String getCharsetInferredFromContentType(String contentType) - { - return __inferredEncodings.get(contentType); - } - - public static String getCharsetAssumedFromContentType(String contentType) - { - return __assumedEncodings.get(contentType); - } - - public static String getContentTypeWithoutCharset(String value) + static String getContentTypeWithoutCharset(String value) { int end = value.length(); int state = 0; diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/PreCompressedHttpContent.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/PreCompressedHttpContent.java index caa4bfb8513d..34a6b49deb05 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/PreCompressedHttpContent.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/PreCompressedHttpContent.java @@ -17,7 +17,7 @@ import java.time.Instant; import java.util.Set; -import org.eclipse.jetty.http.MimeTypes.Type; +import org.eclipse.jetty.http.MimeTypes.Known; import org.eclipse.jetty.util.resource.Resource; public class PreCompressedHttpContent implements HttpContent @@ -109,7 +109,7 @@ public String getCharacterEncoding() } @Override - public Type getMimeType() + public Known getMimeType() { return _content.getMimeType(); } diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/ResourceHttpContent.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/ResourceHttpContent.java index 75085076b78d..7b05c5089cc2 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/ResourceHttpContent.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/ResourceHttpContent.java @@ -18,7 +18,7 @@ import java.time.Instant; import java.util.Set; -import org.eclipse.jetty.http.MimeTypes.Type; +import org.eclipse.jetty.http.MimeTypes.Known; import org.eclipse.jetty.util.resource.Resource; /** @@ -73,7 +73,7 @@ public String getCharacterEncoding() } @Override - public Type getMimeType() + public Known getMimeType() { return _contentType == null ? null : MimeTypes.CACHE.get(MimeTypes.getContentTypeWithoutCharset(_contentType)); } diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/FormFields.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/FormFields.java index 64456f038015..5b1c3a3d010c 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/FormFields.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/FormFields.java @@ -50,8 +50,8 @@ public static Charset getFormEncodedCharset(Request request) return null; // TODO mimeTypes from context - MimeTypes.Type type = MimeTypes.CACHE.get(MimeTypes.getContentTypeWithoutCharset(contentType)); - if (MimeTypes.Type.FORM_ENCODED != type) + MimeTypes.Known type = MimeTypes.CACHE.get(MimeTypes.getContentTypeWithoutCharset(contentType)); + if (MimeTypes.Known.FORM_ENCODED != type) return null; String cs = MimeTypes.getCharsetFromContentType(contentType); diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DefaultHandler.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DefaultHandler.java index 805649d98715..d562bae3c5e9 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DefaultHandler.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DefaultHandler.java @@ -134,7 +134,7 @@ public void process(Request request, Response response, Callback callback) throw } response.setStatus(HttpStatus.NOT_FOUND_404); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_HTML_UTF_8.toString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_HTML_UTF_8.toString()); try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); OutputStreamWriter writer = new OutputStreamWriter(outputStream, UTF_8)) diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DelayedHandler.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DelayedHandler.java index 163bfde8d14f..2b9ec8cb17e3 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DelayedHandler.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DelayedHandler.java @@ -160,7 +160,7 @@ protected Request.Processor delayed(Request request, Request.Processor processor return processor; String contentTypeValue = HttpField.valueParameters(contentType, null); - if (!MimeTypes.Type.MULTIPART_FORM_DATA.is(contentTypeValue)) + if (!MimeTypes.Known.MULTIPART_FORM_DATA.is(contentTypeValue)) return processor; String boundary = MultiPart.extractBoundary(contentType); if (boundary == null) diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ErrorProcessor.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ErrorProcessor.java index 7ee3d2d36c9c..13166044d481 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ErrorProcessor.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ErrorProcessor.java @@ -36,7 +36,7 @@ import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpStatus; -import org.eclipse.jetty.http.MimeTypes.Type; +import org.eclipse.jetty.http.MimeTypes.Known; import org.eclipse.jetty.http.PreEncodedHttpField; import org.eclipse.jetty.http.QuotedQualityCSV; import org.eclipse.jetty.io.ByteBufferOutputStream; @@ -130,7 +130,7 @@ protected void generateResponse(Request request, Response response, int code, St callback.succeeded(); return; } - acceptable = Collections.singletonList(Type.TEXT_HTML.asString()); + acceptable = Collections.singletonList(Known.TEXT_HTML.asString()); } List charsets = request.getHeaders().getQualityCSV(HttpHeader.ACCEPT_CHARSET).stream() .map(s -> @@ -168,14 +168,14 @@ protected void generateResponse(Request request, Response response, int code, St protected boolean generateAcceptableResponse(Request request, Response response, Callback callback, String contentType, List charsets, int code, String message, Throwable cause) throws IOException { - Type type; + Known type; Charset charset; switch (contentType) { case "text/html": case "text/*": case "*/*": - type = Type.TEXT_HTML; + type = Known.TEXT_HTML; charset = charsets.stream().findFirst().orElse(StandardCharsets.ISO_8859_1); break; @@ -187,11 +187,11 @@ else if (charsets.contains(StandardCharsets.ISO_8859_1)) charset = StandardCharsets.ISO_8859_1; else return false; - type = Type.TEXT_JSON.is(contentType) ? Type.TEXT_JSON : Type.APPLICATION_JSON; + type = Known.TEXT_JSON.is(contentType) ? Known.TEXT_JSON : Known.APPLICATION_JSON; break; case "text/plain": - type = Type.TEXT_PLAIN; + type = Known.TEXT_PLAIN; charset = charsets.stream().findFirst().orElse(StandardCharsets.ISO_8859_1); break; @@ -428,7 +428,7 @@ public ByteBuffer badMessageError(int status, String reason, HttpFields.Mutable reason = HttpStatus.getMessage(status); if (HttpStatus.hasNoBody(status)) return BufferUtil.EMPTY_BUFFER; - fields.put(HttpHeader.CONTENT_TYPE, Type.TEXT_HTML_8859_1.asString()); + fields.put(HttpHeader.CONTENT_TYPE, Known.TEXT_HTML_8859_1.asString()); return BufferUtil.toBuffer("

Bad Message " + status + "

reason: " + reason + "
"); } diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpChannelTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpChannelTest.java index bc1389c081c9..00eff3121645 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpChannelTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpChannelTest.java @@ -104,7 +104,7 @@ public void testSimpleGET() throws Exception assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); } @@ -140,7 +140,7 @@ public void send(MetaData.Request request, MetaData.Response response, boolean l assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); } @@ -153,7 +153,7 @@ public void testRecursiveGET() throws Exception public void process(Request request, Response response, Callback callback) { response.setStatus(200); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_UTF_8.asString()); AtomicInteger count = new AtomicInteger(10000); Callback writer = new Callback() { @@ -208,7 +208,7 @@ public void failed(Throwable x) assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); assertThat(stream.getResponseContent().remaining(), equalTo(10000)); } @@ -263,7 +263,7 @@ public void testEchoPOST() throws Exception HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_8859_1.asString()) .asImmutable(); stream.addContent(body, true); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); @@ -275,7 +275,7 @@ public void testEchoPOST() throws Exception assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); } @@ -307,7 +307,7 @@ public Content.Chunk read() HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); @@ -318,7 +318,7 @@ public Content.Chunk read() assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); } @@ -348,7 +348,7 @@ public void send(MetaData.Request request, MetaData.Response response, boolean l HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); @@ -388,7 +388,7 @@ public void send(MetaData.Request request, MetaData.Response response, boolean l assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); } @@ -711,7 +711,7 @@ public void testUnconsumedContentAvailable() throws Exception HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); stream.addContent(body, true); @@ -723,7 +723,7 @@ public void testUnconsumedContentAvailable() throws Exception assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); assertThat(stream.getResponseHeaders().get(HttpHeader.CONNECTION), nullValue()); @@ -739,7 +739,7 @@ public void testUnconsumedContentUnavailable() throws Exception public void process(Request request, Response response, Callback callback) { response.setStatus(200); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_UTF_8.asString()); response.getHeaders().putLongField(HttpHeader.CONTENT_LENGTH, 5); response.write(false, null, Callback.from(() -> response.write(true, BufferUtil.toBuffer("12345"), callback))); } @@ -765,7 +765,7 @@ public void process(Request request, Response response, Callback callback) assertThat(stream.getFailure().getMessage(), containsString("Content not consumed")); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo("12345")); assertThat(stream.getResponseHeaders().get(HttpHeader.CONNECTION), nullValue()); @@ -782,7 +782,7 @@ public void process(Request request, Response response, Callback callback) { response.setStatus(200); response.getHeaders().add(HttpHeader.CONNECTION, HttpHeaderValue.CLOSE.asString()); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_UTF_8.asString()); response.getHeaders().putLongField(HttpHeader.CONTENT_LENGTH, 5); response.write(false, null, Callback.from(() -> response.write(true, BufferUtil.toBuffer("12345"), callback))); } @@ -807,7 +807,7 @@ public void process(Request request, Response response, Callback callback) assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo("12345")); assertThat(stream.getResponseHeaders().get(HttpHeader.CONNECTION), equalTo(HttpHeaderValue.CLOSE.asString())); @@ -830,7 +830,7 @@ public void testPersistent() throws Exception HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); assertThat(stream.addContent(body, true), nullValue()); @@ -842,7 +842,7 @@ public void testPersistent() throws Exception assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); // 2nd request @@ -893,7 +893,7 @@ public void send(MetaData.Request request, MetaData.Response response, boolean l HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); assertThat(stream.addContent(BufferUtil.toBuffer(parts[0]), false), nullValue()); @@ -970,7 +970,7 @@ public void failed(Throwable x) assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); Iterator timeline = history.iterator(); @@ -1035,7 +1035,7 @@ public Content.Chunk read() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) .put(HttpHeader.TRAILER, "Some") - .add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); @@ -1046,7 +1046,7 @@ public Content.Chunk read() assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); HttpFields trailersRcv = stream.getResponseTrailers(); @@ -1255,7 +1255,7 @@ public void send(MetaData.Request request, MetaData.Response response, boolean l HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") - .add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_8859_1.asString()) .add(HttpHeader.CONTENT_LENGTH, "12") .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, -1); diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java index e4ba509075f9..8126acabbda1 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java @@ -1144,7 +1144,7 @@ public void testOversizedResponse() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE.toString(), MimeTypes.Type.TEXT_HTML.toString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE.toString(), MimeTypes.Known.TEXT_HTML.toString()); response.getHeaders().put("LongStr", longstr); response.write(false, BufferUtil.toBuffer("

FOO

"), Callback.from(callback::succeeded, t -> @@ -1193,7 +1193,7 @@ public void testAllowedLargeResponse() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE.toString(), MimeTypes.Type.TEXT_HTML.toString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE.toString(), MimeTypes.Known.TEXT_HTML.toString()); response.getHeaders().put("LongStr", longstr); response.write(false, diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/RequestLogTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/RequestLogTest.java index 69a3ffb0cf29..04e218267e20 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/RequestLogTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/RequestLogTest.java @@ -180,7 +180,7 @@ public void testNormalPostFormRequest(String requestPath) throws Exception StringBuilder req = new StringBuilder(); req.append("POST ").append(requestPath).append(" HTTP/1.1\r\n"); req.append("Host: ").append(baseURI.getRawAuthority()).append("\r\n"); - req.append("Content-Type: ").append(MimeTypes.Type.FORM_ENCODED).append("\r\n"); + req.append("Content-Type: ").append(MimeTypes.Known.FORM_ENCODED).append("\r\n"); req.append("Content-Length: ").append(bufForm.length).append("\r\n"); req.append("Connection: close\r\n"); req.append("\r\n"); @@ -266,7 +266,7 @@ public void testBadPostFormRequest() throws Exception StringBuilder req = new StringBuilder(); req.append("POST /hello HTTP/1.1\r\n"); req.append("Host: ").append(baseURI.getRawAuthority()).append("\r\n"); - req.append("Content-Type: ").append(MimeTypes.Type.FORM_ENCODED).append("\r\n"); + req.append("Content-Type: ").append(MimeTypes.Known.FORM_ENCODED).append("\r\n"); req.append("Content-Length: ").append(bufForm.length).append("\r\n"); // add extra Transfer-Encoding: chunked header, making the POST request invalid per HTTP spec req.append("Transfer-Encoding: chunked\r\n"); diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ContextHandlerTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ContextHandlerTest.java index 74b8b61ef258..4be5c796a9d2 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ContextHandlerTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ContextHandlerTest.java @@ -135,7 +135,7 @@ public void testSimpleGET() throws Exception assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); // The original fields have been recycled. assertThat(stream.getResponse().getFields().size(), equalTo(0)); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); @@ -157,7 +157,7 @@ public void testSetAvailable() throws Exception channel.onRequest(request).run(); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); _contextHandler.setAvailable(false); @@ -167,7 +167,7 @@ public void testSetAvailable() throws Exception channel.onRequest(request).run(); assertThat(stream.getResponse().getStatus(), equalTo(503)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_HTML_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_HTML_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), containsString("Service Unavailable")); _contextHandler.setAvailable(true); @@ -177,7 +177,7 @@ public void testSetAvailable() throws Exception channel.onRequest(request).run(); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); @@ -527,7 +527,7 @@ protected void writeErrorHtmlBody(Request request, Writer writer, int code, Stri assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(500)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_HTML_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_HTML_8859_1.asString())); assertThat(stream.getResponse().getFields().size(), equalTo(0)); assertThat(BufferUtil.toString(stream.getResponseContent()), containsString("

Context: /ctx

")); assertThat(BufferUtil.toString(stream.getResponseContent()), containsString("java.lang.RuntimeException: Testing")); diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DelayedHandlerTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DelayedHandlerTest.java index b634b09d91bf..a199b5972749 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DelayedHandlerTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DelayedHandlerTest.java @@ -433,7 +433,7 @@ public void process(Request request, Response response, Callback callback) throw Content-Type: %s Content-Length: 22 - """.formatted(MimeTypes.Type.FORM_ENCODED).getBytes(StandardCharsets.UTF_8)); + """.formatted(MimeTypes.Known.FORM_ENCODED).getBytes(StandardCharsets.UTF_8)); output.flush(); assertFalse(processing.await(100, TimeUnit.MILLISECONDS)); diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DumpHandler.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DumpHandler.java index ed3c2f0aa495..3fffa561e096 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DumpHandler.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DumpHandler.java @@ -141,7 +141,7 @@ public void process(Request request, Response response, Callback callback) throw return; } - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_HTML.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_HTML.asString()); ByteArrayOutputStream buf = new ByteArrayOutputStream(2048); Writer writer = new OutputStreamWriter(buf, StandardCharsets.ISO_8859_1); diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/HelloHandler.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/HelloHandler.java index efc88a7ccfa8..a3e872aa7b0e 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/HelloHandler.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/HelloHandler.java @@ -49,7 +49,7 @@ public String getMessage() public void process(Request request, Response response, Callback callback) throws Exception { response.setStatus(200); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_UTF_8.asString()); Content.Sink.write(response, true, _message, callback); } } diff --git a/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/HttpClientTransportDynamicTest.java b/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/HttpClientTransportDynamicTest.java index 263769a5931d..d66e723cf814 100644 --- a/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/HttpClientTransportDynamicTest.java +++ b/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/HttpClientTransportDynamicTest.java @@ -401,7 +401,7 @@ public void testDestinationClientConnectionFactoryWrapped() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN.asString()); Content.Sink.write(response, true, String.valueOf(Request.getRemotePort(request)), callback); } }); @@ -498,7 +498,7 @@ public void testHTTP11UpgradeToH2C() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_UTF_8.asString()); Content.Sink.write(response, true, content, callback); } }); @@ -573,7 +573,7 @@ public void testHTTP11UpgradeToH2CWithForwardProxy() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_UTF_8.asString()); Content.Sink.write(response, true, content, callback); } }); @@ -612,7 +612,7 @@ public void testHTTP11UpgradeToH2COverTLS() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_UTF_8.asString()); Content.Sink.write(response, true, content, callback); } }); diff --git a/jetty-ee10/jetty-ee10-openid/src/main/java/org/eclipse/jetty/ee10/security/openid/OpenIdAuthenticator.java b/jetty-ee10/jetty-ee10-openid/src/main/java/org/eclipse/jetty/ee10/security/openid/OpenIdAuthenticator.java index e34e8111b61c..52a5563f48d1 100644 --- a/jetty-ee10/jetty-ee10-openid/src/main/java/org/eclipse/jetty/ee10/security/openid/OpenIdAuthenticator.java +++ b/jetty-ee10/jetty-ee10-openid/src/main/java/org/eclipse/jetty/ee10/security/openid/OpenIdAuthenticator.java @@ -711,7 +711,7 @@ public UriRedirectInfo(Request request) _method = request.getMethod(); // TODO: - if (MimeTypes.Type.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE)) && HttpMethod.POST.is(request.getMethod())) + if (MimeTypes.Known.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE)) && HttpMethod.POST.is(request.getMethod())) { MultiMap formParameters = new MultiMap<>(); // request.extractFormParameters(formParameters); diff --git a/jetty-ee10/jetty-ee10-proxy/src/test/java/org/eclipse/jetty/ee10/proxy/ForwardProxyTLSServerTest.java b/jetty-ee10/jetty-ee10-proxy/src/test/java/org/eclipse/jetty/ee10/proxy/ForwardProxyTLSServerTest.java index 58a7915d77a6..a39eab9d877a 100644 --- a/jetty-ee10/jetty-ee10-proxy/src/test/java/org/eclipse/jetty/ee10/proxy/ForwardProxyTLSServerTest.java +++ b/jetty-ee10/jetty-ee10-proxy/src/test/java/org/eclipse/jetty/ee10/proxy/ForwardProxyTLSServerTest.java @@ -257,7 +257,7 @@ public void testTwoExchanges(SslContextFactory.Server proxyTLS) throws Exception .scheme(HttpScheme.HTTPS.asString()) .method(HttpMethod.POST) .path("/echo") - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.FORM_ENCODED.asString())) .headers(headers -> headers.put(HttpHeader.CONTENT_LENGTH, String.valueOf(contentLength))) .body(new StringRequestContent(content)) .timeout(5, TimeUnit.SECONDS) @@ -320,7 +320,7 @@ public void succeeded(Connection result) .scheme(HttpScheme.HTTPS.asString()) .method(HttpMethod.POST) .path("/echo") - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.FORM_ENCODED.asString())) .headers(headers -> headers.put(HttpHeader.CONTENT_LENGTH, String.valueOf(body2.length()))) .body(new StringRequestContent(body2)); @@ -1022,7 +1022,7 @@ public void process(Request request, Response response, Callback callback) throw else callback.succeeded(); } - else if (MimeTypes.Type.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE))) + else if (MimeTypes.Known.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE))) { FormFields.from(request).whenComplete((fields, failure) -> { diff --git a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ErrorHandler.java b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ErrorHandler.java index 9cd28b5fab00..6219c3bdf739 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ErrorHandler.java +++ b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ErrorHandler.java @@ -150,7 +150,7 @@ protected void generateAcceptableResponse(ServletContextRequest baseRequest, Htt if (acceptable.isEmpty() && !baseRequest.getHeaders().contains(HttpHeader.ACCEPT)) { - generateAcceptableResponse(baseRequest, request, response, code, message, MimeTypes.Type.TEXT_HTML.asString()); + generateAcceptableResponse(baseRequest, request, response, code, message, MimeTypes.Known.TEXT_HTML.asString()); } else { @@ -256,26 +256,26 @@ protected void generateAcceptableResponse(ServletContextRequest baseRequest, Htt return; } - MimeTypes.Type type; + MimeTypes.Known type; switch (contentType) { case "text/html": case "text/*": case "*/*": - type = MimeTypes.Type.TEXT_HTML; + type = MimeTypes.Known.TEXT_HTML; if (charset == null) charset = StandardCharsets.ISO_8859_1; break; case "text/json": case "application/json": - type = MimeTypes.Type.TEXT_JSON; + type = MimeTypes.Known.TEXT_JSON; if (charset == null) charset = StandardCharsets.UTF_8; break; case "text/plain": - type = MimeTypes.Type.TEXT_PLAIN; + type = MimeTypes.Known.TEXT_PLAIN; if (charset == null) charset = StandardCharsets.ISO_8859_1; break; @@ -300,7 +300,7 @@ protected void generateAcceptableResponse(ServletContextRequest baseRequest, Htt switch (type) { case TEXT_HTML: - response.setContentType(MimeTypes.Type.TEXT_HTML.asString()); + response.setContentType(MimeTypes.Known.TEXT_HTML.asString()); response.setCharacterEncoding(charset.name()); request.setAttribute(ERROR_CHARSET, charset); handleErrorPage(request, writer, code, message); @@ -310,7 +310,7 @@ protected void generateAcceptableResponse(ServletContextRequest baseRequest, Htt writeErrorJson(request, writer, code, message); break; case TEXT_PLAIN: - response.setContentType(MimeTypes.Type.TEXT_PLAIN.asString()); + response.setContentType(MimeTypes.Known.TEXT_PLAIN.asString()); response.setCharacterEncoding(charset.name()); writeErrorPlain(request, writer, code, message); break; @@ -522,7 +522,7 @@ public ByteBuffer badMessageError(int status, String reason, HttpFields.Mutable reason = HttpStatus.getMessage(status); if (HttpStatus.hasNoBody(status)) return BufferUtil.EMPTY_BUFFER; - fields.put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_HTML_8859_1.asString()); + fields.put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_HTML_8859_1.asString()); return BufferUtil.toBuffer("

Bad Message " + status + "

reason: " + reason + "
"); } diff --git a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextRequest.java b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextRequest.java index 748d5703c78f..14c08ab85619 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextRequest.java +++ b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextRequest.java @@ -787,8 +787,8 @@ public void logout() throws ServletException public Collection getParts() throws IOException, ServletException { String contentType = getContentType(); - if (contentType == null || !MimeTypes.Type.MULTIPART_FORM_DATA.is(HttpField.valueParameters(contentType, null))) - throw new ServletException("Unsupported Content-Type [%s], expected [%s]".formatted(contentType, MimeTypes.Type.MULTIPART_FORM_DATA.asString())); + if (contentType == null || !MimeTypes.Known.MULTIPART_FORM_DATA.is(HttpField.valueParameters(contentType, null))) + throw new ServletException("Unsupported Content-Type [%s], expected [%s]".formatted(contentType, MimeTypes.Known.MULTIPART_FORM_DATA.asString())); if (_parts == null) _parts = ServletMultiPartFormData.from(this); return _parts.getParts(); @@ -874,7 +874,7 @@ public String getCharacterEncoding() String contentType = getContentType(); if (contentType != null) { - MimeTypes.Type mime = MimeTypes.CACHE.get(contentType); + MimeTypes.Known mime = MimeTypes.CACHE.get(contentType); String charset = (mime == null || mime.getCharset() == null) ? MimeTypes.getCharsetFromContentType(contentType) : mime.getCharset().toString(); if (charset != null) _characterEncoding = charset; diff --git a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextResponse.java b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextResponse.java index 9863184d543c..b7c3582a12a4 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextResponse.java +++ b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextResponse.java @@ -77,7 +77,7 @@ public enum OutputType private final ServletContextRequest _request; private String _characterEncoding; private String _contentType; - private MimeTypes.Type _mimeType; + private MimeTypes.Known _mimeType; private Locale _locale; private EncodingFrom _encodingFrom = EncodingFrom.NOT_SET; private OutputType _outputType = OutputType.NONE; diff --git a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/security/authentication/FormAuthenticator.java b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/security/authentication/FormAuthenticator.java index 8ae24f46a722..d2bd8cc713bb 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/security/authentication/FormAuthenticator.java +++ b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/security/authentication/FormAuthenticator.java @@ -353,7 +353,7 @@ public Authentication validateRequest(Request req, Response res, Callback callba session.setAttribute(__J_URI, req.getHttpURI()); session.setAttribute(__J_METHOD, req.getMethod()); - if (MimeTypes.Type.FORM_ENCODED.is(servletApiRequest.getContentType()) && HttpMethod.POST.is(req.getMethod())) + if (MimeTypes.Known.FORM_ENCODED.is(servletApiRequest.getContentType()) && HttpMethod.POST.is(req.getMethod())) { session.setAttribute(__J_POST, servletApiRequest.getContentParameters()); } diff --git a/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/FormTest.java b/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/FormTest.java index ce9a525aa022..8669371da69b 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/FormTest.java +++ b/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/FormTest.java @@ -130,7 +130,7 @@ protected void service(HttpServletRequest request, HttpServletResponse response) ContentResponse response = client.newRequest("localhost", connector.getLocalPort()) .method(HttpMethod.POST) .path(contextPath + servletPath) - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.FORM_ENCODED.asString())) .body(content) .onRequestBegin(request -> { diff --git a/jetty-ee10/jetty-examples/src/test/java/org/eclipse/jetty/examples/Jetty12Example.java b/jetty-ee10/jetty-examples/src/test/java/org/eclipse/jetty/examples/Jetty12Example.java index 65641f6e3272..deb7e7872477 100644 --- a/jetty-ee10/jetty-examples/src/test/java/org/eclipse/jetty/examples/Jetty12Example.java +++ b/jetty-ee10/jetty-examples/src/test/java/org/eclipse/jetty/examples/Jetty12Example.java @@ -45,7 +45,7 @@ public void process(org.eclipse.jetty.server.Request request, Callback callback) throws Exception { response.setStatus(200); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_UTF_8.asString()); Content.Sink.write(response, true, "the handler says Hello World", callback); } }); diff --git a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ErrorHandler.java b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ErrorHandler.java index da03475014b0..827709e0c025 100644 --- a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ErrorHandler.java +++ b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ErrorHandler.java @@ -142,7 +142,7 @@ protected void generateAcceptableResponse(Request baseRequest, HttpServletReques if (acceptable.isEmpty() && !baseRequest.getHttpFields().contains(HttpHeader.ACCEPT)) { - generateAcceptableResponse(baseRequest, request, response, code, message, MimeTypes.Type.TEXT_HTML.asString()); + generateAcceptableResponse(baseRequest, request, response, code, message, MimeTypes.Known.TEXT_HTML.asString()); } else { @@ -251,26 +251,26 @@ protected void generateAcceptableResponse(Request baseRequest, HttpServletReques return; } - MimeTypes.Type type; + MimeTypes.Known type; switch (contentType) { case "text/html": case "text/*": case "*/*": - type = MimeTypes.Type.TEXT_HTML; + type = MimeTypes.Known.TEXT_HTML; if (charset == null) charset = StandardCharsets.ISO_8859_1; break; case "text/json": case "application/json": - type = MimeTypes.Type.TEXT_JSON; + type = MimeTypes.Known.TEXT_JSON; if (charset == null) charset = StandardCharsets.UTF_8; break; case "text/plain": - type = MimeTypes.Type.TEXT_PLAIN; + type = MimeTypes.Known.TEXT_PLAIN; if (charset == null) charset = StandardCharsets.ISO_8859_1; break; @@ -291,7 +291,7 @@ protected void generateAcceptableResponse(Request baseRequest, HttpServletReques switch (type) { case TEXT_HTML: - response.setContentType(MimeTypes.Type.TEXT_HTML.asString()); + response.setContentType(MimeTypes.Known.TEXT_HTML.asString()); response.setCharacterEncoding(charset.name()); request.setAttribute(ERROR_CHARSET, charset); handleErrorPage(request, writer, code, message); @@ -301,7 +301,7 @@ protected void generateAcceptableResponse(Request baseRequest, HttpServletReques writeErrorJson(request, writer, code, message); break; case TEXT_PLAIN: - response.setContentType(MimeTypes.Type.TEXT_PLAIN.asString()); + response.setContentType(MimeTypes.Known.TEXT_PLAIN.asString()); response.setCharacterEncoding(charset.name()); writeErrorPlain(request, writer, code, message); break; @@ -522,7 +522,7 @@ public ByteBuffer badMessageError(int status, String reason, HttpFields.Mutable reason = HttpStatus.getMessage(status); if (HttpStatus.hasNoBody(status)) return BufferUtil.EMPTY_BUFFER; - fields.put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_HTML_8859_1.asString()); + fields.put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_HTML_8859_1.asString()); return BufferUtil.toBuffer("

Bad Message " + status + "

reason: " + reason + "
"); } diff --git a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Request.java b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Request.java index 8fae82aea9cb..34eb38413656 100644 --- a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Request.java +++ b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Request.java @@ -467,7 +467,7 @@ private void extractContentParameters() if (contentLength != 0 && _inputState == INPUT_NONE) { String baseType = HttpField.valueParameters(contentType, null); - if (MimeTypes.Type.FORM_ENCODED.is(baseType) && + if (MimeTypes.Known.FORM_ENCODED.is(baseType) && _channel.getHttpConfiguration().isFormEncodedMethod(getMethod())) { if (_metaData != null && !isContentEncodingSupported()) @@ -477,7 +477,7 @@ private void extractContentParameters() extractFormParameters(_contentParameters); } - else if (MimeTypes.Type.MULTIPART_FORM_DATA.is(baseType) && + else if (MimeTypes.Known.MULTIPART_FORM_DATA.is(baseType) && getAttribute(__MULTIPART_CONFIG_ELEMENT) != null && _multiParts == null) { @@ -651,7 +651,7 @@ public String getCharacterEncoding() String contentType = getContentType(); if (contentType != null) { - MimeTypes.Type mime = MimeTypes.CACHE.get(contentType); + MimeTypes.Known mime = MimeTypes.CACHE.get(contentType); String charset = (mime == null || mime.getCharset() == null) ? MimeTypes.getCharsetFromContentType(contentType) : mime.getCharset().toString(); if (charset != null) _characterEncoding = charset; @@ -2013,7 +2013,7 @@ public Part getPart(String name) throws IOException, ServletException public Collection getParts() throws IOException, ServletException { String contentType = getContentType(); - if (contentType == null || !MimeTypes.Type.MULTIPART_FORM_DATA.is(HttpField.valueParameters(contentType, null))) + if (contentType == null || !MimeTypes.Known.MULTIPART_FORM_DATA.is(HttpField.valueParameters(contentType, null))) throw new ServletException("Unsupported Content-Type [" + contentType + "], expected [multipart/form-data]"); return getParts(null); } diff --git a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Response.java b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Response.java index 2b6288c40ff9..39c2fb237fb9 100644 --- a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Response.java +++ b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Response.java @@ -87,7 +87,7 @@ public enum OutputType private int _status = HttpStatus.OK_200; private String _reason; private Locale _locale; - private MimeTypes.Type _mimeType; + private MimeTypes.Known _mimeType; private String _characterEncoding; private EncodingFrom _encodingFrom = EncodingFrom.NOT_SET; private String _contentType; diff --git a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/ContextHandlerTest.java b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/ContextHandlerTest.java index b96ca04a8e41..e48b72f61450 100644 --- a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/ContextHandlerTest.java +++ b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/ContextHandlerTest.java @@ -136,7 +136,7 @@ public void testDumpHeadersAndParameters() throws Exception Content-Length: 7 C=3&D=4 - """.formatted(MimeTypes.Type.FORM_ENCODED.asString())); + """.formatted(MimeTypes.Known.FORM_ENCODED.asString())); HttpTester.Response response = HttpTester.parseResponse(rawResponse); diff --git a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/DumpHandler.java b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/DumpHandler.java index 5a82e052457d..7c347857e19a 100644 --- a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/DumpHandler.java +++ b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/DumpHandler.java @@ -94,7 +94,7 @@ public void handle(String target, Request baseRequest, HttpServletRequest reques } baseRequest.setHandled(true); - response.setHeader(HttpHeader.CONTENT_TYPE.asString(), MimeTypes.Type.TEXT_HTML.asString()); + response.setHeader(HttpHeader.CONTENT_TYPE.asString(), MimeTypes.Known.TEXT_HTML.asString()); OutputStream out = response.getOutputStream(); ByteArrayOutputStream buf = new ByteArrayOutputStream(2048); diff --git a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/RequestTest.java b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/RequestTest.java index 46111d7a5c08..8e55fbbaff6f 100644 --- a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/RequestTest.java +++ b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/RequestTest.java @@ -332,7 +332,7 @@ public void testParamExtractionTimeout() throws Exception //an exception parsing the params String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.Type.FORM_ENCODED.asString() + "\n" + + "Content-Type: " + MimeTypes.Known.FORM_ENCODED.asString() + "\n" + "Connection: close\n" + "Content-Length: 100\n" + "\n" + @@ -1111,7 +1111,7 @@ public void testEncodedForm() throws Exception String content = "name1=test&name2=test2&name3=&name4=test"; String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.Type.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.Known.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + content.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1128,7 +1128,7 @@ public void testEncodedFormUnknownMethod() throws Exception String content = "name1=test&name2=test2&name3=&name4=test"; String request = "UNKNOWN / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.Type.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.Known.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + content.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1150,7 +1150,7 @@ public void testEncodedFormExtraMethod() throws Exception String content = "name1=test&name2=test2&name3=&name4=test"; String request = "EXTRA / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.Type.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.Known.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + content.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1174,7 +1174,7 @@ public void test8859EncodedForm() throws Exception String content = "name1=test&name2=test%E4&name3=&name4=test"; String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.Type.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.Known.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + content.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1198,7 +1198,7 @@ public void testUTF8EncodedForm() throws Exception String content = "name1=test&name2=test%C3%A4&name3=&name4=test"; String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.Type.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.Known.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + content.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1763,7 +1763,7 @@ public void testHashDOSKeys() throws Exception String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.Type.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.Known.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + buf.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1801,7 +1801,7 @@ public void testHashDOSSize() throws Exception String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.Type.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.Known.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + buf.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -2150,7 +2150,7 @@ public void handle(String target, Request baseRequest, HttpServletRequest reques ((Request)request).setHandled(true); if (request.getContentLength() > 0 && - !request.getContentType().startsWith(MimeTypes.Type.FORM_ENCODED.asString()) && + !request.getContentType().startsWith(MimeTypes.Known.FORM_ENCODED.asString()) && !request.getContentType().startsWith("multipart/form-data")) assertNotNull(IO.toString(request.getInputStream())); diff --git a/jetty-ee9/jetty-ee9-openid/src/main/java/org/eclipse/jetty/ee9/security/openid/OpenIdAuthenticator.java b/jetty-ee9/jetty-ee9-openid/src/main/java/org/eclipse/jetty/ee9/security/openid/OpenIdAuthenticator.java index 2852d0f3212f..6508ce3614cf 100644 --- a/jetty-ee9/jetty-ee9-openid/src/main/java/org/eclipse/jetty/ee9/security/openid/OpenIdAuthenticator.java +++ b/jetty-ee9/jetty-ee9-openid/src/main/java/org/eclipse/jetty/ee9/security/openid/OpenIdAuthenticator.java @@ -681,7 +681,7 @@ public UriRedirectInfo(Request request) _uri = request.getRequestURI(); _method = request.getMethod(); - if (MimeTypes.Type.FORM_ENCODED.is(request.getContentType()) && HttpMethod.POST.is(request.getMethod())) + if (MimeTypes.Known.FORM_ENCODED.is(request.getContentType()) && HttpMethod.POST.is(request.getMethod())) { MultiMap formParameters = new MultiMap<>(); request.extractFormParameters(formParameters); diff --git a/jetty-ee9/jetty-ee9-proxy/src/test/java/org/eclipse/jetty/ee9/proxy/ForwardProxyTLSServerTest.java b/jetty-ee9/jetty-ee9-proxy/src/test/java/org/eclipse/jetty/ee9/proxy/ForwardProxyTLSServerTest.java index 5c327c41dea4..fb02479e2915 100644 --- a/jetty-ee9/jetty-ee9-proxy/src/test/java/org/eclipse/jetty/ee9/proxy/ForwardProxyTLSServerTest.java +++ b/jetty-ee9/jetty-ee9-proxy/src/test/java/org/eclipse/jetty/ee9/proxy/ForwardProxyTLSServerTest.java @@ -254,7 +254,7 @@ public void testTwoExchanges(SslContextFactory.Server proxyTLS) throws Exception .scheme(HttpScheme.HTTPS.asString()) .method(HttpMethod.POST) .path("/echo") - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.FORM_ENCODED.asString())) .headers(headers -> headers.put(HttpHeader.CONTENT_LENGTH, String.valueOf(contentLength))) .body(new StringRequestContent(content)) .timeout(5, TimeUnit.SECONDS) @@ -317,7 +317,7 @@ public void succeeded(Connection result) .scheme(HttpScheme.HTTPS.asString()) .method(HttpMethod.POST) .path("/echo") - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.FORM_ENCODED.asString())) .headers(headers -> headers.put(HttpHeader.CONTENT_LENGTH, String.valueOf(body2.length()))) .body(new StringRequestContent(body2)); @@ -897,7 +897,7 @@ public void process(Request request, Response response, Callback callback) throw else callback.succeeded(); } - else if (MimeTypes.Type.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE))) + else if (MimeTypes.Known.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE))) { FormFields.from(request).whenComplete((fields, failure) -> { diff --git a/jetty-ee9/jetty-ee9-security/src/main/java/org/eclipse/jetty/ee9/security/authentication/FormAuthenticator.java b/jetty-ee9/jetty-ee9-security/src/main/java/org/eclipse/jetty/ee9/security/authentication/FormAuthenticator.java index 45ea2f4ad35f..bc08b2b950ab 100644 --- a/jetty-ee9/jetty-ee9-security/src/main/java/org/eclipse/jetty/ee9/security/authentication/FormAuthenticator.java +++ b/jetty-ee9/jetty-ee9-security/src/main/java/org/eclipse/jetty/ee9/security/authentication/FormAuthenticator.java @@ -378,7 +378,7 @@ else if (_dispatch) session.setAttribute(__J_URI, buf.toString()); session.setAttribute(__J_METHOD, request.getMethod()); - if (MimeTypes.Type.FORM_ENCODED.is(req.getContentType()) && HttpMethod.POST.is(request.getMethod())) + if (MimeTypes.Known.FORM_ENCODED.is(req.getContentType()) && HttpMethod.POST.is(request.getMethod())) { MultiMap formParameters = new MultiMap<>(); baseRequest.extractFormParameters(formParameters); diff --git a/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/FormTest.java b/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/FormTest.java index 127c43b5be32..4d2ead953d81 100644 --- a/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/FormTest.java +++ b/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/FormTest.java @@ -131,7 +131,7 @@ protected void service(HttpServletRequest request, HttpServletResponse response) ContentResponse response = client.newRequest("localhost", connector.getLocalPort()) .method(HttpMethod.POST) .path(contextPath + servletPath) - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.FORM_ENCODED.asString())) .body(content) .onRequestBegin(request -> { diff --git a/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/MultiPartServletTest.java b/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/MultiPartServletTest.java index 2e8dd49ee297..341a1634222d 100644 --- a/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/MultiPartServletTest.java +++ b/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/MultiPartServletTest.java @@ -75,10 +75,10 @@ public static class MultiPartServlet extends HttpServlet @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - if (!req.getContentType().contains(MimeTypes.Type.MULTIPART_FORM_DATA.asString())) + if (!req.getContentType().contains(MimeTypes.Known.MULTIPART_FORM_DATA.asString())) { resp.setContentType("text/plain"); - resp.getWriter().println("not content type " + MimeTypes.Type.MULTIPART_FORM_DATA); + resp.getWriter().println("not content type " + MimeTypes.Known.MULTIPART_FORM_DATA); resp.getWriter().println("contentType: " + req.getContentType()); return; } @@ -96,7 +96,7 @@ public static class MultiPartEchoServlet extends HttpServlet @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - if (!req.getContentType().contains(MimeTypes.Type.MULTIPART_FORM_DATA.asString())) + if (!req.getContentType().contains(MimeTypes.Known.MULTIPART_FORM_DATA.asString())) { resp.sendError(400); return; From 29379c64664bde168e7e5a56c808d665ab762654 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Sun, 20 Nov 2022 09:02:04 +1100 Subject: [PATCH 03/14] Cleanup MimeTypes WIP --- .../docs/programming/server/HandlerDocs.java | 2 +- .../client/HttpClientProxyProtocolTest.java | 8 +- .../client/util/TypedContentProviderTest.java | 2 +- .../jetty/http/CachingHttpContentFactory.java | 6 +- .../org/eclipse/jetty/http/HttpContent.java | 6 +- .../org/eclipse/jetty/http/MimeTypes.java | 111 ++++++++++++------ .../jetty/http/PreCompressedHttpContent.java | 4 +- .../jetty/http/ResourceHttpContent.java | 4 +- .../org/eclipse/jetty/http/MimeTypesTest.java | 4 +- .../org/eclipse/jetty/server/FormFields.java | 4 +- .../java/org/eclipse/jetty/server/Server.java | 7 ++ .../handler/BufferedResponseHandler.java | 4 +- .../jetty/server/handler/ContextHandler.java | 22 +++- .../jetty/server/handler/DefaultHandler.java | 2 +- .../jetty/server/handler/DelayedHandler.java | 2 +- .../jetty/server/handler/ErrorProcessor.java | 14 +-- .../jetty/server/handler/ResourceHandler.java | 9 +- .../server/handler/gzip/GzipHandler.java | 5 +- .../eclipse/jetty/server/HttpChannelTest.java | 46 ++++---- .../jetty/server/HttpConnectionTest.java | 4 +- .../eclipse/jetty/server/RequestLogTest.java | 4 +- .../server/handler/ContextHandlerTest.java | 10 +- .../server/handler/DelayedHandlerTest.java | 2 +- .../jetty/server/handler/DumpHandler.java | 2 +- .../jetty/server/handler/HelloHandler.java | 2 +- .../server/handler/gzip/GzipHandlerTest.java | 5 +- .../HttpClientTransportDynamicTest.java | 8 +- .../security/openid/OpenIdAuthenticator.java | 2 +- .../ee10/proxy/ForwardProxyTLSServerTest.java | 6 +- .../jetty/ee10/servlet/ErrorHandler.java | 16 +-- .../ee10/servlet/ServletContextHandler.java | 25 ---- .../ee10/servlet/ServletContextRequest.java | 6 +- .../ee10/servlet/ServletContextResponse.java | 9 +- .../authentication/FormAuthenticator.java | 2 +- .../eclipse/jetty/ee10/servlet/FormTest.java | 2 +- .../jetty/examples/Jetty12Example.java | 2 +- .../ee9/nested/BufferedResponseHandler.java | 4 +- .../jetty/ee9/nested/ContextHandler.java | 22 +--- .../jetty/ee9/nested/ErrorHandler.java | 16 +-- .../org/eclipse/jetty/ee9/nested/Request.java | 8 +- .../jetty/ee9/nested/ResourceHandler.java | 2 +- .../eclipse/jetty/ee9/nested/Response.java | 6 +- .../jetty/ee9/nested/ContextHandlerTest.java | 2 +- .../eclipse/jetty/ee9/nested/DumpHandler.java | 2 +- .../eclipse/jetty/ee9/nested/RequestTest.java | 18 +-- .../authentication/FormAuthenticator.java | 2 +- .../eclipse/jetty/ee9/servlet/FormTest.java | 2 +- .../ee9/servlet/MultiPartServletTest.java | 6 +- 48 files changed, 235 insertions(+), 224 deletions(-) diff --git a/documentation/jetty-documentation/src/main/java/org/eclipse/jetty/docs/programming/server/HandlerDocs.java b/documentation/jetty-documentation/src/main/java/org/eclipse/jetty/docs/programming/server/HandlerDocs.java index a1736bc0e0fc..fcce685f08ed 100644 --- a/documentation/jetty-documentation/src/main/java/org/eclipse/jetty/docs/programming/server/HandlerDocs.java +++ b/documentation/jetty-documentation/src/main/java/org/eclipse/jetty/docs/programming/server/HandlerDocs.java @@ -224,7 +224,7 @@ public Request.Processor handle(Request request) throws Exception return (req, res, callback) -> { res.setStatus(200); - res.getHeaders().add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_HTML_UTF_8.asString()); + res.getHeaders().add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_HTML_UTF_8.asString()); Content.Sink.write(res, true, index.toString(), callback); }; } diff --git a/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientProxyProtocolTest.java b/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientProxyProtocolTest.java index a30d03d9807a..2e4598560204 100644 --- a/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientProxyProtocolTest.java +++ b/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientProxyProtocolTest.java @@ -90,7 +90,7 @@ public void testClientProxyProtocolV1() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN.asString()); Content.Sink.write(response, true, String.valueOf(Request.getRemotePort(request)), callback); } }); @@ -128,7 +128,7 @@ public void testClientProxyProtocolV2() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN.asString()); Content.Sink.write(response, true, String.valueOf(Request.getRemotePort(request)), callback); } }); @@ -177,7 +177,7 @@ public void process(Request request, Response response, Callback callback) assertNotNull(proxyEndPoint.getTLV(typeTLS)); assertEquals(tlsVersion, proxyEndPoint.getAttribute(ProxyConnectionFactory.TLS_VERSION)); } - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN.asString()); Content.Sink.write(response, true, String.valueOf(Request.getRemotePort(request)), callback); } }); @@ -223,7 +223,7 @@ public void testProxyProtocolWrappingHTTPProxy() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN.asString()); Content.Sink.write(response, true, String.valueOf(Request.getRemotePort(request)), callback); } }); diff --git a/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/util/TypedContentProviderTest.java b/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/util/TypedContentProviderTest.java index cce1eab1ca5d..fb4d96ba3d8c 100644 --- a/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/util/TypedContentProviderTest.java +++ b/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/util/TypedContentProviderTest.java @@ -54,7 +54,7 @@ public void testFormContentProvider(Scenario scenario) throws Exception protected void service(Request request, Response response) { assertEquals("POST", request.getMethod()); - assertEquals(MimeTypes.Known.FORM_ENCODED.asString(), request.getHeaders().get(HttpHeader.CONTENT_TYPE)); + assertEquals(MimeTypes.PreDefined.FORM_ENCODED.asString(), request.getHeaders().get(HttpHeader.CONTENT_TYPE)); FormFields.from(request).whenComplete((fields, failure) -> { assertEquals(value1, fields.get(name1).getValue()); diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/CachingHttpContentFactory.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/CachingHttpContentFactory.java index 8917be780fbd..9a77910a9f3c 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/CachingHttpContentFactory.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/CachingHttpContentFactory.java @@ -297,7 +297,7 @@ protected class CachedHttpContent extends HttpContent.Wrapper implements Caching private final Set _compressedFormats; private final String _lastModifiedValue; private final String _characterEncoding; - private final MimeTypes.Known _mimeType; + private final MimeTypes.PreDefined _mimeType; private final HttpField _contentLength; private final Instant _lastModifiedInstant; private final HttpField _lastModified; @@ -445,7 +445,7 @@ public String getCharacterEncoding() } @Override - public MimeTypes.Known getMimeType() + public MimeTypes.PreDefined getMimeType() { return _mimeType; } @@ -530,7 +530,7 @@ public String getCharacterEncoding() } @Override - public MimeTypes.Known getMimeType() + public MimeTypes.PreDefined getMimeType() { return null; } diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpContent.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpContent.java index 337249c8e58b..eebaf2130b2c 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpContent.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpContent.java @@ -18,7 +18,7 @@ import java.time.Instant; import java.util.Set; -import org.eclipse.jetty.http.MimeTypes.Known; +import org.eclipse.jetty.http.MimeTypes.PreDefined; import org.eclipse.jetty.util.resource.Resource; /** @@ -39,7 +39,7 @@ public interface HttpContent String getCharacterEncoding(); - Known getMimeType(); + PreDefined getMimeType(); HttpField getContentEncoding(); @@ -121,7 +121,7 @@ public String getCharacterEncoding() } @Override - public Known getMimeType() + public PreDefined getMimeType() { return _delegate.getMimeType(); } diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java index 7599c6f58814..4c7e21135fe3 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java @@ -40,7 +40,7 @@ public interface MimeTypes { Logger LOG = LoggerFactory.getLogger(MimeTypes.class); - enum Known + enum PreDefined { FORM_ENCODED("application/x-www-form-urlencoded"), MESSAGE_HTTP("message/http"), @@ -102,14 +102,14 @@ public HttpField getContentTypeField(Charset charset) APPLICATION_JSON_UTF_8("application/json;charset=utf-8", APPLICATION_JSON); private final String _string; - private final Known _base; + private final PreDefined _base; private final ByteBuffer _buffer; private final Charset _charset; private final String _charsetString; private final boolean _assumedCharset; private final HttpField _field; - Known(String s) + PreDefined(String s) { _string = s; _buffer = BufferUtil.toBuffer(s); @@ -120,7 +120,7 @@ public HttpField getContentTypeField(Charset charset) _field = new PreEncodedHttpField(HttpHeader.CONTENT_TYPE, _string); } - Known(String s, Known base) + PreDefined(String s, PreDefined base) { _string = s; _buffer = BufferUtil.toBuffer(s); @@ -132,7 +132,7 @@ public HttpField getContentTypeField(Charset charset) _field = new PreEncodedHttpField(HttpHeader.CONTENT_TYPE, _string); } - Known(String s, Charset cs) + PreDefined(String s, Charset cs) { _string = s; _base = this; @@ -143,11 +143,6 @@ public HttpField getContentTypeField(Charset charset) _field = new PreEncodedHttpField(HttpHeader.CONTENT_TYPE, _string); } - public ByteBuffer asBuffer() - { - return _buffer.asReadOnlyBuffer(); - } - public Charset getCharset() { return _charset; @@ -191,18 +186,18 @@ public HttpField getContentTypeField(Charset charset) return new HttpField(HttpHeader.CONTENT_TYPE, getContentTypeWithoutCharset(_string) + ";charset=" + charset.name()); } - public Known getBaseType() + public PreDefined getBaseType() { return _base; } } - Index CACHE = new Index.Builder() + Index CACHE = new Index.Builder() .caseSensitive(false) .withAll(() -> { - Map result = new HashMap<>(); - for (Known type : Known.values()) + Map result = new HashMap<>(); + for (PreDefined type : PreDefined.values()) { String key1 = type.toString(); result.put(key1, type); @@ -257,14 +252,32 @@ default String getMimeByExtension(String filename) String getCharsetAssumedFromContentType(String contentType); + Set getKnownMimeTypes(); + + interface Mutable extends MimeTypes + { + /** + * Set a mime mapping + * + * @param extension the extension + * @param type the mime type + */ + String addMimeMapping(String extension, String type); + + String addInferred(String contentType, String encoding); + + String addAssumed(String contentType, String encoding); + + } + MimeTypes DEFAULTS = new MimeTypes() { - private Map _mimeMap = new HashMap<>(); - private Map _inferredEncodings = new HashMap<>(); - private Map _assumedEncodings = new HashMap<>(); + private final Map _mimeMap = new HashMap<>(); + private final Map _inferredEncodings = new HashMap<>(); + private final Map _assumedEncodings = new HashMap<>(); { - for (Known type : Known.values()) + for (PreDefined type : PreDefined.values()) { if (type.isCharsetAssumed()) _assumedEncodings.put(type.asString(), type.getCharsetString()); @@ -380,6 +393,12 @@ public String getCharsetAssumedFromContentType(String contentType) { return _assumedEncodings.get(contentType); } + + @Override + public Set getKnownMimeTypes() + { + return new HashSet<>(_mimeMap.values()); + } }; class Wrapper implements MimeTypes @@ -413,17 +432,25 @@ public String getCharsetAssumedFromContentType(String contentType) { return getWrapped().getCharsetAssumedFromContentType(contentType); } + + @Override + public Set getKnownMimeTypes() + { + return getWrapped().getKnownMimeTypes(); + } } - class Mapped extends Wrapper + class Mapped extends Wrapper implements Mutable { private final Map _mimeMap = new HashMap<>(); - private Map _inferredEncodings = new HashMap<>(); - private Map _assumedEncodings = new HashMap<>(); + private final Map _inferredEncodings = new HashMap<>(); + private final Map _assumedEncodings = new HashMap<>(); + + public Mapped() + { + this(DEFAULTS); + } - /** - * Constructor. - */ public Mapped(MimeTypes defaults) { super(defaults); @@ -450,26 +477,36 @@ public String getCharsetAssumedFromContentType(String contentType) return (charset == null) ? super.getCharsetAssumedFromContentType(contentType) : charset; } - /** - * Set a mime mapping - * - * @param extension the extension - * @param type the mime type - */ - public void addMimeMapping(String extension, String type) + @Override + public Set getKnownMimeTypes() { - _mimeMap.put(StringUtil.asciiToLowerCase(extension), normalizeMimeType(type)); + Set types = new HashSet<>(super.getKnownMimeTypes()); + types.addAll(_mimeMap.values()); + return types; } - } - static Set getKnownMimeTypes() - { - return new HashSet<>(__dftMimeMap.values()); + @Override + public String addMimeMapping(String extension, String type) + { + return _mimeMap.put(StringUtil.asciiToLowerCase(extension), normalizeMimeType(type)); + } + + @Override + public String addInferred(String contentType, String encoding) + { + return _inferredEncodings.put(contentType, encoding); + } + + @Override + public String addAssumed(String contentType, String encoding) + { + return _assumedEncodings.put(contentType, encoding); + } } private static String normalizeMimeType(String type) { - Known t = CACHE.get(type); + PreDefined t = CACHE.get(type); if (t != null) return t.asString(); diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/PreCompressedHttpContent.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/PreCompressedHttpContent.java index 34a6b49deb05..3020076a55ad 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/PreCompressedHttpContent.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/PreCompressedHttpContent.java @@ -17,7 +17,7 @@ import java.time.Instant; import java.util.Set; -import org.eclipse.jetty.http.MimeTypes.Known; +import org.eclipse.jetty.http.MimeTypes.PreDefined; import org.eclipse.jetty.util.resource.Resource; public class PreCompressedHttpContent implements HttpContent @@ -109,7 +109,7 @@ public String getCharacterEncoding() } @Override - public Known getMimeType() + public PreDefined getMimeType() { return _content.getMimeType(); } diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/ResourceHttpContent.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/ResourceHttpContent.java index 7b05c5089cc2..d27204958b99 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/ResourceHttpContent.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/ResourceHttpContent.java @@ -18,7 +18,7 @@ import java.time.Instant; import java.util.Set; -import org.eclipse.jetty.http.MimeTypes.Known; +import org.eclipse.jetty.http.MimeTypes.PreDefined; import org.eclipse.jetty.util.resource.Resource; /** @@ -73,7 +73,7 @@ public String getCharacterEncoding() } @Override - public Known getMimeType() + public PreDefined getMimeType() { return _contentType == null ? null : MimeTypes.CACHE.get(MimeTypes.getContentTypeWithoutCharset(_contentType)); } diff --git a/jetty-core/jetty-http/src/test/java/org/eclipse/jetty/http/MimeTypesTest.java b/jetty-core/jetty-http/src/test/java/org/eclipse/jetty/http/MimeTypesTest.java index 9f7651e9f22a..4321325e4f8f 100644 --- a/jetty-core/jetty-http/src/test/java/org/eclipse/jetty/http/MimeTypesTest.java +++ b/jetty-core/jetty-http/src/test/java/org/eclipse/jetty/http/MimeTypesTest.java @@ -51,7 +51,7 @@ public static Stream mimeTypesByExtensionCases() @MethodSource("mimeTypesByExtensionCases") public void testMimeTypesByExtension(String filename, String expectedMimeType) { - MimeTypes mimetypes = new MimeTypes(); + MimeTypes mimetypes = new MimeTypes.Mapped(); String contentType = mimetypes.getMimeByExtension(filename); assertThat("MimeTypes.getMimeByExtension(\"" + filename + "\")", contentType, is(expectedMimeType)); @@ -60,7 +60,7 @@ public void testMimeTypesByExtension(String filename, String expectedMimeType) @Test public void testGetMimeByExtensionNoExtension() { - MimeTypes mimetypes = new MimeTypes(); + MimeTypes mimetypes = new MimeTypes.Mapped(); String contentType = mimetypes.getMimeByExtension("README"); assertNull(contentType); } diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/FormFields.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/FormFields.java index 5b1c3a3d010c..47bb120b136b 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/FormFields.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/FormFields.java @@ -50,8 +50,8 @@ public static Charset getFormEncodedCharset(Request request) return null; // TODO mimeTypes from context - MimeTypes.Known type = MimeTypes.CACHE.get(MimeTypes.getContentTypeWithoutCharset(contentType)); - if (MimeTypes.Known.FORM_ENCODED != type) + MimeTypes.PreDefined type = MimeTypes.CACHE.get(MimeTypes.getContentTypeWithoutCharset(contentType)); + if (MimeTypes.PreDefined.FORM_ENCODED != type) return null; String cs = MimeTypes.getCharsetFromContentType(contentType); diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/Server.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/Server.java index 78ce8581b716..c8a5560dff37 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/Server.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/Server.java @@ -31,6 +31,7 @@ import org.eclipse.jetty.http.HttpField; import org.eclipse.jetty.http.HttpGenerator; import org.eclipse.jetty.http.HttpHeader; +import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.http.PreEncodedHttpField; import org.eclipse.jetty.io.Connection; import org.eclipse.jetty.server.handler.ContextHandler; @@ -725,6 +726,12 @@ public String getContextPath() return null; } + @Override + public MimeTypes getMimeTypes() + { + return MimeTypes.DEFAULTS; + } + @Override public ClassLoader getClassLoader() { diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/BufferedResponseHandler.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/BufferedResponseHandler.java index 9b4bf9988a54..989832b592e9 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/BufferedResponseHandler.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/BufferedResponseHandler.java @@ -65,7 +65,7 @@ public class BufferedResponseHandler extends Handler.Wrapper public BufferedResponseHandler() { _methods.include(HttpMethod.GET.asString()); - for (String type : MimeTypes.getKnownMimeTypes()) + for (String type : MimeTypes.DEFAULTS.getKnownMimeTypes()) { if (type.startsWith("image/") || type.startsWith("audio/") || @@ -151,7 +151,7 @@ public Request.Processor handle(Request request) throws Exception } // If the mime type is known from the path then apply mime type filtering. - String mimeType = MimeTypes.getDefaultMimeByExtension(path); // TODO context specicif mimetypes : context.getMimeType(path); + String mimeType = request.getContext().getMimeTypes().getMimeByExtension(path); if (mimeType != null) { mimeType = MimeTypes.getContentTypeWithoutCharset(mimeType); diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java index 5cf3ff983392..e39a9b14e206 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java @@ -35,6 +35,7 @@ import org.eclipse.jetty.http.HttpField; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpStatus; +import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.server.AliasCheck; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Handler; @@ -87,9 +88,15 @@ public static String getServerInfo() return "jetty/" + Server.getVersion(); } - // TODO should persistent attributes be an Attributes.Layer over server attributes? - private final Attributes _persistentAttributes = new Mapped(); + /* + * The context and specifically attributes and mimeTypes are not implemented as a layer over + * The server context, attributes and mimeTypes, because ultimately we may support cross context + * dispatch, in which case the properties and behaviour of a context would be dynamic. + * So the context replaces the context in the request, it does not wrap it. + */ private final Context _context; + private final Attributes _persistentAttributes = new Mapped(); + private final MimeTypes.Mapped _mimeTypes = new MimeTypes.Mapped(); private final List _contextListeners = new CopyOnWriteArrayList<>(); private final List _vhosts = new ArrayList<>(); @@ -158,6 +165,11 @@ protected Context newContext() return new Context(); } + public MimeTypes.Mutable getMimeTypes() + { + return _mimeTypes; + } + @Override public void dump(Appendable out, String indent) throws IOException { @@ -1002,6 +1014,12 @@ public String getContextPath() return _contextPath; } + @Override + public MimeTypes getMimeTypes() + { + return _mimeTypes; + } + @Override public String toString() { diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DefaultHandler.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DefaultHandler.java index d562bae3c5e9..0a00037fc6bc 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DefaultHandler.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DefaultHandler.java @@ -134,7 +134,7 @@ public void process(Request request, Response response, Callback callback) throw } response.setStatus(HttpStatus.NOT_FOUND_404); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_HTML_UTF_8.toString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_HTML_UTF_8.toString()); try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); OutputStreamWriter writer = new OutputStreamWriter(outputStream, UTF_8)) diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DelayedHandler.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DelayedHandler.java index 2b9ec8cb17e3..d1fbc249826c 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DelayedHandler.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DelayedHandler.java @@ -160,7 +160,7 @@ protected Request.Processor delayed(Request request, Request.Processor processor return processor; String contentTypeValue = HttpField.valueParameters(contentType, null); - if (!MimeTypes.Known.MULTIPART_FORM_DATA.is(contentTypeValue)) + if (!MimeTypes.PreDefined.MULTIPART_FORM_DATA.is(contentTypeValue)) return processor; String boundary = MultiPart.extractBoundary(contentType); if (boundary == null) diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ErrorProcessor.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ErrorProcessor.java index 13166044d481..23341c46da16 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ErrorProcessor.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ErrorProcessor.java @@ -36,7 +36,7 @@ import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpStatus; -import org.eclipse.jetty.http.MimeTypes.Known; +import org.eclipse.jetty.http.MimeTypes.PreDefined; import org.eclipse.jetty.http.PreEncodedHttpField; import org.eclipse.jetty.http.QuotedQualityCSV; import org.eclipse.jetty.io.ByteBufferOutputStream; @@ -130,7 +130,7 @@ protected void generateResponse(Request request, Response response, int code, St callback.succeeded(); return; } - acceptable = Collections.singletonList(Known.TEXT_HTML.asString()); + acceptable = Collections.singletonList(PreDefined.TEXT_HTML.asString()); } List charsets = request.getHeaders().getQualityCSV(HttpHeader.ACCEPT_CHARSET).stream() .map(s -> @@ -168,14 +168,14 @@ protected void generateResponse(Request request, Response response, int code, St protected boolean generateAcceptableResponse(Request request, Response response, Callback callback, String contentType, List charsets, int code, String message, Throwable cause) throws IOException { - Known type; + PreDefined type; Charset charset; switch (contentType) { case "text/html": case "text/*": case "*/*": - type = Known.TEXT_HTML; + type = PreDefined.TEXT_HTML; charset = charsets.stream().findFirst().orElse(StandardCharsets.ISO_8859_1); break; @@ -187,11 +187,11 @@ else if (charsets.contains(StandardCharsets.ISO_8859_1)) charset = StandardCharsets.ISO_8859_1; else return false; - type = Known.TEXT_JSON.is(contentType) ? Known.TEXT_JSON : Known.APPLICATION_JSON; + type = PreDefined.TEXT_JSON.is(contentType) ? PreDefined.TEXT_JSON : PreDefined.APPLICATION_JSON; break; case "text/plain": - type = Known.TEXT_PLAIN; + type = PreDefined.TEXT_PLAIN; charset = charsets.stream().findFirst().orElse(StandardCharsets.ISO_8859_1); break; @@ -428,7 +428,7 @@ public ByteBuffer badMessageError(int status, String reason, HttpFields.Mutable reason = HttpStatus.getMessage(status); if (HttpStatus.hasNoBody(status)) return BufferUtil.EMPTY_BUFFER; - fields.put(HttpHeader.CONTENT_TYPE, Known.TEXT_HTML_8859_1.asString()); + fields.put(HttpHeader.CONTENT_TYPE, PreDefined.TEXT_HTML_8859_1.asString()); return BufferUtil.toBuffer("

Bad Message " + status + "

reason: " + reason + "
"); } diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java index f2f931a49200..a8c474661b74 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java @@ -74,9 +74,7 @@ public void doStart() throws Exception _resourceBase = context.getBaseResource(); } - // TODO: _mimeTypes = _context == null ? new MimeTypes() : _context.getMimeTypes(); - if (_mimeTypes == null) - _mimeTypes = new MimeTypes(); + _mimeTypes = context.getMimeTypes(); _byteBufferPool = getByteBufferPool(context); _resourceService.setHttpContentFactory(newHttpContentFactory()); @@ -320,11 +318,6 @@ public int getEncodingCacheSize() return _resourceService.getEncodingCacheSize(); } - public void setMimeTypes(MimeTypes mimeTypes) - { - _mimeTypes = mimeTypes; - } - /** * @param redirectWelcome If true, welcome files are redirected rather than forwarded to. * redirection is always used if the ResourceHandler is not scoped by diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/gzip/GzipHandler.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/gzip/GzipHandler.java index 478b975eb1b4..0051a978bdd1 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/gzip/GzipHandler.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/gzip/GzipHandler.java @@ -68,7 +68,7 @@ public GzipHandler() { _methods.include(HttpMethod.GET.asString()); _methods.include(HttpMethod.POST.asString()); - for (String type : MimeTypes.getKnownMimeTypes()) + for (String type : MimeTypes.DEFAULTS.getKnownMimeTypes()) { if ("image/svg+xml".equals(type)) _paths.exclude("*.svgz"); @@ -624,9 +624,8 @@ else if (COMMA_GZIP.matcher(field.getValue()).matches()) return wrappedRequest.wrapProcessor(super.handle(wrappedRequest)); } - // TODO: get mimetype from context. // Exclude non compressible mime-types known from URI extension. - no Vary because no matter what client, this URI is always excluded - String mimeType = MimeTypes.getDefaultMimeByExtension(path); + String mimeType = request.getContext().getMimeTypes().getMimeByExtension(path); if (mimeType != null) { mimeType = HttpField.valueParameters(mimeType, null); diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpChannelTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpChannelTest.java index 00eff3121645..64d890c3143e 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpChannelTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpChannelTest.java @@ -104,7 +104,7 @@ public void testSimpleGET() throws Exception assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); } @@ -140,7 +140,7 @@ public void send(MetaData.Request request, MetaData.Response response, boolean l assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); } @@ -153,7 +153,7 @@ public void testRecursiveGET() throws Exception public void process(Request request, Response response, Callback callback) { response.setStatus(200); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString()); AtomicInteger count = new AtomicInteger(10000); Callback writer = new Callback() { @@ -208,7 +208,7 @@ public void failed(Throwable x) assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); assertThat(stream.getResponseContent().remaining(), equalTo(10000)); } @@ -263,7 +263,7 @@ public void testEchoPOST() throws Exception HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString()) .asImmutable(); stream.addContent(body, true); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); @@ -275,7 +275,7 @@ public void testEchoPOST() throws Exception assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); } @@ -307,7 +307,7 @@ public Content.Chunk read() HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); @@ -318,7 +318,7 @@ public Content.Chunk read() assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); } @@ -348,7 +348,7 @@ public void send(MetaData.Request request, MetaData.Response response, boolean l HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); @@ -388,7 +388,7 @@ public void send(MetaData.Request request, MetaData.Response response, boolean l assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); } @@ -711,7 +711,7 @@ public void testUnconsumedContentAvailable() throws Exception HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); stream.addContent(body, true); @@ -723,7 +723,7 @@ public void testUnconsumedContentAvailable() throws Exception assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); assertThat(stream.getResponseHeaders().get(HttpHeader.CONNECTION), nullValue()); @@ -739,7 +739,7 @@ public void testUnconsumedContentUnavailable() throws Exception public void process(Request request, Response response, Callback callback) { response.setStatus(200); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString()); response.getHeaders().putLongField(HttpHeader.CONTENT_LENGTH, 5); response.write(false, null, Callback.from(() -> response.write(true, BufferUtil.toBuffer("12345"), callback))); } @@ -765,7 +765,7 @@ public void process(Request request, Response response, Callback callback) assertThat(stream.getFailure().getMessage(), containsString("Content not consumed")); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo("12345")); assertThat(stream.getResponseHeaders().get(HttpHeader.CONNECTION), nullValue()); @@ -782,7 +782,7 @@ public void process(Request request, Response response, Callback callback) { response.setStatus(200); response.getHeaders().add(HttpHeader.CONNECTION, HttpHeaderValue.CLOSE.asString()); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString()); response.getHeaders().putLongField(HttpHeader.CONTENT_LENGTH, 5); response.write(false, null, Callback.from(() -> response.write(true, BufferUtil.toBuffer("12345"), callback))); } @@ -807,7 +807,7 @@ public void process(Request request, Response response, Callback callback) assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo("12345")); assertThat(stream.getResponseHeaders().get(HttpHeader.CONNECTION), equalTo(HttpHeaderValue.CLOSE.asString())); @@ -830,7 +830,7 @@ public void testPersistent() throws Exception HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); assertThat(stream.addContent(body, true), nullValue()); @@ -842,7 +842,7 @@ public void testPersistent() throws Exception assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); // 2nd request @@ -893,7 +893,7 @@ public void send(MetaData.Request request, MetaData.Response response, boolean l HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); assertThat(stream.addContent(BufferUtil.toBuffer(parts[0]), false), nullValue()); @@ -970,7 +970,7 @@ public void failed(Throwable x) assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); Iterator timeline = history.iterator(); @@ -1035,7 +1035,7 @@ public Content.Chunk read() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) .put(HttpHeader.TRAILER, "Some") - .add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); @@ -1046,7 +1046,7 @@ public Content.Chunk read() assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); HttpFields trailersRcv = stream.getResponseTrailers(); @@ -1255,7 +1255,7 @@ public void send(MetaData.Request request, MetaData.Response response, boolean l HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") - .add(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString()) .add(HttpHeader.CONTENT_LENGTH, "12") .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, -1); diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java index 8126acabbda1..84be111429f7 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java @@ -1144,7 +1144,7 @@ public void testOversizedResponse() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE.toString(), MimeTypes.Known.TEXT_HTML.toString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE.toString(), MimeTypes.PreDefined.TEXT_HTML.toString()); response.getHeaders().put("LongStr", longstr); response.write(false, BufferUtil.toBuffer("

FOO

"), Callback.from(callback::succeeded, t -> @@ -1193,7 +1193,7 @@ public void testAllowedLargeResponse() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE.toString(), MimeTypes.Known.TEXT_HTML.toString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE.toString(), MimeTypes.PreDefined.TEXT_HTML.toString()); response.getHeaders().put("LongStr", longstr); response.write(false, diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/RequestLogTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/RequestLogTest.java index 04e218267e20..ec01c0cbea5c 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/RequestLogTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/RequestLogTest.java @@ -180,7 +180,7 @@ public void testNormalPostFormRequest(String requestPath) throws Exception StringBuilder req = new StringBuilder(); req.append("POST ").append(requestPath).append(" HTTP/1.1\r\n"); req.append("Host: ").append(baseURI.getRawAuthority()).append("\r\n"); - req.append("Content-Type: ").append(MimeTypes.Known.FORM_ENCODED).append("\r\n"); + req.append("Content-Type: ").append(MimeTypes.PreDefined.FORM_ENCODED).append("\r\n"); req.append("Content-Length: ").append(bufForm.length).append("\r\n"); req.append("Connection: close\r\n"); req.append("\r\n"); @@ -266,7 +266,7 @@ public void testBadPostFormRequest() throws Exception StringBuilder req = new StringBuilder(); req.append("POST /hello HTTP/1.1\r\n"); req.append("Host: ").append(baseURI.getRawAuthority()).append("\r\n"); - req.append("Content-Type: ").append(MimeTypes.Known.FORM_ENCODED).append("\r\n"); + req.append("Content-Type: ").append(MimeTypes.PreDefined.FORM_ENCODED).append("\r\n"); req.append("Content-Length: ").append(bufForm.length).append("\r\n"); // add extra Transfer-Encoding: chunked header, making the POST request invalid per HTTP spec req.append("Transfer-Encoding: chunked\r\n"); diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ContextHandlerTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ContextHandlerTest.java index 4be5c796a9d2..bb3acef5c2ab 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ContextHandlerTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ContextHandlerTest.java @@ -135,7 +135,7 @@ public void testSimpleGET() throws Exception assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); // The original fields have been recycled. assertThat(stream.getResponse().getFields().size(), equalTo(0)); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); @@ -157,7 +157,7 @@ public void testSetAvailable() throws Exception channel.onRequest(request).run(); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); _contextHandler.setAvailable(false); @@ -167,7 +167,7 @@ public void testSetAvailable() throws Exception channel.onRequest(request).run(); assertThat(stream.getResponse().getStatus(), equalTo(503)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_HTML_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_HTML_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), containsString("Service Unavailable")); _contextHandler.setAvailable(true); @@ -177,7 +177,7 @@ public void testSetAvailable() throws Exception channel.onRequest(request).run(); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); @@ -527,7 +527,7 @@ protected void writeErrorHtmlBody(Request request, Writer writer, int code, Stri assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(500)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Known.TEXT_HTML_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_HTML_8859_1.asString())); assertThat(stream.getResponse().getFields().size(), equalTo(0)); assertThat(BufferUtil.toString(stream.getResponseContent()), containsString("

Context: /ctx

")); assertThat(BufferUtil.toString(stream.getResponseContent()), containsString("java.lang.RuntimeException: Testing")); diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DelayedHandlerTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DelayedHandlerTest.java index a199b5972749..cdd2c2e1977a 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DelayedHandlerTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DelayedHandlerTest.java @@ -433,7 +433,7 @@ public void process(Request request, Response response, Callback callback) throw Content-Type: %s Content-Length: 22 - """.formatted(MimeTypes.Known.FORM_ENCODED).getBytes(StandardCharsets.UTF_8)); + """.formatted(MimeTypes.PreDefined.FORM_ENCODED).getBytes(StandardCharsets.UTF_8)); output.flush(); assertFalse(processing.await(100, TimeUnit.MILLISECONDS)); diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DumpHandler.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DumpHandler.java index 3fffa561e096..c9a578defe44 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DumpHandler.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DumpHandler.java @@ -141,7 +141,7 @@ public void process(Request request, Response response, Callback callback) throw return; } - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_HTML.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_HTML.asString()); ByteArrayOutputStream buf = new ByteArrayOutputStream(2048); Writer writer = new OutputStreamWriter(buf, StandardCharsets.ISO_8859_1); diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/HelloHandler.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/HelloHandler.java index a3e872aa7b0e..31972071b197 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/HelloHandler.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/HelloHandler.java @@ -49,7 +49,7 @@ public String getMessage() public void process(Request request, Response response, Callback callback) throws Exception { response.setStatus(200); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString()); Content.Sink.write(response, true, _message, callback); } } diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/gzip/GzipHandlerTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/gzip/GzipHandlerTest.java index ac9e8179088f..1355b5499c8f 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/gzip/GzipHandlerTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/gzip/GzipHandlerTest.java @@ -34,7 +34,6 @@ import org.eclipse.jetty.http.HttpMethod; import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.http.HttpTester; -import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.io.Content; import org.eclipse.jetty.server.Context; import org.eclipse.jetty.server.FormFields; @@ -92,8 +91,6 @@ public class GzipHandlerTest private static final String __contentETagGzip = String.format("W/\"%x" + CompressedContentFormat.GZIP.getEtagSuffix() + "\"", __content.hashCode()); private static final String __icontent = "BEFORE" + __content + "AFTER"; - private static final MimeTypes __mimeTypes = new MimeTypes(); - private Server _server; private LocalConnector _connector; private GzipHandler _gziphandler; @@ -162,7 +159,7 @@ private String getContentTypeFromRequest(String filename, Request request) // TODO get mime type from context. Context context = request.getContext(); - String contentType = __mimeTypes.getMimeByExtension(filename); + String contentType = context.getMimeTypes().getMimeByExtension(filename); if (contentType != null) return contentType; return defaultContentType; diff --git a/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/HttpClientTransportDynamicTest.java b/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/HttpClientTransportDynamicTest.java index d66e723cf814..824350fdc9d8 100644 --- a/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/HttpClientTransportDynamicTest.java +++ b/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/HttpClientTransportDynamicTest.java @@ -401,7 +401,7 @@ public void testDestinationClientConnectionFactoryWrapped() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN.asString()); Content.Sink.write(response, true, String.valueOf(Request.getRemotePort(request)), callback); } }); @@ -498,7 +498,7 @@ public void testHTTP11UpgradeToH2C() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString()); Content.Sink.write(response, true, content, callback); } }); @@ -573,7 +573,7 @@ public void testHTTP11UpgradeToH2CWithForwardProxy() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString()); Content.Sink.write(response, true, content, callback); } }); @@ -612,7 +612,7 @@ public void testHTTP11UpgradeToH2COverTLS() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString()); Content.Sink.write(response, true, content, callback); } }); diff --git a/jetty-ee10/jetty-ee10-openid/src/main/java/org/eclipse/jetty/ee10/security/openid/OpenIdAuthenticator.java b/jetty-ee10/jetty-ee10-openid/src/main/java/org/eclipse/jetty/ee10/security/openid/OpenIdAuthenticator.java index 52a5563f48d1..982e4be71c1f 100644 --- a/jetty-ee10/jetty-ee10-openid/src/main/java/org/eclipse/jetty/ee10/security/openid/OpenIdAuthenticator.java +++ b/jetty-ee10/jetty-ee10-openid/src/main/java/org/eclipse/jetty/ee10/security/openid/OpenIdAuthenticator.java @@ -711,7 +711,7 @@ public UriRedirectInfo(Request request) _method = request.getMethod(); // TODO: - if (MimeTypes.Known.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE)) && HttpMethod.POST.is(request.getMethod())) + if (MimeTypes.PreDefined.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE)) && HttpMethod.POST.is(request.getMethod())) { MultiMap formParameters = new MultiMap<>(); // request.extractFormParameters(formParameters); diff --git a/jetty-ee10/jetty-ee10-proxy/src/test/java/org/eclipse/jetty/ee10/proxy/ForwardProxyTLSServerTest.java b/jetty-ee10/jetty-ee10-proxy/src/test/java/org/eclipse/jetty/ee10/proxy/ForwardProxyTLSServerTest.java index a39eab9d877a..a8fa7ccf8fff 100644 --- a/jetty-ee10/jetty-ee10-proxy/src/test/java/org/eclipse/jetty/ee10/proxy/ForwardProxyTLSServerTest.java +++ b/jetty-ee10/jetty-ee10-proxy/src/test/java/org/eclipse/jetty/ee10/proxy/ForwardProxyTLSServerTest.java @@ -257,7 +257,7 @@ public void testTwoExchanges(SslContextFactory.Server proxyTLS) throws Exception .scheme(HttpScheme.HTTPS.asString()) .method(HttpMethod.POST) .path("/echo") - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.FORM_ENCODED.asString())) .headers(headers -> headers.put(HttpHeader.CONTENT_LENGTH, String.valueOf(contentLength))) .body(new StringRequestContent(content)) .timeout(5, TimeUnit.SECONDS) @@ -320,7 +320,7 @@ public void succeeded(Connection result) .scheme(HttpScheme.HTTPS.asString()) .method(HttpMethod.POST) .path("/echo") - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.FORM_ENCODED.asString())) .headers(headers -> headers.put(HttpHeader.CONTENT_LENGTH, String.valueOf(body2.length()))) .body(new StringRequestContent(body2)); @@ -1022,7 +1022,7 @@ public void process(Request request, Response response, Callback callback) throw else callback.succeeded(); } - else if (MimeTypes.Known.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE))) + else if (MimeTypes.PreDefined.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE))) { FormFields.from(request).whenComplete((fields, failure) -> { diff --git a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ErrorHandler.java b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ErrorHandler.java index 6219c3bdf739..6cb36bba474d 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ErrorHandler.java +++ b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ErrorHandler.java @@ -150,7 +150,7 @@ protected void generateAcceptableResponse(ServletContextRequest baseRequest, Htt if (acceptable.isEmpty() && !baseRequest.getHeaders().contains(HttpHeader.ACCEPT)) { - generateAcceptableResponse(baseRequest, request, response, code, message, MimeTypes.Known.TEXT_HTML.asString()); + generateAcceptableResponse(baseRequest, request, response, code, message, MimeTypes.PreDefined.TEXT_HTML.asString()); } else { @@ -256,26 +256,26 @@ protected void generateAcceptableResponse(ServletContextRequest baseRequest, Htt return; } - MimeTypes.Known type; + MimeTypes.PreDefined type; switch (contentType) { case "text/html": case "text/*": case "*/*": - type = MimeTypes.Known.TEXT_HTML; + type = MimeTypes.PreDefined.TEXT_HTML; if (charset == null) charset = StandardCharsets.ISO_8859_1; break; case "text/json": case "application/json": - type = MimeTypes.Known.TEXT_JSON; + type = MimeTypes.PreDefined.TEXT_JSON; if (charset == null) charset = StandardCharsets.UTF_8; break; case "text/plain": - type = MimeTypes.Known.TEXT_PLAIN; + type = MimeTypes.PreDefined.TEXT_PLAIN; if (charset == null) charset = StandardCharsets.ISO_8859_1; break; @@ -300,7 +300,7 @@ protected void generateAcceptableResponse(ServletContextRequest baseRequest, Htt switch (type) { case TEXT_HTML: - response.setContentType(MimeTypes.Known.TEXT_HTML.asString()); + response.setContentType(MimeTypes.PreDefined.TEXT_HTML.asString()); response.setCharacterEncoding(charset.name()); request.setAttribute(ERROR_CHARSET, charset); handleErrorPage(request, writer, code, message); @@ -310,7 +310,7 @@ protected void generateAcceptableResponse(ServletContextRequest baseRequest, Htt writeErrorJson(request, writer, code, message); break; case TEXT_PLAIN: - response.setContentType(MimeTypes.Known.TEXT_PLAIN.asString()); + response.setContentType(MimeTypes.PreDefined.TEXT_PLAIN.asString()); response.setCharacterEncoding(charset.name()); writeErrorPlain(request, writer, code, message); break; @@ -522,7 +522,7 @@ public ByteBuffer badMessageError(int status, String reason, HttpFields.Mutable reason = HttpStatus.getMessage(status); if (HttpStatus.hasNoBody(status)) return BufferUtil.EMPTY_BUFFER; - fields.put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_HTML_8859_1.asString()); + fields.put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_HTML_8859_1.asString()); return BufferUtil.toBuffer("

Bad Message " + status + "

reason: " + reason + "
"); } diff --git a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextHandler.java b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextHandler.java index eadf82a994d1..10aa708da8b2 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextHandler.java +++ b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextHandler.java @@ -73,7 +73,6 @@ import org.eclipse.jetty.ee10.servlet.security.ConstraintSecurityHandler; import org.eclipse.jetty.ee10.servlet.security.SecurityHandler; import org.eclipse.jetty.http.HttpURI; -import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.http.pathmap.MatchedResource; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Request; @@ -192,7 +191,6 @@ public interface ServletContainerInitializerCaller extends LifeCycle {} private String _defaultRequestCharacterEncoding; private String _defaultResponseCharacterEncoding; private String _contextPathEncoded = "/"; - protected MimeTypes _mimeTypes; private Map _localeEncodingMap; private String[] _welcomeFiles; private Logger _logger; @@ -649,24 +647,6 @@ else if (contextPath.length() > 1 && contextPath.endsWith("/")) } } - /** - * @return Returns the mimeTypes. - */ - public MimeTypes getMimeTypes() - { - if (_mimeTypes == null) - _mimeTypes = new MimeTypes(); - return _mimeTypes; - } - - /** - * @param mimeTypes The mimeTypes to set. - */ - public void setMimeTypes(MimeTypes mimeTypes) - { - _mimeTypes = mimeTypes; - } - public void setWelcomeFiles(String[] files) { _welcomeFiles = files; @@ -1079,9 +1059,6 @@ protected void doStart() throws Exception if (getServer() != null) _servletContext.setAttribute("org.eclipse.jetty.server.Executor", getServer().getThreadPool()); - if (_mimeTypes == null) - _mimeTypes = new MimeTypes(); - _durableListeners.addAll(getEventListeners()); getContext().call(() -> @@ -2811,8 +2788,6 @@ public ServletContext getContext(String uripath) @Override public String getMimeType(String file) { - if (_mimeTypes == null) - return null; return getContext().getMimeTypes().getMimeByExtension(file); } diff --git a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextRequest.java b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextRequest.java index 14c08ab85619..6a6052b77ea2 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextRequest.java +++ b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextRequest.java @@ -787,8 +787,8 @@ public void logout() throws ServletException public Collection getParts() throws IOException, ServletException { String contentType = getContentType(); - if (contentType == null || !MimeTypes.Known.MULTIPART_FORM_DATA.is(HttpField.valueParameters(contentType, null))) - throw new ServletException("Unsupported Content-Type [%s], expected [%s]".formatted(contentType, MimeTypes.Known.MULTIPART_FORM_DATA.asString())); + if (contentType == null || !MimeTypes.PreDefined.MULTIPART_FORM_DATA.is(HttpField.valueParameters(contentType, null))) + throw new ServletException("Unsupported Content-Type [%s], expected [%s]".formatted(contentType, MimeTypes.PreDefined.MULTIPART_FORM_DATA.asString())); if (_parts == null) _parts = ServletMultiPartFormData.from(this); return _parts.getParts(); @@ -874,7 +874,7 @@ public String getCharacterEncoding() String contentType = getContentType(); if (contentType != null) { - MimeTypes.Known mime = MimeTypes.CACHE.get(contentType); + MimeTypes.PreDefined mime = MimeTypes.CACHE.get(contentType); String charset = (mime == null || mime.getCharset() == null) ? MimeTypes.getCharsetFromContentType(contentType) : mime.getCharset().toString(); if (charset != null) _characterEncoding = charset; diff --git a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextResponse.java b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextResponse.java index b7c3582a12a4..9b0fdd8314e9 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextResponse.java +++ b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextResponse.java @@ -77,7 +77,7 @@ public enum OutputType private final ServletContextRequest _request; private String _characterEncoding; private String _contentType; - private MimeTypes.Known _mimeType; + private MimeTypes.PreDefined _mimeType; private Locale _locale; private EncodingFrom _encodingFrom = EncodingFrom.NOT_SET; private OutputType _outputType = OutputType.NONE; @@ -349,14 +349,15 @@ public String getCharacterEncoding(boolean setContentType) // Try charset from mime type. if (_mimeType != null && _mimeType.isCharsetAssumed()) return _mimeType.getCharsetString(); - + // Try charset assumed from content type (assumed charsets are not added to content type header). - encoding = MimeTypes.getCharsetAssumedFromContentType(_contentType); + MimeTypes mimeTypes = _request.getContext().getMimeTypes(); + encoding = mimeTypes.getCharsetAssumedFromContentType(_contentType); if (encoding != null) return encoding; // Try char set inferred from content type. - encoding = MimeTypes.getCharsetInferredFromContentType(_contentType); + encoding = mimeTypes.getCharsetInferredFromContentType(_contentType); if (encoding != null) { if (setContentType) diff --git a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/security/authentication/FormAuthenticator.java b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/security/authentication/FormAuthenticator.java index d2bd8cc713bb..a7c33047ed79 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/security/authentication/FormAuthenticator.java +++ b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/security/authentication/FormAuthenticator.java @@ -353,7 +353,7 @@ public Authentication validateRequest(Request req, Response res, Callback callba session.setAttribute(__J_URI, req.getHttpURI()); session.setAttribute(__J_METHOD, req.getMethod()); - if (MimeTypes.Known.FORM_ENCODED.is(servletApiRequest.getContentType()) && HttpMethod.POST.is(req.getMethod())) + if (MimeTypes.PreDefined.FORM_ENCODED.is(servletApiRequest.getContentType()) && HttpMethod.POST.is(req.getMethod())) { session.setAttribute(__J_POST, servletApiRequest.getContentParameters()); } diff --git a/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/FormTest.java b/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/FormTest.java index 8669371da69b..c0c00b702650 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/FormTest.java +++ b/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/FormTest.java @@ -130,7 +130,7 @@ protected void service(HttpServletRequest request, HttpServletResponse response) ContentResponse response = client.newRequest("localhost", connector.getLocalPort()) .method(HttpMethod.POST) .path(contextPath + servletPath) - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.FORM_ENCODED.asString())) .body(content) .onRequestBegin(request -> { diff --git a/jetty-ee10/jetty-examples/src/test/java/org/eclipse/jetty/examples/Jetty12Example.java b/jetty-ee10/jetty-examples/src/test/java/org/eclipse/jetty/examples/Jetty12Example.java index deb7e7872477..718353d77a4e 100644 --- a/jetty-ee10/jetty-examples/src/test/java/org/eclipse/jetty/examples/Jetty12Example.java +++ b/jetty-ee10/jetty-examples/src/test/java/org/eclipse/jetty/examples/Jetty12Example.java @@ -45,7 +45,7 @@ public void process(org.eclipse.jetty.server.Request request, Callback callback) throws Exception { response.setStatus(200); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString()); Content.Sink.write(response, true, "the handler says Hello World", callback); } }); diff --git a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/BufferedResponseHandler.java b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/BufferedResponseHandler.java index 05aa44f8ef7f..ddc044d541be 100644 --- a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/BufferedResponseHandler.java +++ b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/BufferedResponseHandler.java @@ -64,7 +64,7 @@ public class BufferedResponseHandler extends HandlerWrapper public BufferedResponseHandler() { _methods.include(HttpMethod.GET.asString()); - for (String type : MimeTypes.getKnownMimeTypes()) + for (String type : MimeTypes.DEFAULTS.getKnownMimeTypes()) { if (type.startsWith("image/") || type.startsWith("audio/") || @@ -165,7 +165,7 @@ public void handle(String target, Request baseRequest, HttpServletRequest reques } // If the mime type is known from the path then apply mime type filtering. - String mimeType = context == null ? MimeTypes.getDefaultMimeByExtension(path) : context.getMimeType(path); + String mimeType = context == null ? MimeTypes.DEFAULTS.getMimeByExtension(path) : context.getMimeType(path); if (mimeType != null) { mimeType = MimeTypes.getContentTypeWithoutCharset(mimeType); diff --git a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ContextHandler.java b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ContextHandler.java index aa010fc9ae3e..91dac11a6784 100644 --- a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ContextHandler.java +++ b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ContextHandler.java @@ -194,7 +194,6 @@ public enum ContextStatus private String _defaultRequestCharacterEncoding; private String _defaultResponseCharacterEncoding; private String _contextPathEncoded = "/"; - private MimeTypes _mimeTypes; private Map _localeEncodingMap; private String[] _welcomeFiles; private ErrorHandler _errorHandler; @@ -625,9 +624,6 @@ protected void doStart() throws Exception setAttribute("org.eclipse.jetty.server.Executor", getServer().getThreadPool()); - if (_mimeTypes == null) - _mimeTypes = new MimeTypes(); - _durableListeners.addAll(getEventListeners()); // allow the call to super.doStart() to be deferred by extended implementations. @@ -1182,19 +1178,9 @@ public void setResourceBase(String resourceBase) /** * @return Returns the mimeTypes. */ - public MimeTypes getMimeTypes() + public MimeTypes.Mutable getMimeTypes() { - if (_mimeTypes == null) - _mimeTypes = new MimeTypes(); - return _mimeTypes; - } - - /** - * @param mimeTypes The mimeTypes to set. - */ - public void setMimeTypes(MimeTypes mimeTypes) - { - _mimeTypes = mimeTypes; + return _coreContextHandler.getMimeTypes(); } public void setWelcomeFiles(String[] files) @@ -1766,9 +1752,7 @@ public ServletContext getContext(String uripath) @Override public String getMimeType(String file) { - if (_mimeTypes == null) - return null; - return _mimeTypes.getMimeByExtension(file); + return _coreContext.getMimeTypes().getMimeByExtension(file); } @Override diff --git a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ErrorHandler.java b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ErrorHandler.java index 827709e0c025..a52d5534e990 100644 --- a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ErrorHandler.java +++ b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ErrorHandler.java @@ -142,7 +142,7 @@ protected void generateAcceptableResponse(Request baseRequest, HttpServletReques if (acceptable.isEmpty() && !baseRequest.getHttpFields().contains(HttpHeader.ACCEPT)) { - generateAcceptableResponse(baseRequest, request, response, code, message, MimeTypes.Known.TEXT_HTML.asString()); + generateAcceptableResponse(baseRequest, request, response, code, message, MimeTypes.PreDefined.TEXT_HTML.asString()); } else { @@ -251,26 +251,26 @@ protected void generateAcceptableResponse(Request baseRequest, HttpServletReques return; } - MimeTypes.Known type; + MimeTypes.PreDefined type; switch (contentType) { case "text/html": case "text/*": case "*/*": - type = MimeTypes.Known.TEXT_HTML; + type = MimeTypes.PreDefined.TEXT_HTML; if (charset == null) charset = StandardCharsets.ISO_8859_1; break; case "text/json": case "application/json": - type = MimeTypes.Known.TEXT_JSON; + type = MimeTypes.PreDefined.TEXT_JSON; if (charset == null) charset = StandardCharsets.UTF_8; break; case "text/plain": - type = MimeTypes.Known.TEXT_PLAIN; + type = MimeTypes.PreDefined.TEXT_PLAIN; if (charset == null) charset = StandardCharsets.ISO_8859_1; break; @@ -291,7 +291,7 @@ protected void generateAcceptableResponse(Request baseRequest, HttpServletReques switch (type) { case TEXT_HTML: - response.setContentType(MimeTypes.Known.TEXT_HTML.asString()); + response.setContentType(MimeTypes.PreDefined.TEXT_HTML.asString()); response.setCharacterEncoding(charset.name()); request.setAttribute(ERROR_CHARSET, charset); handleErrorPage(request, writer, code, message); @@ -301,7 +301,7 @@ protected void generateAcceptableResponse(Request baseRequest, HttpServletReques writeErrorJson(request, writer, code, message); break; case TEXT_PLAIN: - response.setContentType(MimeTypes.Known.TEXT_PLAIN.asString()); + response.setContentType(MimeTypes.PreDefined.TEXT_PLAIN.asString()); response.setCharacterEncoding(charset.name()); writeErrorPlain(request, writer, code, message); break; @@ -522,7 +522,7 @@ public ByteBuffer badMessageError(int status, String reason, HttpFields.Mutable reason = HttpStatus.getMessage(status); if (HttpStatus.hasNoBody(status)) return BufferUtil.EMPTY_BUFFER; - fields.put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.TEXT_HTML_8859_1.asString()); + fields.put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_HTML_8859_1.asString()); return BufferUtil.toBuffer("

Bad Message " + status + "

reason: " + reason + "
"); } diff --git a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Request.java b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Request.java index 34eb38413656..ab0048237665 100644 --- a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Request.java +++ b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Request.java @@ -467,7 +467,7 @@ private void extractContentParameters() if (contentLength != 0 && _inputState == INPUT_NONE) { String baseType = HttpField.valueParameters(contentType, null); - if (MimeTypes.Known.FORM_ENCODED.is(baseType) && + if (MimeTypes.PreDefined.FORM_ENCODED.is(baseType) && _channel.getHttpConfiguration().isFormEncodedMethod(getMethod())) { if (_metaData != null && !isContentEncodingSupported()) @@ -477,7 +477,7 @@ private void extractContentParameters() extractFormParameters(_contentParameters); } - else if (MimeTypes.Known.MULTIPART_FORM_DATA.is(baseType) && + else if (MimeTypes.PreDefined.MULTIPART_FORM_DATA.is(baseType) && getAttribute(__MULTIPART_CONFIG_ELEMENT) != null && _multiParts == null) { @@ -651,7 +651,7 @@ public String getCharacterEncoding() String contentType = getContentType(); if (contentType != null) { - MimeTypes.Known mime = MimeTypes.CACHE.get(contentType); + MimeTypes.PreDefined mime = MimeTypes.CACHE.get(contentType); String charset = (mime == null || mime.getCharset() == null) ? MimeTypes.getCharsetFromContentType(contentType) : mime.getCharset().toString(); if (charset != null) _characterEncoding = charset; @@ -2013,7 +2013,7 @@ public Part getPart(String name) throws IOException, ServletException public Collection getParts() throws IOException, ServletException { String contentType = getContentType(); - if (contentType == null || !MimeTypes.Known.MULTIPART_FORM_DATA.is(HttpField.valueParameters(contentType, null))) + if (contentType == null || !MimeTypes.PreDefined.MULTIPART_FORM_DATA.is(HttpField.valueParameters(contentType, null))) throw new ServletException("Unsupported Content-Type [" + contentType + "], expected [multipart/form-data]"); return getParts(null); } diff --git a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ResourceHandler.java b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ResourceHandler.java index f2cf0368ddb2..1628ec8d48fc 100644 --- a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ResourceHandler.java +++ b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ResourceHandler.java @@ -103,7 +103,7 @@ public void doStart() throws Exception APIContext scontext = ContextHandler.getCurrentContext(); _context = (scontext == null ? null : scontext.getContextHandler()); if (_mimeTypes == null) - _mimeTypes = _context == null ? new MimeTypes() : _context.getMimeTypes(); + _mimeTypes = _context == null ? MimeTypes.DEFAULTS : _context.getMimeTypes(); _byteBufferPool = getByteBufferPool(_context); if (_resourceService.getHttpContentFactory() == null) diff --git a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Response.java b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Response.java index 39c2fb237fb9..d0e6554cac34 100644 --- a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Response.java +++ b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Response.java @@ -87,7 +87,7 @@ public enum OutputType private int _status = HttpStatus.OK_200; private String _reason; private Locale _locale; - private MimeTypes.Known _mimeType; + private MimeTypes.PreDefined _mimeType; private String _characterEncoding; private EncodingFrom _encodingFrom = EncodingFrom.NOT_SET; private String _contentType; @@ -793,12 +793,12 @@ private String getCharacterEncoding(boolean setContentType) return _mimeType.getCharsetString(); // Try charset assumed from content type (assumed charsets are not added to content type header). - encoding = MimeTypes.getCharsetAssumedFromContentType(_contentType); + encoding = _channel.getRequest().getCoreRequest().getContext().getMimeTypes().getCharsetAssumedFromContentType(_contentType); if (encoding != null) return encoding; // Try char set inferred from content type. - encoding = MimeTypes.getCharsetInferredFromContentType(_contentType); + encoding = _channel.getRequest().getCoreRequest().getContext().getMimeTypes().getCharsetInferredFromContentType(_contentType); if (encoding != null) { if (setContentType) diff --git a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/ContextHandlerTest.java b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/ContextHandlerTest.java index e48b72f61450..80a2cbb2d263 100644 --- a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/ContextHandlerTest.java +++ b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/ContextHandlerTest.java @@ -136,7 +136,7 @@ public void testDumpHeadersAndParameters() throws Exception Content-Length: 7 C=3&D=4 - """.formatted(MimeTypes.Known.FORM_ENCODED.asString())); + """.formatted(MimeTypes.PreDefined.FORM_ENCODED.asString())); HttpTester.Response response = HttpTester.parseResponse(rawResponse); diff --git a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/DumpHandler.java b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/DumpHandler.java index 7c347857e19a..58aa15c97ee1 100644 --- a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/DumpHandler.java +++ b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/DumpHandler.java @@ -94,7 +94,7 @@ public void handle(String target, Request baseRequest, HttpServletRequest reques } baseRequest.setHandled(true); - response.setHeader(HttpHeader.CONTENT_TYPE.asString(), MimeTypes.Known.TEXT_HTML.asString()); + response.setHeader(HttpHeader.CONTENT_TYPE.asString(), MimeTypes.PreDefined.TEXT_HTML.asString()); OutputStream out = response.getOutputStream(); ByteArrayOutputStream buf = new ByteArrayOutputStream(2048); diff --git a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/RequestTest.java b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/RequestTest.java index 8e55fbbaff6f..99fc073bd06c 100644 --- a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/RequestTest.java +++ b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/RequestTest.java @@ -332,7 +332,7 @@ public void testParamExtractionTimeout() throws Exception //an exception parsing the params String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.Known.FORM_ENCODED.asString() + "\n" + + "Content-Type: " + MimeTypes.PreDefined.FORM_ENCODED.asString() + "\n" + "Connection: close\n" + "Content-Length: 100\n" + "\n" + @@ -1111,7 +1111,7 @@ public void testEncodedForm() throws Exception String content = "name1=test&name2=test2&name3=&name4=test"; String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.Known.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.PreDefined.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + content.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1128,7 +1128,7 @@ public void testEncodedFormUnknownMethod() throws Exception String content = "name1=test&name2=test2&name3=&name4=test"; String request = "UNKNOWN / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.Known.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.PreDefined.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + content.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1150,7 +1150,7 @@ public void testEncodedFormExtraMethod() throws Exception String content = "name1=test&name2=test2&name3=&name4=test"; String request = "EXTRA / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.Known.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.PreDefined.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + content.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1174,7 +1174,7 @@ public void test8859EncodedForm() throws Exception String content = "name1=test&name2=test%E4&name3=&name4=test"; String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.Known.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.PreDefined.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + content.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1198,7 +1198,7 @@ public void testUTF8EncodedForm() throws Exception String content = "name1=test&name2=test%C3%A4&name3=&name4=test"; String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.Known.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.PreDefined.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + content.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1763,7 +1763,7 @@ public void testHashDOSKeys() throws Exception String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.Known.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.PreDefined.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + buf.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1801,7 +1801,7 @@ public void testHashDOSSize() throws Exception String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.Known.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.PreDefined.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + buf.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -2150,7 +2150,7 @@ public void handle(String target, Request baseRequest, HttpServletRequest reques ((Request)request).setHandled(true); if (request.getContentLength() > 0 && - !request.getContentType().startsWith(MimeTypes.Known.FORM_ENCODED.asString()) && + !request.getContentType().startsWith(MimeTypes.PreDefined.FORM_ENCODED.asString()) && !request.getContentType().startsWith("multipart/form-data")) assertNotNull(IO.toString(request.getInputStream())); diff --git a/jetty-ee9/jetty-ee9-security/src/main/java/org/eclipse/jetty/ee9/security/authentication/FormAuthenticator.java b/jetty-ee9/jetty-ee9-security/src/main/java/org/eclipse/jetty/ee9/security/authentication/FormAuthenticator.java index bc08b2b950ab..58d507ef44f5 100644 --- a/jetty-ee9/jetty-ee9-security/src/main/java/org/eclipse/jetty/ee9/security/authentication/FormAuthenticator.java +++ b/jetty-ee9/jetty-ee9-security/src/main/java/org/eclipse/jetty/ee9/security/authentication/FormAuthenticator.java @@ -378,7 +378,7 @@ else if (_dispatch) session.setAttribute(__J_URI, buf.toString()); session.setAttribute(__J_METHOD, request.getMethod()); - if (MimeTypes.Known.FORM_ENCODED.is(req.getContentType()) && HttpMethod.POST.is(request.getMethod())) + if (MimeTypes.PreDefined.FORM_ENCODED.is(req.getContentType()) && HttpMethod.POST.is(request.getMethod())) { MultiMap formParameters = new MultiMap<>(); baseRequest.extractFormParameters(formParameters); diff --git a/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/FormTest.java b/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/FormTest.java index 4d2ead953d81..2eacf0592426 100644 --- a/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/FormTest.java +++ b/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/FormTest.java @@ -131,7 +131,7 @@ protected void service(HttpServletRequest request, HttpServletResponse response) ContentResponse response = client.newRequest("localhost", connector.getLocalPort()) .method(HttpMethod.POST) .path(contextPath + servletPath) - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.FORM_ENCODED.asString())) .body(content) .onRequestBegin(request -> { diff --git a/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/MultiPartServletTest.java b/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/MultiPartServletTest.java index 341a1634222d..032475973a30 100644 --- a/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/MultiPartServletTest.java +++ b/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/MultiPartServletTest.java @@ -75,10 +75,10 @@ public static class MultiPartServlet extends HttpServlet @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - if (!req.getContentType().contains(MimeTypes.Known.MULTIPART_FORM_DATA.asString())) + if (!req.getContentType().contains(MimeTypes.PreDefined.MULTIPART_FORM_DATA.asString())) { resp.setContentType("text/plain"); - resp.getWriter().println("not content type " + MimeTypes.Known.MULTIPART_FORM_DATA); + resp.getWriter().println("not content type " + MimeTypes.PreDefined.MULTIPART_FORM_DATA); resp.getWriter().println("contentType: " + req.getContentType()); return; } @@ -96,7 +96,7 @@ public static class MultiPartEchoServlet extends HttpServlet @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - if (!req.getContentType().contains(MimeTypes.Known.MULTIPART_FORM_DATA.asString())) + if (!req.getContentType().contains(MimeTypes.PreDefined.MULTIPART_FORM_DATA.asString())) { resp.sendError(400); return; From fa1b404b317d5742f6e410987447d21c82be9dd9 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Sun, 20 Nov 2022 09:04:26 +1100 Subject: [PATCH 04/14] Cleanup MimeTypes WIP --- .../test/java/org/eclipse/jetty/ee9/nested/ResponseTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/ResponseTest.java b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/ResponseTest.java index cfc5169cb348..fbcb92adfb04 100644 --- a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/ResponseTest.java +++ b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/ResponseTest.java @@ -49,7 +49,6 @@ import org.eclipse.jetty.http.HttpURI; import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.http.MetaData; -import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.io.ByteArrayEndPoint; import org.eclipse.jetty.io.Content; import org.eclipse.jetty.io.EndPoint; @@ -446,7 +445,7 @@ public void testResponseCharacterEncoding() throws Exception public void testLocaleAndContentTypeEncoding() throws Exception { _server.stop(); - MimeTypes.getInferredEncodings().put("text/html", "iso-8859-1"); + _context.getMimeTypes().addInferred("text/html", "iso-8859-1"); _context.addLocaleEncoding("ja", "euc-jp"); _context.addLocaleEncoding("zh_CN", "gb18030"); _server.start(); From 3a13d5135ed9a8bd1b5249f12f8a068cf192b2cd Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Sun, 20 Nov 2022 09:12:36 +1100 Subject: [PATCH 05/14] Cleanup MimeTypes WIP --- .../jetty/ee9/servlets/IncludeExcludeBasedFilter.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/jetty-ee9/jetty-ee9-servlets/src/main/java/org/eclipse/jetty/ee9/servlets/IncludeExcludeBasedFilter.java b/jetty-ee9/jetty-ee9-servlets/src/main/java/org/eclipse/jetty/ee9/servlets/IncludeExcludeBasedFilter.java index 282e5d6d3562..f4b4e914377c 100644 --- a/jetty-ee9/jetty-ee9-servlets/src/main/java/org/eclipse/jetty/ee9/servlets/IncludeExcludeBasedFilter.java +++ b/jetty-ee9/jetty-ee9-servlets/src/main/java/org/eclipse/jetty/ee9/servlets/IncludeExcludeBasedFilter.java @@ -118,12 +118,7 @@ protected String guessMimeType(HttpServletRequest httpRequest, HttpServletRespon else { String requestUrl = httpRequest.getPathInfo(); - mimeType = MimeTypes.getDefaultMimeByExtension(requestUrl); - - if (mimeType == null) - { - mimeType = ""; - } + httpRequest.getServletContext().getMimeType(requestUrl); LOG.debug("Guessed mime type is {}", mimeType); } From ccfd652892f03b20ca3fd280b897ba8ffdafcbd6 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Mon, 21 Nov 2022 08:20:00 +1100 Subject: [PATCH 06/14] cleanup WIP Signed-off-by: Greg Wilkins --- .../org/eclipse/jetty/http/MimeTypes.java | 108 ++++-------------- .../handler/BufferedResponseHandler.java | 2 +- .../server/handler/gzip/GzipHandler.java | 2 +- .../servlets/IncludeExcludeBasedFilter.java | 23 ++-- .../ee10/servlets/TestMinGzipSizeServlet.java | 7 +- .../servlets/TestStaticMimeTypeServlet.java | 11 +- .../jetty/ee9/demos/FastFileServer.java | 11 +- .../ee9/nested/BufferedResponseHandler.java | 2 +- .../security/openid/OpenIdAuthenticator.java | 2 +- .../ee9/proxy/ForwardProxyTLSServerTest.java | 6 +- .../servlets/IncludeExcludeBasedFilter.java | 5 +- .../ee9/servlets/TestMinGzipSizeServlet.java | 6 +- .../servlets/TestStaticMimeTypeServlet.java | 11 +- 13 files changed, 56 insertions(+), 140 deletions(-) diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java index 4c7e21135fe3..6f8ab6812931 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java @@ -16,18 +16,15 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.Properties; -import java.util.Set; -import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.Index; import org.eclipse.jetty.util.StringUtil; import org.slf4j.Logger; @@ -103,7 +100,6 @@ public HttpField getContentTypeField(Charset charset) private final String _string; private final PreDefined _base; - private final ByteBuffer _buffer; private final Charset _charset; private final String _charsetString; private final boolean _assumedCharset; @@ -112,7 +108,6 @@ public HttpField getContentTypeField(Charset charset) PreDefined(String s) { _string = s; - _buffer = BufferUtil.toBuffer(s); _base = this; _charset = null; _charsetString = null; @@ -123,7 +118,6 @@ public HttpField getContentTypeField(Charset charset) PreDefined(String s, PreDefined base) { _string = s; - _buffer = BufferUtil.toBuffer(s); _base = base; int i = s.indexOf(";charset="); _charset = Charset.forName(s.substring(i + 9)); @@ -136,7 +130,6 @@ public HttpField getContentTypeField(Charset charset) { _string = s; _base = this; - _buffer = BufferUtil.toBuffer(s); _charset = cs; _charsetString = _charset == null ? null : _charset.toString().toLowerCase(Locale.ENGLISH); _assumedCharset = true; @@ -252,7 +245,11 @@ default String getMimeByExtension(String filename) String getCharsetAssumedFromContentType(String contentType); - Set getKnownMimeTypes(); + Map getMimeMap(); + + Map getInferredMap(); + + Map getAssumedMap(); interface Mutable extends MimeTypes { @@ -261,21 +258,17 @@ interface Mutable extends MimeTypes * * @param extension the extension * @param type the mime type + * @return previous value */ String addMimeMapping(String extension, String type); String addInferred(String contentType, String encoding); String addAssumed(String contentType, String encoding); - } - MimeTypes DEFAULTS = new MimeTypes() + MimeTypes DEFAULTS = new MimeTypes.Base() { - private final Map _mimeMap = new HashMap<>(); - private final Map _inferredEncodings = new HashMap<>(); - private final Map _assumedEncodings = new HashMap<>(); - { for (PreDefined type : PreDefined.values()) { @@ -375,6 +368,13 @@ else if ((_inferredEncodings.size() + _assumedEncodings.size()) < props.keySet() LOG.warn("Unable to load encoding resource: {} - {}", resourceName, e.toString()); } } + }; + + class Base implements MimeTypes + { + protected final Map _mimeMap = new HashMap<>(); + protected final Map _inferredEncodings = new HashMap<>(); + protected final Map _assumedEncodings = new HashMap<>(); @Override public String getMimeForExtension(String extension) @@ -395,57 +395,26 @@ public String getCharsetAssumedFromContentType(String contentType) } @Override - public Set getKnownMimeTypes() - { - return new HashSet<>(_mimeMap.values()); - } - }; - - class Wrapper implements MimeTypes - { - private final MimeTypes _wrapped; - - public Wrapper(MimeTypes wrapped) - { - _wrapped = wrapped; - } - - public MimeTypes getWrapped() - { - return _wrapped; - } - - @Override - public String getMimeForExtension(String extension) + public Map getMimeMap() { - return getWrapped().getMimeForExtension(extension); + return Collections.unmodifiableMap(_mimeMap); } @Override - public String getCharsetInferredFromContentType(String contentType) + public Map getInferredMap() { - return getWrapped().getCharsetInferredFromContentType(contentType); + return Collections.unmodifiableMap(_inferredEncodings); } @Override - public String getCharsetAssumedFromContentType(String contentType) + public Map getAssumedMap() { - return getWrapped().getCharsetAssumedFromContentType(contentType); - } - - @Override - public Set getKnownMimeTypes() - { - return getWrapped().getKnownMimeTypes(); + return Collections.unmodifiableMap(_assumedEncodings); } } - class Mapped extends Wrapper implements Mutable + class Mapped extends Base implements Mutable { - private final Map _mimeMap = new HashMap<>(); - private final Map _inferredEncodings = new HashMap<>(); - private final Map _assumedEncodings = new HashMap<>(); - public Mapped() { this(DEFAULTS); @@ -453,36 +422,9 @@ public Mapped() public Mapped(MimeTypes defaults) { - super(defaults); - } - - @Override - public String getMimeForExtension(String extension) - { - String mimeType = _mimeMap.get(extension); - return mimeType == null ? super.getMimeForExtension(extension) : mimeType; - } - - @Override - public String getCharsetInferredFromContentType(String contentType) - { - String charset = _inferredEncodings.get(contentType); - return charset == null ? super.getCharsetInferredFromContentType(contentType) : charset; - } - - @Override - public String getCharsetAssumedFromContentType(String contentType) - { - String charset = _assumedEncodings.get(contentType); - return (charset == null) ? super.getCharsetAssumedFromContentType(contentType) : charset; - } - - @Override - public Set getKnownMimeTypes() - { - Set types = new HashSet<>(super.getKnownMimeTypes()); - types.addAll(_mimeMap.values()); - return types; + _mimeMap.entrySet().addAll(defaults.getMimeMap().entrySet()); + _assumedEncodings.entrySet().addAll(defaults.getAssumedMap().entrySet()); + _inferredEncodings.entrySet().addAll(defaults.getInferredMap().entrySet()); } @Override diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/BufferedResponseHandler.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/BufferedResponseHandler.java index 989832b592e9..cabee3fd5bd1 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/BufferedResponseHandler.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/BufferedResponseHandler.java @@ -65,7 +65,7 @@ public class BufferedResponseHandler extends Handler.Wrapper public BufferedResponseHandler() { _methods.include(HttpMethod.GET.asString()); - for (String type : MimeTypes.DEFAULTS.getKnownMimeTypes()) + for (String type : MimeTypes.DEFAULTS.getMimeMap().values()) { if (type.startsWith("image/") || type.startsWith("audio/") || diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/gzip/GzipHandler.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/gzip/GzipHandler.java index 0051a978bdd1..9ca2a1ca483f 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/gzip/GzipHandler.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/gzip/GzipHandler.java @@ -68,7 +68,7 @@ public GzipHandler() { _methods.include(HttpMethod.GET.asString()); _methods.include(HttpMethod.POST.asString()); - for (String type : MimeTypes.DEFAULTS.getKnownMimeTypes()) + for (String type : MimeTypes.DEFAULTS.getMimeMap().values()) { if ("image/svg+xml".equals(type)) _paths.exclude("*.svgz"); diff --git a/jetty-ee10/jetty-ee10-servlets/src/main/java/org/eclipse/jetty/ee10/servlets/IncludeExcludeBasedFilter.java b/jetty-ee10/jetty-ee10-servlets/src/main/java/org/eclipse/jetty/ee10/servlets/IncludeExcludeBasedFilter.java index 7f3d47e21c96..af7d1220b852 100644 --- a/jetty-ee10/jetty-ee10-servlets/src/main/java/org/eclipse/jetty/ee10/servlets/IncludeExcludeBasedFilter.java +++ b/jetty-ee10/jetty-ee10-servlets/src/main/java/org/eclipse/jetty/ee10/servlets/IncludeExcludeBasedFilter.java @@ -13,6 +13,8 @@ package org.eclipse.jetty.ee10.servlets; +import java.util.Objects; + import jakarta.servlet.Filter; import jakarta.servlet.FilterConfig; import jakarta.servlet.ServletContext; @@ -109,7 +111,7 @@ protected String guessMimeType(HttpServletRequest httpRequest, HttpServletRespon String contentType = httpResponse.getContentType(); LOG.debug("Content Type is: {}", contentType); - String mimeType = ""; + String mimeType; if (contentType != null) { mimeType = MimeTypes.getContentTypeWithoutCharset(contentType); @@ -118,13 +120,8 @@ protected String guessMimeType(HttpServletRequest httpRequest, HttpServletRespon else { String requestUrl = httpRequest.getPathInfo(); - mimeType = MimeTypes.getDefaultMimeByExtension(requestUrl); - - if (mimeType == null) - { - mimeType = ""; - } - + mimeType = httpRequest.getServletContext().getMimeType(requestUrl); + mimeType = Objects.requireNonNullElse(mimeType, ""); LOG.debug("Guessed mime type is {}", mimeType); } @@ -169,11 +166,9 @@ public void destroy() @Override public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("filter configuration:\n"); - sb.append("paths:\n").append(_paths).append("\n"); - sb.append("mime types:\n").append(_mimeTypes).append("\n"); - sb.append("http methods:\n").append(_httpMethods); - return sb.toString(); + return "filter configuration:\n" + + "paths:\n" + _paths + "\n" + + "mime types:\n" + _mimeTypes + "\n" + + "http methods:\n" + _httpMethods; } } diff --git a/jetty-ee10/jetty-ee10-servlets/src/test/java/org/eclipse/jetty/ee10/servlets/TestMinGzipSizeServlet.java b/jetty-ee10/jetty-ee10-servlets/src/test/java/org/eclipse/jetty/ee10/servlets/TestMinGzipSizeServlet.java index c7405f6293c7..7fccbb482179 100644 --- a/jetty-ee10/jetty-ee10-servlets/src/test/java/org/eclipse/jetty/ee10/servlets/TestMinGzipSizeServlet.java +++ b/jetty-ee10/jetty-ee10-servlets/src/test/java/org/eclipse/jetty/ee10/servlets/TestMinGzipSizeServlet.java @@ -20,21 +20,16 @@ import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import org.eclipse.jetty.http.MimeTypes; /** * Test servlet for testing against unusual minGzip configurable. */ -@SuppressWarnings("serial") public class TestMinGzipSizeServlet extends AbstractFileContentServlet { - private MimeTypes mimeTypes; - @Override public void init(ServletConfig config) throws ServletException { super.init(config); - mimeTypes = new MimeTypes(); } @Override @@ -52,7 +47,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t } else { - String mime = mimeTypes.getMimeByExtension(fileName); + String mime = request.getServletContext().getMimeType(fileName); if (mime != null) response.setContentType(mime); } diff --git a/jetty-ee10/jetty-ee10-servlets/src/test/java/org/eclipse/jetty/ee10/servlets/TestStaticMimeTypeServlet.java b/jetty-ee10/jetty-ee10-servlets/src/test/java/org/eclipse/jetty/ee10/servlets/TestStaticMimeTypeServlet.java index e8d2f469d872..95e98a160373 100644 --- a/jetty-ee10/jetty-ee10-servlets/src/test/java/org/eclipse/jetty/ee10/servlets/TestStaticMimeTypeServlet.java +++ b/jetty-ee10/jetty-ee10-servlets/src/test/java/org/eclipse/jetty/ee10/servlets/TestStaticMimeTypeServlet.java @@ -14,6 +14,7 @@ package org.eclipse.jetty.ee10.servlets; import java.io.IOException; +import java.util.Objects; import jakarta.servlet.ServletConfig; import jakarta.servlet.ServletException; @@ -25,16 +26,15 @@ /** * Test servlet for testing against unusual MimeTypes and Content-Types. */ -@SuppressWarnings("serial") public class TestStaticMimeTypeServlet extends AbstractFileContentServlet { - private MimeTypes mimeTypes; + private MimeTypes.Mutable mimeTypes; @Override public void init(ServletConfig config) throws ServletException { super.init(config); - mimeTypes = new MimeTypes(); + mimeTypes = new MimeTypes.Mapped(); // Some real world, yet not terribly common, mime type mappings. mimeTypes.addMimeMapping("bz2", "application/bzip2"); mimeTypes.addMimeMapping("br", "application/brotli"); @@ -65,10 +65,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t response.setHeader("ETag", "W/etag-" + fileName); String mime = mimeTypes.getMimeByExtension(fileName); - if (mime == null) - response.setContentType("application/octet-stream"); - else - response.setContentType(mime); + response.setContentType(Objects.requireNonNullElse(mime, "application/octet-stream")); ServletOutputStream out = response.getOutputStream(); out.write(dataBytes); diff --git a/jetty-ee9/jetty-ee9-demos/jetty-ee9-demo-embedded/src/main/java/org/eclipse/jetty/ee9/demos/FastFileServer.java b/jetty-ee9/jetty-ee9-demos/jetty-ee9-demo-embedded/src/main/java/org/eclipse/jetty/ee9/demos/FastFileServer.java index aa10ab763dc5..270e4355d66a 100644 --- a/jetty-ee9/jetty-ee9-demos/jetty-ee9-demo-embedded/src/main/java/org/eclipse/jetty/ee9/demos/FastFileServer.java +++ b/jetty-ee9/jetty-ee9-demos/jetty-ee9-demo-embedded/src/main/java/org/eclipse/jetty/ee9/demos/FastFileServer.java @@ -15,19 +15,13 @@ import java.io.File; -import jakarta.servlet.http.HttpServletResponse; import org.eclipse.jetty.ee9.servlet.DefaultServlet; -import org.eclipse.jetty.http.HttpHeader; -import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.DefaultHandler; import org.eclipse.jetty.server.handler.HandlerList; import org.eclipse.jetty.server.handler.ResourceHandler; -import org.eclipse.jetty.util.BufferUtil; -import org.eclipse.jetty.util.URIUtil; -import org.eclipse.jetty.util.resource.ResourceFactory; /** * Fast FileServer. @@ -80,18 +74,15 @@ public static void main(String[] args) throws Exception static class FastFileHandler extends Handler.Abstract { - private final MimeTypes mimeTypes = new MimeTypes(); - private final File dir; - private FastFileHandler(File dir) { - this.dir = dir; } @Override public Request.Processor handle(Request request) throws Exception { return null; + // TODO // return (req, response, callback) -> // { // response.getHeaders().add(HttpHeader.CONTENT_TYPE, "text/html; charset=utf-8"); diff --git a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/BufferedResponseHandler.java b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/BufferedResponseHandler.java index ddc044d541be..14a8c8a20848 100644 --- a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/BufferedResponseHandler.java +++ b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/BufferedResponseHandler.java @@ -64,7 +64,7 @@ public class BufferedResponseHandler extends HandlerWrapper public BufferedResponseHandler() { _methods.include(HttpMethod.GET.asString()); - for (String type : MimeTypes.DEFAULTS.getKnownMimeTypes()) + for (String type : MimeTypes.DEFAULTS.getMimeMap().values()) { if (type.startsWith("image/") || type.startsWith("audio/") || diff --git a/jetty-ee9/jetty-ee9-openid/src/main/java/org/eclipse/jetty/ee9/security/openid/OpenIdAuthenticator.java b/jetty-ee9/jetty-ee9-openid/src/main/java/org/eclipse/jetty/ee9/security/openid/OpenIdAuthenticator.java index 6508ce3614cf..494a7bc35dd9 100644 --- a/jetty-ee9/jetty-ee9-openid/src/main/java/org/eclipse/jetty/ee9/security/openid/OpenIdAuthenticator.java +++ b/jetty-ee9/jetty-ee9-openid/src/main/java/org/eclipse/jetty/ee9/security/openid/OpenIdAuthenticator.java @@ -681,7 +681,7 @@ public UriRedirectInfo(Request request) _uri = request.getRequestURI(); _method = request.getMethod(); - if (MimeTypes.Known.FORM_ENCODED.is(request.getContentType()) && HttpMethod.POST.is(request.getMethod())) + if (MimeTypes.PreDefined.FORM_ENCODED.is(request.getContentType()) && HttpMethod.POST.is(request.getMethod())) { MultiMap formParameters = new MultiMap<>(); request.extractFormParameters(formParameters); diff --git a/jetty-ee9/jetty-ee9-proxy/src/test/java/org/eclipse/jetty/ee9/proxy/ForwardProxyTLSServerTest.java b/jetty-ee9/jetty-ee9-proxy/src/test/java/org/eclipse/jetty/ee9/proxy/ForwardProxyTLSServerTest.java index fb02479e2915..ed220f9bbb35 100644 --- a/jetty-ee9/jetty-ee9-proxy/src/test/java/org/eclipse/jetty/ee9/proxy/ForwardProxyTLSServerTest.java +++ b/jetty-ee9/jetty-ee9-proxy/src/test/java/org/eclipse/jetty/ee9/proxy/ForwardProxyTLSServerTest.java @@ -254,7 +254,7 @@ public void testTwoExchanges(SslContextFactory.Server proxyTLS) throws Exception .scheme(HttpScheme.HTTPS.asString()) .method(HttpMethod.POST) .path("/echo") - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.FORM_ENCODED.asString())) .headers(headers -> headers.put(HttpHeader.CONTENT_LENGTH, String.valueOf(contentLength))) .body(new StringRequestContent(content)) .timeout(5, TimeUnit.SECONDS) @@ -317,7 +317,7 @@ public void succeeded(Connection result) .scheme(HttpScheme.HTTPS.asString()) .method(HttpMethod.POST) .path("/echo") - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Known.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.FORM_ENCODED.asString())) .headers(headers -> headers.put(HttpHeader.CONTENT_LENGTH, String.valueOf(body2.length()))) .body(new StringRequestContent(body2)); @@ -897,7 +897,7 @@ public void process(Request request, Response response, Callback callback) throw else callback.succeeded(); } - else if (MimeTypes.Known.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE))) + else if (MimeTypes.PreDefined.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE))) { FormFields.from(request).whenComplete((fields, failure) -> { diff --git a/jetty-ee9/jetty-ee9-servlets/src/main/java/org/eclipse/jetty/ee9/servlets/IncludeExcludeBasedFilter.java b/jetty-ee9/jetty-ee9-servlets/src/main/java/org/eclipse/jetty/ee9/servlets/IncludeExcludeBasedFilter.java index 282e5d6d3562..9ee360b4f0e5 100644 --- a/jetty-ee9/jetty-ee9-servlets/src/main/java/org/eclipse/jetty/ee9/servlets/IncludeExcludeBasedFilter.java +++ b/jetty-ee9/jetty-ee9-servlets/src/main/java/org/eclipse/jetty/ee9/servlets/IncludeExcludeBasedFilter.java @@ -19,6 +19,7 @@ import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import org.eclipse.jetty.ee9.nested.Request; import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.http.pathmap.PathSpecSet; import org.eclipse.jetty.util.IncludeExclude; @@ -118,7 +119,9 @@ protected String guessMimeType(HttpServletRequest httpRequest, HttpServletRespon else { String requestUrl = httpRequest.getPathInfo(); - mimeType = MimeTypes.getDefaultMimeByExtension(requestUrl); + Request baseRequest = Request.getBaseRequest(httpRequest); + mimeType = (baseRequest == null ? MimeTypes.DEFAULTS : baseRequest.getCoreRequest().getContext().getMimeTypes()) + .getMimeByExtension(requestUrl); if (mimeType == null) { diff --git a/jetty-ee9/jetty-ee9-servlets/src/test/java/org/eclipse/jetty/ee9/servlets/TestMinGzipSizeServlet.java b/jetty-ee9/jetty-ee9-servlets/src/test/java/org/eclipse/jetty/ee9/servlets/TestMinGzipSizeServlet.java index f9a8d87bd99b..dca9cb4ce079 100644 --- a/jetty-ee9/jetty-ee9-servlets/src/test/java/org/eclipse/jetty/ee9/servlets/TestMinGzipSizeServlet.java +++ b/jetty-ee9/jetty-ee9-servlets/src/test/java/org/eclipse/jetty/ee9/servlets/TestMinGzipSizeServlet.java @@ -20,21 +20,17 @@ import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import org.eclipse.jetty.http.MimeTypes; /** * Test servlet for testing against unusual minGzip configurable. */ -@SuppressWarnings("serial") public class TestMinGzipSizeServlet extends AbstractFileContentServlet { - private MimeTypes mimeTypes; @Override public void init(ServletConfig config) throws ServletException { super.init(config); - mimeTypes = new MimeTypes(); } @Override @@ -52,7 +48,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t } else { - String mime = mimeTypes.getMimeByExtension(fileName); + String mime = request.getServletContext().getMimeType(fileName); if (mime != null) response.setContentType(mime); } diff --git a/jetty-ee9/jetty-ee9-servlets/src/test/java/org/eclipse/jetty/ee9/servlets/TestStaticMimeTypeServlet.java b/jetty-ee9/jetty-ee9-servlets/src/test/java/org/eclipse/jetty/ee9/servlets/TestStaticMimeTypeServlet.java index 0ca80a6ae174..30dcf818f903 100644 --- a/jetty-ee9/jetty-ee9-servlets/src/test/java/org/eclipse/jetty/ee9/servlets/TestStaticMimeTypeServlet.java +++ b/jetty-ee9/jetty-ee9-servlets/src/test/java/org/eclipse/jetty/ee9/servlets/TestStaticMimeTypeServlet.java @@ -14,6 +14,7 @@ package org.eclipse.jetty.ee9.servlets; import java.io.IOException; +import java.util.Objects; import jakarta.servlet.ServletConfig; import jakarta.servlet.ServletException; @@ -25,16 +26,15 @@ /** * Test servlet for testing against unusual MimeTypes and Content-Types. */ -@SuppressWarnings("serial") public class TestStaticMimeTypeServlet extends AbstractFileContentServlet { - private MimeTypes mimeTypes; + private MimeTypes.Mutable mimeTypes; @Override public void init(ServletConfig config) throws ServletException { super.init(config); - mimeTypes = new MimeTypes(); + mimeTypes = new MimeTypes.Mapped(); // Some real world, yet not terribly common, mime type mappings. mimeTypes.addMimeMapping("bz2", "application/bzip2"); mimeTypes.addMimeMapping("br", "application/brotli"); @@ -65,10 +65,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t response.setHeader("ETag", "W/etag-" + fileName); String mime = mimeTypes.getMimeByExtension(fileName); - if (mime == null) - response.setContentType("application/octet-stream"); - else - response.setContentType(mime); + response.setContentType(Objects.requireNonNullElse(mime, "application/octet-stream")); ServletOutputStream out = response.getOutputStream(); out.write(dataBytes); From 8f4a0601940e0aaff67bd9691666baf2db88842c Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Mon, 21 Nov 2022 08:50:17 +1100 Subject: [PATCH 07/14] Revert rename of enumeration to reduce size of PR. --- .../docs/programming/server/HandlerDocs.java | 2 +- .../client/HttpClientProxyProtocolTest.java | 8 ++-- .../client/util/TypedContentProviderTest.java | 2 +- .../jetty/http/CachingHttpContentFactory.java | 6 +-- .../org/eclipse/jetty/http/HttpContent.java | 6 +-- .../org/eclipse/jetty/http/MimeTypes.java | 23 +++++----- .../jetty/http/PreCompressedHttpContent.java | 4 +- .../jetty/http/ResourceHttpContent.java | 4 +- .../org/eclipse/jetty/server/FormFields.java | 4 +- .../jetty/server/handler/DefaultHandler.java | 2 +- .../jetty/server/handler/DelayedHandler.java | 2 +- .../jetty/server/handler/ErrorProcessor.java | 14 +++--- .../eclipse/jetty/server/HttpChannelTest.java | 46 +++++++++---------- .../jetty/server/HttpConnectionTest.java | 4 +- .../eclipse/jetty/server/RequestLogTest.java | 4 +- .../server/handler/ContextHandlerTest.java | 10 ++-- .../server/handler/DelayedHandlerTest.java | 2 +- .../jetty/server/handler/DumpHandler.java | 2 +- .../jetty/server/handler/HelloHandler.java | 2 +- .../HttpClientTransportDynamicTest.java | 8 ++-- .../security/openid/OpenIdAuthenticator.java | 2 +- .../ee10/proxy/ForwardProxyTLSServerTest.java | 6 +-- .../jetty/ee10/servlet/ErrorHandler.java | 16 +++---- .../ee10/servlet/ServletContextRequest.java | 6 +-- .../ee10/servlet/ServletContextResponse.java | 2 +- .../authentication/FormAuthenticator.java | 2 +- .../eclipse/jetty/ee10/servlet/FormTest.java | 2 +- .../jetty/examples/Jetty12Example.java | 2 +- .../jetty/ee9/nested/ErrorHandler.java | 16 +++---- .../org/eclipse/jetty/ee9/nested/Request.java | 8 ++-- .../eclipse/jetty/ee9/nested/Response.java | 2 +- .../jetty/ee9/nested/ContextHandlerTest.java | 2 +- .../eclipse/jetty/ee9/nested/DumpHandler.java | 2 +- .../eclipse/jetty/ee9/nested/RequestTest.java | 18 ++++---- .../authentication/FormAuthenticator.java | 2 +- .../eclipse/jetty/ee9/servlet/FormTest.java | 2 +- .../ee9/servlet/MultiPartServletTest.java | 6 +-- 37 files changed, 126 insertions(+), 125 deletions(-) diff --git a/documentation/jetty-documentation/src/main/java/org/eclipse/jetty/docs/programming/server/HandlerDocs.java b/documentation/jetty-documentation/src/main/java/org/eclipse/jetty/docs/programming/server/HandlerDocs.java index fcce685f08ed..4388c1112956 100644 --- a/documentation/jetty-documentation/src/main/java/org/eclipse/jetty/docs/programming/server/HandlerDocs.java +++ b/documentation/jetty-documentation/src/main/java/org/eclipse/jetty/docs/programming/server/HandlerDocs.java @@ -224,7 +224,7 @@ public Request.Processor handle(Request request) throws Exception return (req, res, callback) -> { res.setStatus(200); - res.getHeaders().add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_HTML_UTF_8.asString()); + res.getHeaders().add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_HTML_UTF_8.asString()); Content.Sink.write(res, true, index.toString(), callback); }; } diff --git a/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientProxyProtocolTest.java b/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientProxyProtocolTest.java index 2e4598560204..dcde2d567b74 100644 --- a/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientProxyProtocolTest.java +++ b/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientProxyProtocolTest.java @@ -90,7 +90,7 @@ public void testClientProxyProtocolV1() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN.asString()); Content.Sink.write(response, true, String.valueOf(Request.getRemotePort(request)), callback); } }); @@ -128,7 +128,7 @@ public void testClientProxyProtocolV2() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN.asString()); Content.Sink.write(response, true, String.valueOf(Request.getRemotePort(request)), callback); } }); @@ -177,7 +177,7 @@ public void process(Request request, Response response, Callback callback) assertNotNull(proxyEndPoint.getTLV(typeTLS)); assertEquals(tlsVersion, proxyEndPoint.getAttribute(ProxyConnectionFactory.TLS_VERSION)); } - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN.asString()); Content.Sink.write(response, true, String.valueOf(Request.getRemotePort(request)), callback); } }); @@ -223,7 +223,7 @@ public void testProxyProtocolWrappingHTTPProxy() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN.asString()); Content.Sink.write(response, true, String.valueOf(Request.getRemotePort(request)), callback); } }); diff --git a/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/util/TypedContentProviderTest.java b/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/util/TypedContentProviderTest.java index fb4d96ba3d8c..de5a1f97217d 100644 --- a/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/util/TypedContentProviderTest.java +++ b/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/util/TypedContentProviderTest.java @@ -54,7 +54,7 @@ public void testFormContentProvider(Scenario scenario) throws Exception protected void service(Request request, Response response) { assertEquals("POST", request.getMethod()); - assertEquals(MimeTypes.PreDefined.FORM_ENCODED.asString(), request.getHeaders().get(HttpHeader.CONTENT_TYPE)); + assertEquals(MimeTypes.Type.FORM_ENCODED.asString(), request.getHeaders().get(HttpHeader.CONTENT_TYPE)); FormFields.from(request).whenComplete((fields, failure) -> { assertEquals(value1, fields.get(name1).getValue()); diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/CachingHttpContentFactory.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/CachingHttpContentFactory.java index 9a77910a9f3c..4718a623ba03 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/CachingHttpContentFactory.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/CachingHttpContentFactory.java @@ -297,7 +297,7 @@ protected class CachedHttpContent extends HttpContent.Wrapper implements Caching private final Set _compressedFormats; private final String _lastModifiedValue; private final String _characterEncoding; - private final MimeTypes.PreDefined _mimeType; + private final MimeTypes.Type _mimeType; private final HttpField _contentLength; private final Instant _lastModifiedInstant; private final HttpField _lastModified; @@ -445,7 +445,7 @@ public String getCharacterEncoding() } @Override - public MimeTypes.PreDefined getMimeType() + public MimeTypes.Type getMimeType() { return _mimeType; } @@ -530,7 +530,7 @@ public String getCharacterEncoding() } @Override - public MimeTypes.PreDefined getMimeType() + public MimeTypes.Type getMimeType() { return null; } diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpContent.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpContent.java index eebaf2130b2c..9a5f5be38786 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpContent.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpContent.java @@ -18,7 +18,7 @@ import java.time.Instant; import java.util.Set; -import org.eclipse.jetty.http.MimeTypes.PreDefined; +import org.eclipse.jetty.http.MimeTypes.Type; import org.eclipse.jetty.util.resource.Resource; /** @@ -39,7 +39,7 @@ public interface HttpContent String getCharacterEncoding(); - PreDefined getMimeType(); + Type getMimeType(); HttpField getContentEncoding(); @@ -121,7 +121,7 @@ public String getCharacterEncoding() } @Override - public PreDefined getMimeType() + public Type getMimeType() { return _delegate.getMimeType(); } diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java index 6f8ab6812931..c1a7670667f4 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java @@ -37,7 +37,8 @@ public interface MimeTypes { Logger LOG = LoggerFactory.getLogger(MimeTypes.class); - enum PreDefined + /** Enumeration of predefined MimeTypes. This is not exhaustive */ + enum Type { FORM_ENCODED("application/x-www-form-urlencoded"), MESSAGE_HTTP("message/http"), @@ -99,13 +100,13 @@ public HttpField getContentTypeField(Charset charset) APPLICATION_JSON_UTF_8("application/json;charset=utf-8", APPLICATION_JSON); private final String _string; - private final PreDefined _base; + private final Type _base; private final Charset _charset; private final String _charsetString; private final boolean _assumedCharset; private final HttpField _field; - PreDefined(String s) + Type(String s) { _string = s; _base = this; @@ -115,7 +116,7 @@ public HttpField getContentTypeField(Charset charset) _field = new PreEncodedHttpField(HttpHeader.CONTENT_TYPE, _string); } - PreDefined(String s, PreDefined base) + Type(String s, Type base) { _string = s; _base = base; @@ -126,7 +127,7 @@ public HttpField getContentTypeField(Charset charset) _field = new PreEncodedHttpField(HttpHeader.CONTENT_TYPE, _string); } - PreDefined(String s, Charset cs) + Type(String s, Charset cs) { _string = s; _base = this; @@ -179,18 +180,18 @@ public HttpField getContentTypeField(Charset charset) return new HttpField(HttpHeader.CONTENT_TYPE, getContentTypeWithoutCharset(_string) + ";charset=" + charset.name()); } - public PreDefined getBaseType() + public Type getBaseType() { return _base; } } - Index CACHE = new Index.Builder() + Index CACHE = new Index.Builder() .caseSensitive(false) .withAll(() -> { - Map result = new HashMap<>(); - for (PreDefined type : PreDefined.values()) + Map result = new HashMap<>(); + for (Type type : Type.values()) { String key1 = type.toString(); result.put(key1, type); @@ -270,7 +271,7 @@ interface Mutable extends MimeTypes MimeTypes DEFAULTS = new MimeTypes.Base() { { - for (PreDefined type : PreDefined.values()) + for (Type type : Type.values()) { if (type.isCharsetAssumed()) _assumedEncodings.put(type.asString(), type.getCharsetString()); @@ -448,7 +449,7 @@ public String addAssumed(String contentType, String encoding) private static String normalizeMimeType(String type) { - PreDefined t = CACHE.get(type); + Type t = CACHE.get(type); if (t != null) return t.asString(); diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/PreCompressedHttpContent.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/PreCompressedHttpContent.java index 3020076a55ad..caa4bfb8513d 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/PreCompressedHttpContent.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/PreCompressedHttpContent.java @@ -17,7 +17,7 @@ import java.time.Instant; import java.util.Set; -import org.eclipse.jetty.http.MimeTypes.PreDefined; +import org.eclipse.jetty.http.MimeTypes.Type; import org.eclipse.jetty.util.resource.Resource; public class PreCompressedHttpContent implements HttpContent @@ -109,7 +109,7 @@ public String getCharacterEncoding() } @Override - public PreDefined getMimeType() + public Type getMimeType() { return _content.getMimeType(); } diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/ResourceHttpContent.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/ResourceHttpContent.java index d27204958b99..75085076b78d 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/ResourceHttpContent.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/ResourceHttpContent.java @@ -18,7 +18,7 @@ import java.time.Instant; import java.util.Set; -import org.eclipse.jetty.http.MimeTypes.PreDefined; +import org.eclipse.jetty.http.MimeTypes.Type; import org.eclipse.jetty.util.resource.Resource; /** @@ -73,7 +73,7 @@ public String getCharacterEncoding() } @Override - public PreDefined getMimeType() + public Type getMimeType() { return _contentType == null ? null : MimeTypes.CACHE.get(MimeTypes.getContentTypeWithoutCharset(_contentType)); } diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/FormFields.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/FormFields.java index 47bb120b136b..64456f038015 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/FormFields.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/FormFields.java @@ -50,8 +50,8 @@ public static Charset getFormEncodedCharset(Request request) return null; // TODO mimeTypes from context - MimeTypes.PreDefined type = MimeTypes.CACHE.get(MimeTypes.getContentTypeWithoutCharset(contentType)); - if (MimeTypes.PreDefined.FORM_ENCODED != type) + MimeTypes.Type type = MimeTypes.CACHE.get(MimeTypes.getContentTypeWithoutCharset(contentType)); + if (MimeTypes.Type.FORM_ENCODED != type) return null; String cs = MimeTypes.getCharsetFromContentType(contentType); diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DefaultHandler.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DefaultHandler.java index 0a00037fc6bc..805649d98715 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DefaultHandler.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DefaultHandler.java @@ -134,7 +134,7 @@ public void process(Request request, Response response, Callback callback) throw } response.setStatus(HttpStatus.NOT_FOUND_404); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_HTML_UTF_8.toString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_HTML_UTF_8.toString()); try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); OutputStreamWriter writer = new OutputStreamWriter(outputStream, UTF_8)) diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DelayedHandler.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DelayedHandler.java index d1fbc249826c..163bfde8d14f 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DelayedHandler.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/DelayedHandler.java @@ -160,7 +160,7 @@ protected Request.Processor delayed(Request request, Request.Processor processor return processor; String contentTypeValue = HttpField.valueParameters(contentType, null); - if (!MimeTypes.PreDefined.MULTIPART_FORM_DATA.is(contentTypeValue)) + if (!MimeTypes.Type.MULTIPART_FORM_DATA.is(contentTypeValue)) return processor; String boundary = MultiPart.extractBoundary(contentType); if (boundary == null) diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ErrorProcessor.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ErrorProcessor.java index 23341c46da16..7ee3d2d36c9c 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ErrorProcessor.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ErrorProcessor.java @@ -36,7 +36,7 @@ import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpStatus; -import org.eclipse.jetty.http.MimeTypes.PreDefined; +import org.eclipse.jetty.http.MimeTypes.Type; import org.eclipse.jetty.http.PreEncodedHttpField; import org.eclipse.jetty.http.QuotedQualityCSV; import org.eclipse.jetty.io.ByteBufferOutputStream; @@ -130,7 +130,7 @@ protected void generateResponse(Request request, Response response, int code, St callback.succeeded(); return; } - acceptable = Collections.singletonList(PreDefined.TEXT_HTML.asString()); + acceptable = Collections.singletonList(Type.TEXT_HTML.asString()); } List charsets = request.getHeaders().getQualityCSV(HttpHeader.ACCEPT_CHARSET).stream() .map(s -> @@ -168,14 +168,14 @@ protected void generateResponse(Request request, Response response, int code, St protected boolean generateAcceptableResponse(Request request, Response response, Callback callback, String contentType, List charsets, int code, String message, Throwable cause) throws IOException { - PreDefined type; + Type type; Charset charset; switch (contentType) { case "text/html": case "text/*": case "*/*": - type = PreDefined.TEXT_HTML; + type = Type.TEXT_HTML; charset = charsets.stream().findFirst().orElse(StandardCharsets.ISO_8859_1); break; @@ -187,11 +187,11 @@ else if (charsets.contains(StandardCharsets.ISO_8859_1)) charset = StandardCharsets.ISO_8859_1; else return false; - type = PreDefined.TEXT_JSON.is(contentType) ? PreDefined.TEXT_JSON : PreDefined.APPLICATION_JSON; + type = Type.TEXT_JSON.is(contentType) ? Type.TEXT_JSON : Type.APPLICATION_JSON; break; case "text/plain": - type = PreDefined.TEXT_PLAIN; + type = Type.TEXT_PLAIN; charset = charsets.stream().findFirst().orElse(StandardCharsets.ISO_8859_1); break; @@ -428,7 +428,7 @@ public ByteBuffer badMessageError(int status, String reason, HttpFields.Mutable reason = HttpStatus.getMessage(status); if (HttpStatus.hasNoBody(status)) return BufferUtil.EMPTY_BUFFER; - fields.put(HttpHeader.CONTENT_TYPE, PreDefined.TEXT_HTML_8859_1.asString()); + fields.put(HttpHeader.CONTENT_TYPE, Type.TEXT_HTML_8859_1.asString()); return BufferUtil.toBuffer("

Bad Message " + status + "

reason: " + reason + "
"); } diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpChannelTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpChannelTest.java index 64d890c3143e..bc1389c081c9 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpChannelTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpChannelTest.java @@ -104,7 +104,7 @@ public void testSimpleGET() throws Exception assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); } @@ -140,7 +140,7 @@ public void send(MetaData.Request request, MetaData.Response response, boolean l assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); } @@ -153,7 +153,7 @@ public void testRecursiveGET() throws Exception public void process(Request request, Response response, Callback callback) { response.setStatus(200); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_UTF_8.asString()); AtomicInteger count = new AtomicInteger(10000); Callback writer = new Callback() { @@ -208,7 +208,7 @@ public void failed(Throwable x) assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); assertThat(stream.getResponseContent().remaining(), equalTo(10000)); } @@ -263,7 +263,7 @@ public void testEchoPOST() throws Exception HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_8859_1.asString()) .asImmutable(); stream.addContent(body, true); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); @@ -275,7 +275,7 @@ public void testEchoPOST() throws Exception assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); } @@ -307,7 +307,7 @@ public Content.Chunk read() HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); @@ -318,7 +318,7 @@ public Content.Chunk read() assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); } @@ -348,7 +348,7 @@ public void send(MetaData.Request request, MetaData.Response response, boolean l HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); @@ -388,7 +388,7 @@ public void send(MetaData.Request request, MetaData.Response response, boolean l assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); } @@ -711,7 +711,7 @@ public void testUnconsumedContentAvailable() throws Exception HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); stream.addContent(body, true); @@ -723,7 +723,7 @@ public void testUnconsumedContentAvailable() throws Exception assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); assertThat(stream.getResponseHeaders().get(HttpHeader.CONNECTION), nullValue()); @@ -739,7 +739,7 @@ public void testUnconsumedContentUnavailable() throws Exception public void process(Request request, Response response, Callback callback) { response.setStatus(200); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_UTF_8.asString()); response.getHeaders().putLongField(HttpHeader.CONTENT_LENGTH, 5); response.write(false, null, Callback.from(() -> response.write(true, BufferUtil.toBuffer("12345"), callback))); } @@ -765,7 +765,7 @@ public void process(Request request, Response response, Callback callback) assertThat(stream.getFailure().getMessage(), containsString("Content not consumed")); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo("12345")); assertThat(stream.getResponseHeaders().get(HttpHeader.CONNECTION), nullValue()); @@ -782,7 +782,7 @@ public void process(Request request, Response response, Callback callback) { response.setStatus(200); response.getHeaders().add(HttpHeader.CONNECTION, HttpHeaderValue.CLOSE.asString()); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_UTF_8.asString()); response.getHeaders().putLongField(HttpHeader.CONTENT_LENGTH, 5); response.write(false, null, Callback.from(() -> response.write(true, BufferUtil.toBuffer("12345"), callback))); } @@ -807,7 +807,7 @@ public void process(Request request, Response response, Callback callback) assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo("12345")); assertThat(stream.getResponseHeaders().get(HttpHeader.CONNECTION), equalTo(HttpHeaderValue.CLOSE.asString())); @@ -830,7 +830,7 @@ public void testPersistent() throws Exception HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); assertThat(stream.addContent(body, true), nullValue()); @@ -842,7 +842,7 @@ public void testPersistent() throws Exception assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); // 2nd request @@ -893,7 +893,7 @@ public void send(MetaData.Request request, MetaData.Response response, boolean l HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) - .add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); assertThat(stream.addContent(BufferUtil.toBuffer(parts[0]), false), nullValue()); @@ -970,7 +970,7 @@ public void failed(Throwable x) assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); Iterator timeline = history.iterator(); @@ -1035,7 +1035,7 @@ public Content.Chunk read() .add(HttpHeader.HOST, "localhost") .putLongField(HttpHeader.CONTENT_LENGTH, body.remaining()) .put(HttpHeader.TRAILER, "Some") - .add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_8859_1.asString()) .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, 0); @@ -1046,7 +1046,7 @@ public Content.Chunk read() assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(message)); HttpFields trailersRcv = stream.getResponseTrailers(); @@ -1255,7 +1255,7 @@ public void send(MetaData.Request request, MetaData.Response response, boolean l HttpFields fields = HttpFields.build() .add(HttpHeader.HOST, "localhost") - .add(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_8859_1.asString()) + .add(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_8859_1.asString()) .add(HttpHeader.CONTENT_LENGTH, "12") .asImmutable(); MetaData.Request request = new MetaData.Request("POST", HttpURI.from("http://localhost/"), HttpVersion.HTTP_1_1, fields, -1); diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java index 84be111429f7..e4ba509075f9 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java @@ -1144,7 +1144,7 @@ public void testOversizedResponse() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE.toString(), MimeTypes.PreDefined.TEXT_HTML.toString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE.toString(), MimeTypes.Type.TEXT_HTML.toString()); response.getHeaders().put("LongStr", longstr); response.write(false, BufferUtil.toBuffer("

FOO

"), Callback.from(callback::succeeded, t -> @@ -1193,7 +1193,7 @@ public void testAllowedLargeResponse() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE.toString(), MimeTypes.PreDefined.TEXT_HTML.toString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE.toString(), MimeTypes.Type.TEXT_HTML.toString()); response.getHeaders().put("LongStr", longstr); response.write(false, diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/RequestLogTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/RequestLogTest.java index ec01c0cbea5c..69a3ffb0cf29 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/RequestLogTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/RequestLogTest.java @@ -180,7 +180,7 @@ public void testNormalPostFormRequest(String requestPath) throws Exception StringBuilder req = new StringBuilder(); req.append("POST ").append(requestPath).append(" HTTP/1.1\r\n"); req.append("Host: ").append(baseURI.getRawAuthority()).append("\r\n"); - req.append("Content-Type: ").append(MimeTypes.PreDefined.FORM_ENCODED).append("\r\n"); + req.append("Content-Type: ").append(MimeTypes.Type.FORM_ENCODED).append("\r\n"); req.append("Content-Length: ").append(bufForm.length).append("\r\n"); req.append("Connection: close\r\n"); req.append("\r\n"); @@ -266,7 +266,7 @@ public void testBadPostFormRequest() throws Exception StringBuilder req = new StringBuilder(); req.append("POST /hello HTTP/1.1\r\n"); req.append("Host: ").append(baseURI.getRawAuthority()).append("\r\n"); - req.append("Content-Type: ").append(MimeTypes.PreDefined.FORM_ENCODED).append("\r\n"); + req.append("Content-Type: ").append(MimeTypes.Type.FORM_ENCODED).append("\r\n"); req.append("Content-Length: ").append(bufForm.length).append("\r\n"); // add extra Transfer-Encoding: chunked header, making the POST request invalid per HTTP spec req.append("Transfer-Encoding: chunked\r\n"); diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ContextHandlerTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ContextHandlerTest.java index bb3acef5c2ab..74b8b61ef258 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ContextHandlerTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ContextHandlerTest.java @@ -135,7 +135,7 @@ public void testSimpleGET() throws Exception assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); // The original fields have been recycled. assertThat(stream.getResponse().getFields().size(), equalTo(0)); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); @@ -157,7 +157,7 @@ public void testSetAvailable() throws Exception channel.onRequest(request).run(); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); _contextHandler.setAvailable(false); @@ -167,7 +167,7 @@ public void testSetAvailable() throws Exception channel.onRequest(request).run(); assertThat(stream.getResponse().getStatus(), equalTo(503)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_HTML_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_HTML_8859_1.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), containsString("Service Unavailable")); _contextHandler.setAvailable(true); @@ -177,7 +177,7 @@ public void testSetAvailable() throws Exception channel.onRequest(request).run(); assertThat(stream.getResponse().getStatus(), equalTo(200)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_PLAIN_UTF_8.asString())); assertThat(BufferUtil.toString(stream.getResponseContent()), equalTo(helloHandler.getMessage())); @@ -527,7 +527,7 @@ protected void writeErrorHtmlBody(Request request, Writer writer, int code, Stri assertThat(stream.getFailure(), nullValue()); assertThat(stream.getResponse(), notNullValue()); assertThat(stream.getResponse().getStatus(), equalTo(500)); - assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.PreDefined.TEXT_HTML_8859_1.asString())); + assertThat(stream.getResponseHeaders().get(HttpHeader.CONTENT_TYPE), equalTo(MimeTypes.Type.TEXT_HTML_8859_1.asString())); assertThat(stream.getResponse().getFields().size(), equalTo(0)); assertThat(BufferUtil.toString(stream.getResponseContent()), containsString("

Context: /ctx

")); assertThat(BufferUtil.toString(stream.getResponseContent()), containsString("java.lang.RuntimeException: Testing")); diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DelayedHandlerTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DelayedHandlerTest.java index cdd2c2e1977a..b634b09d91bf 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DelayedHandlerTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DelayedHandlerTest.java @@ -433,7 +433,7 @@ public void process(Request request, Response response, Callback callback) throw Content-Type: %s Content-Length: 22 - """.formatted(MimeTypes.PreDefined.FORM_ENCODED).getBytes(StandardCharsets.UTF_8)); + """.formatted(MimeTypes.Type.FORM_ENCODED).getBytes(StandardCharsets.UTF_8)); output.flush(); assertFalse(processing.await(100, TimeUnit.MILLISECONDS)); diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DumpHandler.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DumpHandler.java index c9a578defe44..ed3c2f0aa495 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DumpHandler.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DumpHandler.java @@ -141,7 +141,7 @@ public void process(Request request, Response response, Callback callback) throw return; } - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_HTML.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_HTML.asString()); ByteArrayOutputStream buf = new ByteArrayOutputStream(2048); Writer writer = new OutputStreamWriter(buf, StandardCharsets.ISO_8859_1); diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/HelloHandler.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/HelloHandler.java index 31972071b197..efc88a7ccfa8 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/HelloHandler.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/HelloHandler.java @@ -49,7 +49,7 @@ public String getMessage() public void process(Request request, Response response, Callback callback) throws Exception { response.setStatus(200); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_UTF_8.asString()); Content.Sink.write(response, true, _message, callback); } } diff --git a/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/HttpClientTransportDynamicTest.java b/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/HttpClientTransportDynamicTest.java index 824350fdc9d8..263769a5931d 100644 --- a/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/HttpClientTransportDynamicTest.java +++ b/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/HttpClientTransportDynamicTest.java @@ -401,7 +401,7 @@ public void testDestinationClientConnectionFactoryWrapped() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN.asString()); Content.Sink.write(response, true, String.valueOf(Request.getRemotePort(request)), callback); } }); @@ -498,7 +498,7 @@ public void testHTTP11UpgradeToH2C() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_UTF_8.asString()); Content.Sink.write(response, true, content, callback); } }); @@ -573,7 +573,7 @@ public void testHTTP11UpgradeToH2CWithForwardProxy() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_UTF_8.asString()); Content.Sink.write(response, true, content, callback); } }); @@ -612,7 +612,7 @@ public void testHTTP11UpgradeToH2COverTLS() throws Exception @Override public void process(Request request, Response response, Callback callback) { - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_UTF_8.asString()); Content.Sink.write(response, true, content, callback); } }); diff --git a/jetty-ee10/jetty-ee10-openid/src/main/java/org/eclipse/jetty/ee10/security/openid/OpenIdAuthenticator.java b/jetty-ee10/jetty-ee10-openid/src/main/java/org/eclipse/jetty/ee10/security/openid/OpenIdAuthenticator.java index 982e4be71c1f..e34e8111b61c 100644 --- a/jetty-ee10/jetty-ee10-openid/src/main/java/org/eclipse/jetty/ee10/security/openid/OpenIdAuthenticator.java +++ b/jetty-ee10/jetty-ee10-openid/src/main/java/org/eclipse/jetty/ee10/security/openid/OpenIdAuthenticator.java @@ -711,7 +711,7 @@ public UriRedirectInfo(Request request) _method = request.getMethod(); // TODO: - if (MimeTypes.PreDefined.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE)) && HttpMethod.POST.is(request.getMethod())) + if (MimeTypes.Type.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE)) && HttpMethod.POST.is(request.getMethod())) { MultiMap formParameters = new MultiMap<>(); // request.extractFormParameters(formParameters); diff --git a/jetty-ee10/jetty-ee10-proxy/src/test/java/org/eclipse/jetty/ee10/proxy/ForwardProxyTLSServerTest.java b/jetty-ee10/jetty-ee10-proxy/src/test/java/org/eclipse/jetty/ee10/proxy/ForwardProxyTLSServerTest.java index a8fa7ccf8fff..58a7915d77a6 100644 --- a/jetty-ee10/jetty-ee10-proxy/src/test/java/org/eclipse/jetty/ee10/proxy/ForwardProxyTLSServerTest.java +++ b/jetty-ee10/jetty-ee10-proxy/src/test/java/org/eclipse/jetty/ee10/proxy/ForwardProxyTLSServerTest.java @@ -257,7 +257,7 @@ public void testTwoExchanges(SslContextFactory.Server proxyTLS) throws Exception .scheme(HttpScheme.HTTPS.asString()) .method(HttpMethod.POST) .path("/echo") - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.FORM_ENCODED.asString())) .headers(headers -> headers.put(HttpHeader.CONTENT_LENGTH, String.valueOf(contentLength))) .body(new StringRequestContent(content)) .timeout(5, TimeUnit.SECONDS) @@ -320,7 +320,7 @@ public void succeeded(Connection result) .scheme(HttpScheme.HTTPS.asString()) .method(HttpMethod.POST) .path("/echo") - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.FORM_ENCODED.asString())) .headers(headers -> headers.put(HttpHeader.CONTENT_LENGTH, String.valueOf(body2.length()))) .body(new StringRequestContent(body2)); @@ -1022,7 +1022,7 @@ public void process(Request request, Response response, Callback callback) throw else callback.succeeded(); } - else if (MimeTypes.PreDefined.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE))) + else if (MimeTypes.Type.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE))) { FormFields.from(request).whenComplete((fields, failure) -> { diff --git a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ErrorHandler.java b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ErrorHandler.java index 6cb36bba474d..9cd28b5fab00 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ErrorHandler.java +++ b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ErrorHandler.java @@ -150,7 +150,7 @@ protected void generateAcceptableResponse(ServletContextRequest baseRequest, Htt if (acceptable.isEmpty() && !baseRequest.getHeaders().contains(HttpHeader.ACCEPT)) { - generateAcceptableResponse(baseRequest, request, response, code, message, MimeTypes.PreDefined.TEXT_HTML.asString()); + generateAcceptableResponse(baseRequest, request, response, code, message, MimeTypes.Type.TEXT_HTML.asString()); } else { @@ -256,26 +256,26 @@ protected void generateAcceptableResponse(ServletContextRequest baseRequest, Htt return; } - MimeTypes.PreDefined type; + MimeTypes.Type type; switch (contentType) { case "text/html": case "text/*": case "*/*": - type = MimeTypes.PreDefined.TEXT_HTML; + type = MimeTypes.Type.TEXT_HTML; if (charset == null) charset = StandardCharsets.ISO_8859_1; break; case "text/json": case "application/json": - type = MimeTypes.PreDefined.TEXT_JSON; + type = MimeTypes.Type.TEXT_JSON; if (charset == null) charset = StandardCharsets.UTF_8; break; case "text/plain": - type = MimeTypes.PreDefined.TEXT_PLAIN; + type = MimeTypes.Type.TEXT_PLAIN; if (charset == null) charset = StandardCharsets.ISO_8859_1; break; @@ -300,7 +300,7 @@ protected void generateAcceptableResponse(ServletContextRequest baseRequest, Htt switch (type) { case TEXT_HTML: - response.setContentType(MimeTypes.PreDefined.TEXT_HTML.asString()); + response.setContentType(MimeTypes.Type.TEXT_HTML.asString()); response.setCharacterEncoding(charset.name()); request.setAttribute(ERROR_CHARSET, charset); handleErrorPage(request, writer, code, message); @@ -310,7 +310,7 @@ protected void generateAcceptableResponse(ServletContextRequest baseRequest, Htt writeErrorJson(request, writer, code, message); break; case TEXT_PLAIN: - response.setContentType(MimeTypes.PreDefined.TEXT_PLAIN.asString()); + response.setContentType(MimeTypes.Type.TEXT_PLAIN.asString()); response.setCharacterEncoding(charset.name()); writeErrorPlain(request, writer, code, message); break; @@ -522,7 +522,7 @@ public ByteBuffer badMessageError(int status, String reason, HttpFields.Mutable reason = HttpStatus.getMessage(status); if (HttpStatus.hasNoBody(status)) return BufferUtil.EMPTY_BUFFER; - fields.put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_HTML_8859_1.asString()); + fields.put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_HTML_8859_1.asString()); return BufferUtil.toBuffer("

Bad Message " + status + "

reason: " + reason + "
"); } diff --git a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextRequest.java b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextRequest.java index 6a6052b77ea2..748d5703c78f 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextRequest.java +++ b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextRequest.java @@ -787,8 +787,8 @@ public void logout() throws ServletException public Collection getParts() throws IOException, ServletException { String contentType = getContentType(); - if (contentType == null || !MimeTypes.PreDefined.MULTIPART_FORM_DATA.is(HttpField.valueParameters(contentType, null))) - throw new ServletException("Unsupported Content-Type [%s], expected [%s]".formatted(contentType, MimeTypes.PreDefined.MULTIPART_FORM_DATA.asString())); + if (contentType == null || !MimeTypes.Type.MULTIPART_FORM_DATA.is(HttpField.valueParameters(contentType, null))) + throw new ServletException("Unsupported Content-Type [%s], expected [%s]".formatted(contentType, MimeTypes.Type.MULTIPART_FORM_DATA.asString())); if (_parts == null) _parts = ServletMultiPartFormData.from(this); return _parts.getParts(); @@ -874,7 +874,7 @@ public String getCharacterEncoding() String contentType = getContentType(); if (contentType != null) { - MimeTypes.PreDefined mime = MimeTypes.CACHE.get(contentType); + MimeTypes.Type mime = MimeTypes.CACHE.get(contentType); String charset = (mime == null || mime.getCharset() == null) ? MimeTypes.getCharsetFromContentType(contentType) : mime.getCharset().toString(); if (charset != null) _characterEncoding = charset; diff --git a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextResponse.java b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextResponse.java index 9b0fdd8314e9..5140e6e616b6 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextResponse.java +++ b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletContextResponse.java @@ -77,7 +77,7 @@ public enum OutputType private final ServletContextRequest _request; private String _characterEncoding; private String _contentType; - private MimeTypes.PreDefined _mimeType; + private MimeTypes.Type _mimeType; private Locale _locale; private EncodingFrom _encodingFrom = EncodingFrom.NOT_SET; private OutputType _outputType = OutputType.NONE; diff --git a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/security/authentication/FormAuthenticator.java b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/security/authentication/FormAuthenticator.java index a7c33047ed79..8ae24f46a722 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/security/authentication/FormAuthenticator.java +++ b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/security/authentication/FormAuthenticator.java @@ -353,7 +353,7 @@ public Authentication validateRequest(Request req, Response res, Callback callba session.setAttribute(__J_URI, req.getHttpURI()); session.setAttribute(__J_METHOD, req.getMethod()); - if (MimeTypes.PreDefined.FORM_ENCODED.is(servletApiRequest.getContentType()) && HttpMethod.POST.is(req.getMethod())) + if (MimeTypes.Type.FORM_ENCODED.is(servletApiRequest.getContentType()) && HttpMethod.POST.is(req.getMethod())) { session.setAttribute(__J_POST, servletApiRequest.getContentParameters()); } diff --git a/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/FormTest.java b/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/FormTest.java index c0c00b702650..ce9a525aa022 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/FormTest.java +++ b/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/FormTest.java @@ -130,7 +130,7 @@ protected void service(HttpServletRequest request, HttpServletResponse response) ContentResponse response = client.newRequest("localhost", connector.getLocalPort()) .method(HttpMethod.POST) .path(contextPath + servletPath) - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.FORM_ENCODED.asString())) .body(content) .onRequestBegin(request -> { diff --git a/jetty-ee10/jetty-examples/src/test/java/org/eclipse/jetty/examples/Jetty12Example.java b/jetty-ee10/jetty-examples/src/test/java/org/eclipse/jetty/examples/Jetty12Example.java index 718353d77a4e..65641f6e3272 100644 --- a/jetty-ee10/jetty-examples/src/test/java/org/eclipse/jetty/examples/Jetty12Example.java +++ b/jetty-ee10/jetty-examples/src/test/java/org/eclipse/jetty/examples/Jetty12Example.java @@ -45,7 +45,7 @@ public void process(org.eclipse.jetty.server.Request request, Callback callback) throws Exception { response.setStatus(200); - response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_PLAIN_UTF_8.asString()); + response.getHeaders().put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_PLAIN_UTF_8.asString()); Content.Sink.write(response, true, "the handler says Hello World", callback); } }); diff --git a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ErrorHandler.java b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ErrorHandler.java index a52d5534e990..da03475014b0 100644 --- a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ErrorHandler.java +++ b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/ErrorHandler.java @@ -142,7 +142,7 @@ protected void generateAcceptableResponse(Request baseRequest, HttpServletReques if (acceptable.isEmpty() && !baseRequest.getHttpFields().contains(HttpHeader.ACCEPT)) { - generateAcceptableResponse(baseRequest, request, response, code, message, MimeTypes.PreDefined.TEXT_HTML.asString()); + generateAcceptableResponse(baseRequest, request, response, code, message, MimeTypes.Type.TEXT_HTML.asString()); } else { @@ -251,26 +251,26 @@ protected void generateAcceptableResponse(Request baseRequest, HttpServletReques return; } - MimeTypes.PreDefined type; + MimeTypes.Type type; switch (contentType) { case "text/html": case "text/*": case "*/*": - type = MimeTypes.PreDefined.TEXT_HTML; + type = MimeTypes.Type.TEXT_HTML; if (charset == null) charset = StandardCharsets.ISO_8859_1; break; case "text/json": case "application/json": - type = MimeTypes.PreDefined.TEXT_JSON; + type = MimeTypes.Type.TEXT_JSON; if (charset == null) charset = StandardCharsets.UTF_8; break; case "text/plain": - type = MimeTypes.PreDefined.TEXT_PLAIN; + type = MimeTypes.Type.TEXT_PLAIN; if (charset == null) charset = StandardCharsets.ISO_8859_1; break; @@ -291,7 +291,7 @@ protected void generateAcceptableResponse(Request baseRequest, HttpServletReques switch (type) { case TEXT_HTML: - response.setContentType(MimeTypes.PreDefined.TEXT_HTML.asString()); + response.setContentType(MimeTypes.Type.TEXT_HTML.asString()); response.setCharacterEncoding(charset.name()); request.setAttribute(ERROR_CHARSET, charset); handleErrorPage(request, writer, code, message); @@ -301,7 +301,7 @@ protected void generateAcceptableResponse(Request baseRequest, HttpServletReques writeErrorJson(request, writer, code, message); break; case TEXT_PLAIN: - response.setContentType(MimeTypes.PreDefined.TEXT_PLAIN.asString()); + response.setContentType(MimeTypes.Type.TEXT_PLAIN.asString()); response.setCharacterEncoding(charset.name()); writeErrorPlain(request, writer, code, message); break; @@ -522,7 +522,7 @@ public ByteBuffer badMessageError(int status, String reason, HttpFields.Mutable reason = HttpStatus.getMessage(status); if (HttpStatus.hasNoBody(status)) return BufferUtil.EMPTY_BUFFER; - fields.put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.TEXT_HTML_8859_1.asString()); + fields.put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.TEXT_HTML_8859_1.asString()); return BufferUtil.toBuffer("

Bad Message " + status + "

reason: " + reason + "
"); } diff --git a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Request.java b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Request.java index ab0048237665..8fae82aea9cb 100644 --- a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Request.java +++ b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Request.java @@ -467,7 +467,7 @@ private void extractContentParameters() if (contentLength != 0 && _inputState == INPUT_NONE) { String baseType = HttpField.valueParameters(contentType, null); - if (MimeTypes.PreDefined.FORM_ENCODED.is(baseType) && + if (MimeTypes.Type.FORM_ENCODED.is(baseType) && _channel.getHttpConfiguration().isFormEncodedMethod(getMethod())) { if (_metaData != null && !isContentEncodingSupported()) @@ -477,7 +477,7 @@ private void extractContentParameters() extractFormParameters(_contentParameters); } - else if (MimeTypes.PreDefined.MULTIPART_FORM_DATA.is(baseType) && + else if (MimeTypes.Type.MULTIPART_FORM_DATA.is(baseType) && getAttribute(__MULTIPART_CONFIG_ELEMENT) != null && _multiParts == null) { @@ -651,7 +651,7 @@ public String getCharacterEncoding() String contentType = getContentType(); if (contentType != null) { - MimeTypes.PreDefined mime = MimeTypes.CACHE.get(contentType); + MimeTypes.Type mime = MimeTypes.CACHE.get(contentType); String charset = (mime == null || mime.getCharset() == null) ? MimeTypes.getCharsetFromContentType(contentType) : mime.getCharset().toString(); if (charset != null) _characterEncoding = charset; @@ -2013,7 +2013,7 @@ public Part getPart(String name) throws IOException, ServletException public Collection getParts() throws IOException, ServletException { String contentType = getContentType(); - if (contentType == null || !MimeTypes.PreDefined.MULTIPART_FORM_DATA.is(HttpField.valueParameters(contentType, null))) + if (contentType == null || !MimeTypes.Type.MULTIPART_FORM_DATA.is(HttpField.valueParameters(contentType, null))) throw new ServletException("Unsupported Content-Type [" + contentType + "], expected [multipart/form-data]"); return getParts(null); } diff --git a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Response.java b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Response.java index d0e6554cac34..a53d442b6924 100644 --- a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Response.java +++ b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Response.java @@ -87,7 +87,7 @@ public enum OutputType private int _status = HttpStatus.OK_200; private String _reason; private Locale _locale; - private MimeTypes.PreDefined _mimeType; + private MimeTypes.Type _mimeType; private String _characterEncoding; private EncodingFrom _encodingFrom = EncodingFrom.NOT_SET; private String _contentType; diff --git a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/ContextHandlerTest.java b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/ContextHandlerTest.java index 80a2cbb2d263..b96ca04a8e41 100644 --- a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/ContextHandlerTest.java +++ b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/ContextHandlerTest.java @@ -136,7 +136,7 @@ public void testDumpHeadersAndParameters() throws Exception Content-Length: 7 C=3&D=4 - """.formatted(MimeTypes.PreDefined.FORM_ENCODED.asString())); + """.formatted(MimeTypes.Type.FORM_ENCODED.asString())); HttpTester.Response response = HttpTester.parseResponse(rawResponse); diff --git a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/DumpHandler.java b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/DumpHandler.java index 58aa15c97ee1..5a82e052457d 100644 --- a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/DumpHandler.java +++ b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/DumpHandler.java @@ -94,7 +94,7 @@ public void handle(String target, Request baseRequest, HttpServletRequest reques } baseRequest.setHandled(true); - response.setHeader(HttpHeader.CONTENT_TYPE.asString(), MimeTypes.PreDefined.TEXT_HTML.asString()); + response.setHeader(HttpHeader.CONTENT_TYPE.asString(), MimeTypes.Type.TEXT_HTML.asString()); OutputStream out = response.getOutputStream(); ByteArrayOutputStream buf = new ByteArrayOutputStream(2048); diff --git a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/RequestTest.java b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/RequestTest.java index 99fc073bd06c..46111d7a5c08 100644 --- a/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/RequestTest.java +++ b/jetty-ee9/jetty-ee9-nested/src/test/java/org/eclipse/jetty/ee9/nested/RequestTest.java @@ -332,7 +332,7 @@ public void testParamExtractionTimeout() throws Exception //an exception parsing the params String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.PreDefined.FORM_ENCODED.asString() + "\n" + + "Content-Type: " + MimeTypes.Type.FORM_ENCODED.asString() + "\n" + "Connection: close\n" + "Content-Length: 100\n" + "\n" + @@ -1111,7 +1111,7 @@ public void testEncodedForm() throws Exception String content = "name1=test&name2=test2&name3=&name4=test"; String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.PreDefined.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.Type.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + content.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1128,7 +1128,7 @@ public void testEncodedFormUnknownMethod() throws Exception String content = "name1=test&name2=test2&name3=&name4=test"; String request = "UNKNOWN / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.PreDefined.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.Type.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + content.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1150,7 +1150,7 @@ public void testEncodedFormExtraMethod() throws Exception String content = "name1=test&name2=test2&name3=&name4=test"; String request = "EXTRA / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.PreDefined.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.Type.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + content.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1174,7 +1174,7 @@ public void test8859EncodedForm() throws Exception String content = "name1=test&name2=test%E4&name3=&name4=test"; String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.PreDefined.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.Type.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + content.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1198,7 +1198,7 @@ public void testUTF8EncodedForm() throws Exception String content = "name1=test&name2=test%C3%A4&name3=&name4=test"; String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.PreDefined.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.Type.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + content.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1763,7 +1763,7 @@ public void testHashDOSKeys() throws Exception String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.PreDefined.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.Type.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + buf.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -1801,7 +1801,7 @@ public void testHashDOSSize() throws Exception String request = "POST / HTTP/1.1\r\n" + "Host: whatever\r\n" + - "Content-Type: " + MimeTypes.PreDefined.FORM_ENCODED.asString() + "\r\n" + + "Content-Type: " + MimeTypes.Type.FORM_ENCODED.asString() + "\r\n" + "Content-Length: " + buf.length() + "\r\n" + "Connection: close\r\n" + "\r\n" + @@ -2150,7 +2150,7 @@ public void handle(String target, Request baseRequest, HttpServletRequest reques ((Request)request).setHandled(true); if (request.getContentLength() > 0 && - !request.getContentType().startsWith(MimeTypes.PreDefined.FORM_ENCODED.asString()) && + !request.getContentType().startsWith(MimeTypes.Type.FORM_ENCODED.asString()) && !request.getContentType().startsWith("multipart/form-data")) assertNotNull(IO.toString(request.getInputStream())); diff --git a/jetty-ee9/jetty-ee9-security/src/main/java/org/eclipse/jetty/ee9/security/authentication/FormAuthenticator.java b/jetty-ee9/jetty-ee9-security/src/main/java/org/eclipse/jetty/ee9/security/authentication/FormAuthenticator.java index 58d507ef44f5..45ea2f4ad35f 100644 --- a/jetty-ee9/jetty-ee9-security/src/main/java/org/eclipse/jetty/ee9/security/authentication/FormAuthenticator.java +++ b/jetty-ee9/jetty-ee9-security/src/main/java/org/eclipse/jetty/ee9/security/authentication/FormAuthenticator.java @@ -378,7 +378,7 @@ else if (_dispatch) session.setAttribute(__J_URI, buf.toString()); session.setAttribute(__J_METHOD, request.getMethod()); - if (MimeTypes.PreDefined.FORM_ENCODED.is(req.getContentType()) && HttpMethod.POST.is(request.getMethod())) + if (MimeTypes.Type.FORM_ENCODED.is(req.getContentType()) && HttpMethod.POST.is(request.getMethod())) { MultiMap formParameters = new MultiMap<>(); baseRequest.extractFormParameters(formParameters); diff --git a/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/FormTest.java b/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/FormTest.java index 2eacf0592426..127c43b5be32 100644 --- a/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/FormTest.java +++ b/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/FormTest.java @@ -131,7 +131,7 @@ protected void service(HttpServletRequest request, HttpServletResponse response) ContentResponse response = client.newRequest("localhost", connector.getLocalPort()) .method(HttpMethod.POST) .path(contextPath + servletPath) - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.FORM_ENCODED.asString())) .body(content) .onRequestBegin(request -> { diff --git a/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/MultiPartServletTest.java b/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/MultiPartServletTest.java index 032475973a30..2e8dd49ee297 100644 --- a/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/MultiPartServletTest.java +++ b/jetty-ee9/jetty-ee9-servlet/src/test/java/org/eclipse/jetty/ee9/servlet/MultiPartServletTest.java @@ -75,10 +75,10 @@ public static class MultiPartServlet extends HttpServlet @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - if (!req.getContentType().contains(MimeTypes.PreDefined.MULTIPART_FORM_DATA.asString())) + if (!req.getContentType().contains(MimeTypes.Type.MULTIPART_FORM_DATA.asString())) { resp.setContentType("text/plain"); - resp.getWriter().println("not content type " + MimeTypes.PreDefined.MULTIPART_FORM_DATA); + resp.getWriter().println("not content type " + MimeTypes.Type.MULTIPART_FORM_DATA); resp.getWriter().println("contentType: " + req.getContentType()); return; } @@ -96,7 +96,7 @@ public static class MultiPartEchoServlet extends HttpServlet @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - if (!req.getContentType().contains(MimeTypes.PreDefined.MULTIPART_FORM_DATA.asString())) + if (!req.getContentType().contains(MimeTypes.Type.MULTIPART_FORM_DATA.asString())) { resp.sendError(400); return; From 0a32b7bf47dd4c0e5b10fcb09929ee68ea35b631 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Mon, 21 Nov 2022 10:05:16 +1100 Subject: [PATCH 08/14] Fixed constructor --- .../src/main/java/org/eclipse/jetty/http/MimeTypes.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java index c1a7670667f4..7a08212dbefb 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java @@ -423,9 +423,9 @@ public Mapped() public Mapped(MimeTypes defaults) { - _mimeMap.entrySet().addAll(defaults.getMimeMap().entrySet()); - _assumedEncodings.entrySet().addAll(defaults.getAssumedMap().entrySet()); - _inferredEncodings.entrySet().addAll(defaults.getInferredMap().entrySet()); + _mimeMap.putAll(defaults.getMimeMap()); + _assumedEncodings.putAll(defaults.getAssumedMap()); + _inferredEncodings.putAll(defaults.getInferredMap()); } @Override From 4aca4d25589034934331f77f4465ea0fe39c2210 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Mon, 21 Nov 2022 10:35:24 +1100 Subject: [PATCH 09/14] Fixed bad refactor --- .../jetty/ee9/security/openid/OpenIdAuthenticator.java | 2 +- .../eclipse/jetty/ee9/proxy/ForwardProxyTLSServerTest.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/jetty-ee9/jetty-ee9-openid/src/main/java/org/eclipse/jetty/ee9/security/openid/OpenIdAuthenticator.java b/jetty-ee9/jetty-ee9-openid/src/main/java/org/eclipse/jetty/ee9/security/openid/OpenIdAuthenticator.java index 494a7bc35dd9..2852d0f3212f 100644 --- a/jetty-ee9/jetty-ee9-openid/src/main/java/org/eclipse/jetty/ee9/security/openid/OpenIdAuthenticator.java +++ b/jetty-ee9/jetty-ee9-openid/src/main/java/org/eclipse/jetty/ee9/security/openid/OpenIdAuthenticator.java @@ -681,7 +681,7 @@ public UriRedirectInfo(Request request) _uri = request.getRequestURI(); _method = request.getMethod(); - if (MimeTypes.PreDefined.FORM_ENCODED.is(request.getContentType()) && HttpMethod.POST.is(request.getMethod())) + if (MimeTypes.Type.FORM_ENCODED.is(request.getContentType()) && HttpMethod.POST.is(request.getMethod())) { MultiMap formParameters = new MultiMap<>(); request.extractFormParameters(formParameters); diff --git a/jetty-ee9/jetty-ee9-proxy/src/test/java/org/eclipse/jetty/ee9/proxy/ForwardProxyTLSServerTest.java b/jetty-ee9/jetty-ee9-proxy/src/test/java/org/eclipse/jetty/ee9/proxy/ForwardProxyTLSServerTest.java index ed220f9bbb35..5c327c41dea4 100644 --- a/jetty-ee9/jetty-ee9-proxy/src/test/java/org/eclipse/jetty/ee9/proxy/ForwardProxyTLSServerTest.java +++ b/jetty-ee9/jetty-ee9-proxy/src/test/java/org/eclipse/jetty/ee9/proxy/ForwardProxyTLSServerTest.java @@ -254,7 +254,7 @@ public void testTwoExchanges(SslContextFactory.Server proxyTLS) throws Exception .scheme(HttpScheme.HTTPS.asString()) .method(HttpMethod.POST) .path("/echo") - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.FORM_ENCODED.asString())) .headers(headers -> headers.put(HttpHeader.CONTENT_LENGTH, String.valueOf(contentLength))) .body(new StringRequestContent(content)) .timeout(5, TimeUnit.SECONDS) @@ -317,7 +317,7 @@ public void succeeded(Connection result) .scheme(HttpScheme.HTTPS.asString()) .method(HttpMethod.POST) .path("/echo") - .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.PreDefined.FORM_ENCODED.asString())) + .headers(headers -> headers.put(HttpHeader.CONTENT_TYPE, MimeTypes.Type.FORM_ENCODED.asString())) .headers(headers -> headers.put(HttpHeader.CONTENT_LENGTH, String.valueOf(body2.length()))) .body(new StringRequestContent(body2)); @@ -897,7 +897,7 @@ public void process(Request request, Response response, Callback callback) throw else callback.succeeded(); } - else if (MimeTypes.PreDefined.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE))) + else if (MimeTypes.Type.FORM_ENCODED.is(request.getHeaders().get(HttpHeader.CONTENT_TYPE))) { FormFields.from(request).whenComplete((fields, failure) -> { From d313067fca5451a57052d1ab4f83b787759d1ebc Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Mon, 21 Nov 2022 10:59:45 +1100 Subject: [PATCH 10/14] Convert interface to class --- .../org/eclipse/jetty/http/MimeTypes.java | 167 ++++++++---------- .../org/eclipse/jetty/http/MimeTypesTest.java | 4 +- .../jetty/server/handler/ContextHandler.java | 2 +- .../servlets/TestStaticMimeTypeServlet.java | 2 +- .../servlets/TestStaticMimeTypeServlet.java | 2 +- 5 files changed, 78 insertions(+), 99 deletions(-) diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java index 7a08212dbefb..4afc9bf5bcf6 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java @@ -33,12 +33,12 @@ /** * MIME Type enum and utilities */ -public interface MimeTypes +public class MimeTypes { - Logger LOG = LoggerFactory.getLogger(MimeTypes.class); + static Logger LOG = LoggerFactory.getLogger(MimeTypes.class); /** Enumeration of predefined MimeTypes. This is not exhaustive */ - enum Type + public enum Type { FORM_ENCODED("application/x-www-form-urlencoded"), MESSAGE_HTTP("message/http"), @@ -186,7 +186,7 @@ public Type getBaseType() } } - Index CACHE = new Index.Builder() + public static Index CACHE = new Index.Builder() .caseSensitive(false) .withAll(() -> { @@ -206,6 +206,25 @@ public Type getBaseType() }) .build(); + protected final Map _mimeMap = new HashMap<>(); + protected final Map _inferredEncodings = new HashMap<>(); + protected final Map _assumedEncodings = new HashMap<>(); + + public MimeTypes() + { + this(DEFAULTS); + } + + public MimeTypes(MimeTypes defaults) + { + if (defaults != null) + { + _mimeMap.putAll(defaults.getMimeMap()); + _assumedEncodings.putAll(defaults.getAssumedMap()); + _inferredEncodings.putAll(defaults.getInferredMap()); + } + } + /** * Get the MIME type by filename extension. * @@ -213,7 +232,7 @@ public Type getBaseType() * @return MIME type matching the longest dot extension of the * file name. */ - default String getMimeByExtension(String filename) + public String getMimeByExtension(String filename) { String type = null; @@ -240,20 +259,47 @@ default String getMimeByExtension(String filename) return type; } - String getMimeForExtension(String extension); + public String getMimeForExtension(String extension) + { + return _mimeMap.get(extension); + } - String getCharsetInferredFromContentType(String contentType); + public String getCharsetInferredFromContentType(String contentType) + { + return _inferredEncodings.get(contentType); + } - String getCharsetAssumedFromContentType(String contentType); + public String getCharsetAssumedFromContentType(String contentType) + { + return _assumedEncodings.get(contentType); + } - Map getMimeMap(); + public Map getMimeMap() + { + return Collections.unmodifiableMap(_mimeMap); + } - Map getInferredMap(); + public Map getInferredMap() + { + return Collections.unmodifiableMap(_inferredEncodings); + } - Map getAssumedMap(); + public Map getAssumedMap() + { + return Collections.unmodifiableMap(_assumedEncodings); + } - interface Mutable extends MimeTypes + public static class Mutable extends MimeTypes { + public Mutable() + { + } + + public Mutable(MimeTypes defaults) + { + super(defaults); + } + /** * Set a mime mapping * @@ -261,14 +307,23 @@ interface Mutable extends MimeTypes * @param type the mime type * @return previous value */ - String addMimeMapping(String extension, String type); + public String addMimeMapping(String extension, String type) + { + return _mimeMap.put(StringUtil.asciiToLowerCase(extension), normalizeMimeType(type)); + } - String addInferred(String contentType, String encoding); + public String addInferred(String contentType, String encoding) + { + return _inferredEncodings.put(contentType, encoding); + } - String addAssumed(String contentType, String encoding); + public String addAssumed(String contentType, String encoding) + { + return _assumedEncodings.put(contentType, encoding); + } } - MimeTypes DEFAULTS = new MimeTypes.Base() + public static MimeTypes DEFAULTS = new MimeTypes(null) { { for (Type type : Type.values()) @@ -371,82 +426,6 @@ else if ((_inferredEncodings.size() + _assumedEncodings.size()) < props.keySet() } }; - class Base implements MimeTypes - { - protected final Map _mimeMap = new HashMap<>(); - protected final Map _inferredEncodings = new HashMap<>(); - protected final Map _assumedEncodings = new HashMap<>(); - - @Override - public String getMimeForExtension(String extension) - { - return _mimeMap.get(extension); - } - - @Override - public String getCharsetInferredFromContentType(String contentType) - { - return _inferredEncodings.get(contentType); - } - - @Override - public String getCharsetAssumedFromContentType(String contentType) - { - return _assumedEncodings.get(contentType); - } - - @Override - public Map getMimeMap() - { - return Collections.unmodifiableMap(_mimeMap); - } - - @Override - public Map getInferredMap() - { - return Collections.unmodifiableMap(_inferredEncodings); - } - - @Override - public Map getAssumedMap() - { - return Collections.unmodifiableMap(_assumedEncodings); - } - } - - class Mapped extends Base implements Mutable - { - public Mapped() - { - this(DEFAULTS); - } - - public Mapped(MimeTypes defaults) - { - _mimeMap.putAll(defaults.getMimeMap()); - _assumedEncodings.putAll(defaults.getAssumedMap()); - _inferredEncodings.putAll(defaults.getInferredMap()); - } - - @Override - public String addMimeMapping(String extension, String type) - { - return _mimeMap.put(StringUtil.asciiToLowerCase(extension), normalizeMimeType(type)); - } - - @Override - public String addInferred(String contentType, String encoding) - { - return _inferredEncodings.put(contentType, encoding); - } - - @Override - public String addAssumed(String contentType, String encoding) - { - return _assumedEncodings.put(contentType, encoding); - } - } - private static String normalizeMimeType(String type) { Type t = CACHE.get(type); @@ -456,7 +435,7 @@ private static String normalizeMimeType(String type) return StringUtil.asciiToLowerCase(type); } - static String getCharsetFromContentType(String value) + public static String getCharsetFromContentType(String value) { if (value == null) return null; @@ -569,7 +548,7 @@ else if (' ' != b) return null; } - static String getContentTypeWithoutCharset(String value) + public static String getContentTypeWithoutCharset(String value) { int end = value.length(); int state = 0; diff --git a/jetty-core/jetty-http/src/test/java/org/eclipse/jetty/http/MimeTypesTest.java b/jetty-core/jetty-http/src/test/java/org/eclipse/jetty/http/MimeTypesTest.java index 4321325e4f8f..9f7651e9f22a 100644 --- a/jetty-core/jetty-http/src/test/java/org/eclipse/jetty/http/MimeTypesTest.java +++ b/jetty-core/jetty-http/src/test/java/org/eclipse/jetty/http/MimeTypesTest.java @@ -51,7 +51,7 @@ public static Stream mimeTypesByExtensionCases() @MethodSource("mimeTypesByExtensionCases") public void testMimeTypesByExtension(String filename, String expectedMimeType) { - MimeTypes mimetypes = new MimeTypes.Mapped(); + MimeTypes mimetypes = new MimeTypes(); String contentType = mimetypes.getMimeByExtension(filename); assertThat("MimeTypes.getMimeByExtension(\"" + filename + "\")", contentType, is(expectedMimeType)); @@ -60,7 +60,7 @@ public void testMimeTypesByExtension(String filename, String expectedMimeType) @Test public void testGetMimeByExtensionNoExtension() { - MimeTypes mimetypes = new MimeTypes.Mapped(); + MimeTypes mimetypes = new MimeTypes(); String contentType = mimetypes.getMimeByExtension("README"); assertNull(contentType); } diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java index e39a9b14e206..a46e32a45a96 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java @@ -96,7 +96,7 @@ public static String getServerInfo() */ private final Context _context; private final Attributes _persistentAttributes = new Mapped(); - private final MimeTypes.Mapped _mimeTypes = new MimeTypes.Mapped(); + private final MimeTypes.Mutable _mimeTypes = new MimeTypes.Mutable(); private final List _contextListeners = new CopyOnWriteArrayList<>(); private final List _vhosts = new ArrayList<>(); diff --git a/jetty-ee10/jetty-ee10-servlets/src/test/java/org/eclipse/jetty/ee10/servlets/TestStaticMimeTypeServlet.java b/jetty-ee10/jetty-ee10-servlets/src/test/java/org/eclipse/jetty/ee10/servlets/TestStaticMimeTypeServlet.java index 95e98a160373..e60c5e440696 100644 --- a/jetty-ee10/jetty-ee10-servlets/src/test/java/org/eclipse/jetty/ee10/servlets/TestStaticMimeTypeServlet.java +++ b/jetty-ee10/jetty-ee10-servlets/src/test/java/org/eclipse/jetty/ee10/servlets/TestStaticMimeTypeServlet.java @@ -34,7 +34,7 @@ public class TestStaticMimeTypeServlet extends AbstractFileContentServlet public void init(ServletConfig config) throws ServletException { super.init(config); - mimeTypes = new MimeTypes.Mapped(); + mimeTypes = new MimeTypes.Mutable(); // Some real world, yet not terribly common, mime type mappings. mimeTypes.addMimeMapping("bz2", "application/bzip2"); mimeTypes.addMimeMapping("br", "application/brotli"); diff --git a/jetty-ee9/jetty-ee9-servlets/src/test/java/org/eclipse/jetty/ee9/servlets/TestStaticMimeTypeServlet.java b/jetty-ee9/jetty-ee9-servlets/src/test/java/org/eclipse/jetty/ee9/servlets/TestStaticMimeTypeServlet.java index 30dcf818f903..7e8120abaab0 100644 --- a/jetty-ee9/jetty-ee9-servlets/src/test/java/org/eclipse/jetty/ee9/servlets/TestStaticMimeTypeServlet.java +++ b/jetty-ee9/jetty-ee9-servlets/src/test/java/org/eclipse/jetty/ee9/servlets/TestStaticMimeTypeServlet.java @@ -34,7 +34,7 @@ public class TestStaticMimeTypeServlet extends AbstractFileContentServlet public void init(ServletConfig config) throws ServletException { super.init(config); - mimeTypes = new MimeTypes.Mapped(); + mimeTypes = new MimeTypes.Mutable(); // Some real world, yet not terribly common, mime type mappings. mimeTypes.addMimeMapping("bz2", "application/bzip2"); mimeTypes.addMimeMapping("br", "application/brotli"); From 884ae16d2b41ce58deaaa47177a18c0542182eb3 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Mon, 21 Nov 2022 16:19:31 +1100 Subject: [PATCH 11/14] mimetypes when no context --- .../java/org/eclipse/jetty/server/handler/ResourceHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java index a8c474661b74..fedefec71234 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java @@ -74,7 +74,7 @@ public void doStart() throws Exception _resourceBase = context.getBaseResource(); } - _mimeTypes = context.getMimeTypes(); + _mimeTypes = context == null ? MimeTypes.DEFAULTS : context.getMimeTypes(); _byteBufferPool = getByteBufferPool(context); _resourceService.setHttpContentFactory(newHttpContentFactory()); From ce77bb87122f93f5539a5fb7c927471f91f97e3c Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Mon, 21 Nov 2022 16:24:14 +1100 Subject: [PATCH 12/14] updates from review --- .../org/eclipse/jetty/server/handler/ContextHandler.java | 8 ++++---- .../main/java/org/eclipse/jetty/ee9/nested/Response.java | 7 +++++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java index a46e32a45a96..2534e3f467e6 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java @@ -89,10 +89,10 @@ public static String getServerInfo() } /* - * The context and specifically attributes and mimeTypes are not implemented as a layer over - * The server context, attributes and mimeTypes, because ultimately we may support cross context - * dispatch, in which case the properties and behaviour of a context would be dynamic. - * So the context replaces the context in the request, it does not wrap it. + * The context (specifically it's attributes and mimeTypes) are not implemented as a layer over + * the server context, as this handler's context replaces the context in the request, it does not + * wrap it. This is so that any cross context dispatch does not inherit attributes and types from + * the dispatching context. */ private final Context _context; private final Attributes _persistentAttributes = new Mapped(); diff --git a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Response.java b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Response.java index a53d442b6924..ef49623c993c 100644 --- a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Response.java +++ b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Response.java @@ -792,13 +792,16 @@ private String getCharacterEncoding(boolean setContentType) if (_mimeType != null && _mimeType.isCharsetAssumed()) return _mimeType.getCharsetString(); + // Get MimeTypes from context + MimeTypes mimeTypes = _channel.getRequest().getCoreRequest().getContext().getMimeTypes(); + // Try charset assumed from content type (assumed charsets are not added to content type header). - encoding = _channel.getRequest().getCoreRequest().getContext().getMimeTypes().getCharsetAssumedFromContentType(_contentType); + encoding = mimeTypes.getCharsetAssumedFromContentType(_contentType); if (encoding != null) return encoding; // Try char set inferred from content type. - encoding = _channel.getRequest().getCoreRequest().getContext().getMimeTypes().getCharsetInferredFromContentType(_contentType); + encoding = mimeTypes.getCharsetInferredFromContentType(_contentType); if (encoding != null) { if (setContentType) From 162bd4a31d3109900bdef75e3f9c144711f4f212 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Tue, 22 Nov 2022 09:28:02 +1100 Subject: [PATCH 13/14] Merge remote-tracking branch 'origin/jetty-12.0.x' into jetty-12-mimetype-cleanup # Conflicts: # jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/gzip/GzipHandlerTest.java --- .../org/eclipse/jetty/http/MimeTypes.java | 39 +++++++------------ .../org/eclipse/jetty/http/mime.properties | 1 - .../org/eclipse/jetty/http/MimeTypesTest.java | 2 + .../java/org/eclipse/jetty/util/FileID.java | 6 ++- 4 files changed, 19 insertions(+), 29 deletions(-) diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java index 4afc9bf5bcf6..4351d9c7f6ef 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java @@ -25,6 +25,7 @@ import java.util.Objects; import java.util.Properties; +import org.eclipse.jetty.util.FileID; import org.eclipse.jetty.util.Index; import org.eclipse.jetty.util.StringUtil; import org.slf4j.Logger; @@ -229,34 +230,13 @@ public MimeTypes(MimeTypes defaults) * Get the MIME type by filename extension. * * @param filename A file name - * @return MIME type matching the longest dot extension of the - * file name. + * @return MIME type matching the last dot extension of the + * file name, or matching "*" if none found. */ public String getMimeByExtension(String filename) { - String type = null; - - if (filename != null) - { - int i = -1; - while (type == null) - { - i = filename.indexOf(".", i + 1); - - if (i < 0 || i >= filename.length()) - break; - - String ext = StringUtil.asciiToLowerCase(filename.substring(i + 1)); - type = getMimeForExtension(ext); - } - } - - if (type == null) - { - type = getMimeForExtension("*"); - } - - return type; + String ext = FileID.getExtension(filename); + return getMimeForExtension(Objects.requireNonNullElse(ext, "*")); } public String getMimeForExtension(String extension) @@ -309,6 +289,8 @@ public Mutable(MimeTypes defaults) */ public String addMimeMapping(String extension, String type) { + if (extension.contains(".")) + throw new IllegalArgumentException("extensions cannot contain '.'"); return _mimeMap.put(StringUtil.asciiToLowerCase(extension), normalizeMimeType(type)); } @@ -348,7 +330,12 @@ public String addAssumed(String contentType, String encoding) props.stringPropertyNames().stream() .filter(Objects::nonNull) .forEach(x -> - _mimeMap.put(StringUtil.asciiToLowerCase(x), normalizeMimeType(props.getProperty(x)))); + { + if (x.contains(".")) + LOG.warn("ignoring invalid extension {} from mime.properties", x); + else + _mimeMap.put(StringUtil.asciiToLowerCase(x), normalizeMimeType(props.getProperty(x))); + }); if (_mimeMap.isEmpty()) { diff --git a/jetty-core/jetty-http/src/main/resources/org/eclipse/jetty/http/mime.properties b/jetty-core/jetty-http/src/main/resources/org/eclipse/jetty/http/mime.properties index fe22dea39f16..b5039375d298 100644 --- a/jetty-core/jetty-http/src/main/resources/org/eclipse/jetty/http/mime.properties +++ b/jetty-core/jetty-http/src/main/resources/org/eclipse/jetty/http/mime.properties @@ -154,7 +154,6 @@ svgz=image/svg+xml swf=application/x-shockwave-flash t=application/x-troff tar=application/x-tar -tar.gz=application/x-gtar tcl=application/x-tcl tex=application/x-tex texi=application/x-texinfo diff --git a/jetty-core/jetty-http/src/test/java/org/eclipse/jetty/http/MimeTypesTest.java b/jetty-core/jetty-http/src/test/java/org/eclipse/jetty/http/MimeTypesTest.java index 9f7651e9f22a..5d9704423d35 100644 --- a/jetty-core/jetty-http/src/test/java/org/eclipse/jetty/http/MimeTypesTest.java +++ b/jetty-core/jetty-http/src/test/java/org/eclipse/jetty/http/MimeTypesTest.java @@ -30,6 +30,8 @@ public static Stream mimeTypesByExtensionCases() { return Stream.of( Arguments.of("test.gz", "application/gzip"), + Arguments.of("test.tar.gz", "application/gzip"), + Arguments.of("test.tgz", "application/x-gtar"), Arguments.of("foo.webp", "image/webp"), Arguments.of("zed.avif", "image/avif"), // make sure that filename case isn't an issue diff --git a/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/FileID.java b/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/FileID.java index e7ce50616a5b..0a05ee26214b 100644 --- a/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/FileID.java +++ b/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/FileID.java @@ -157,7 +157,9 @@ public static String getExtension(Path path) * for the extension (if any), including the dot, lower-cased. * * @param filename The string path - * @return The last segment extension, or null if not a file, or null if there is no extension present + * @return The last segment extension excluding the leading dot; + * or null if not a file; + * or null if there is no extension present */ public static String getExtension(String filename) { @@ -495,7 +497,7 @@ public static boolean isTld(Path path) return false; if (!hasNamedPathSegment(path, "META-INF")) return false; - return isExtension(path, ".tld"); + return isExtension(path, "tld"); } /** From 127d3f23d18d5c2ab6ef0a4224d133fe9288dbcb Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Tue, 22 Nov 2022 10:53:16 +1100 Subject: [PATCH 14/14] updates from review --- .../src/main/java/org/eclipse/jetty/http/MimeTypes.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java index 4351d9c7f6ef..e90a59a2a54d 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java @@ -36,7 +36,7 @@ */ public class MimeTypes { - static Logger LOG = LoggerFactory.getLogger(MimeTypes.class); + static final Logger LOG = LoggerFactory.getLogger(MimeTypes.class); /** Enumeration of predefined MimeTypes. This is not exhaustive */ public enum Type @@ -187,7 +187,7 @@ public Type getBaseType() } } - public static Index CACHE = new Index.Builder() + public static final Index CACHE = new Index.Builder() .caseSensitive(false) .withAll(() -> { @@ -305,7 +305,7 @@ public String addAssumed(String contentType, String encoding) } } - public static MimeTypes DEFAULTS = new MimeTypes(null) + public static final MimeTypes DEFAULTS = new MimeTypes(null) { { for (Type type : Type.values())