From 8037b470d03bc4462778ac8cc51fa46dd9fcf70d Mon Sep 17 00:00:00 2001 From: Vaibhav Vishal <36727272+vavishal@users.noreply.github.com> Date: Tue, 16 Jul 2024 13:03:50 +0530 Subject: [PATCH] Last-Modified header is garbled when accessing wadl document on Japanese locale (#5698) * Last-Modified header is garbled when accessing wadl document on Japanese locale Signed-off-by: Vaibhav Vishal --- .../server/wadl/internal/WadlResource.java | 7 ++++--- .../e2e/server/wadl/WadlResourceTest.java | 18 +++++++++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/core-server/src/main/java/org/glassfish/jersey/server/wadl/internal/WadlResource.java b/core-server/src/main/java/org/glassfish/jersey/server/wadl/internal/WadlResource.java index 8f32cf3e1b..20fd4b5428 100644 --- a/core-server/src/main/java/org/glassfish/jersey/server/wadl/internal/WadlResource.java +++ b/core-server/src/main/java/org/glassfish/jersey/server/wadl/internal/WadlResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2024 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -21,6 +21,7 @@ import java.net.URI; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Locale; import javax.ws.rs.GET; import javax.ws.rs.Path; @@ -62,7 +63,7 @@ public final class WadlResource { public WadlResource() { - this.lastModified = new SimpleDateFormat(HTTPDATEFORMAT).format(new Date()); + this.lastModified = new SimpleDateFormat(HTTPDATEFORMAT, Locale.US).format(new Date()); } private boolean isCached(UriInfo uriInfo, boolean detailedWadl) { @@ -81,7 +82,7 @@ public synchronized Response getWadl(@Context UriInfo uriInfo) { if ((wadlXmlRepresentation == null) || (!isCached(uriInfo, detailedWadl))) { this.lastBaseUri = uriInfo.getBaseUri(); lastDetailedWadl = detailedWadl; - this.lastModified = new SimpleDateFormat(HTTPDATEFORMAT).format(new Date()); + this.lastModified = new SimpleDateFormat(HTTPDATEFORMAT, Locale.US).format(new Date()); ApplicationDescription applicationDescription = wadlContext.getApplication(uriInfo, detailedWadl); diff --git a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/WadlResourceTest.java b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/WadlResourceTest.java index 0eddec69c3..7baf8c040e 100644 --- a/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/WadlResourceTest.java +++ b/tests/e2e-server/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/WadlResourceTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2024 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -30,6 +30,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Properties; import java.util.concurrent.ExecutionException; @@ -108,6 +109,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -399,6 +401,20 @@ public void testLastModifiedGET() { assertTrue(r.getHeaders().containsKey("Last-modified")); } + @Test + public void testLastModifiedGETOnJPLocale() { + Locale defaultLocale = Locale.getDefault(); + try { + Locale.setDefault(new Locale("ja", "JP")); + final WebTarget target = target("/application.wadl"); + + final Response r = target.queryParam(WadlUtils.DETAILED_WADL_QUERY_PARAM, "true").request().get(Response.class); + assertDoesNotThrow(() -> r.getLastModified()); + } finally { + Locale.setDefault(defaultLocale); + } + } + @Test public void testLastModifiedOPTIONS() { final WebTarget target = target("/widgets/3/verbose");