From 5e9db0e923df8b800bea195836dcb27069b2ac79 Mon Sep 17 00:00:00 2001 From: Version Upgrade Date: Thu, 10 Jul 2025 13:06:31 +0000 Subject: [PATCH] Upgrade to Java 21 on Iteration 2 --- pom.xml | 33 ++++++++---------- .../appconfig/movies/MoviesController.java | 8 ++--- .../samples/appconfig/utils/Encoder.java | 8 +++-- .../samples/appconfig/utils/Math.java | 29 +++++++-------- .../samples/appconfig/utils/Security.java | 5 +-- .../samples/appconfig/movies/MathTest.java | 17 +++++---- .../samples/appconfig/movies/MockTest.class | Bin 0 -> 1733 bytes .../samples/appconfig/movies/MockTest.java | 14 +++++--- .../samples/appconfig/movies/MovieTest.java | 6 +--- .../movies/MoviesControllerTest.java | 25 ++++++++----- 10 files changed, 75 insertions(+), 70 deletions(-) create mode 100644 src/test/java/com/amazonaws/samples/appconfig/movies/MockTest.class diff --git a/pom.xml b/pom.xml index f019649..602c5cc 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.5.RELEASE + 3.0.13 @@ -44,43 +44,39 @@ org.springframework.boot spring-boot-starter-test test + + + com.vaadin.external.google + android-json + + org.apache.logging.log4j log4j-api - 2.13.3 - - - - junit - junit - 4.13.1 - test org.apache.logging.log4j log4j-core - 2.13.3 org.mockito - mockito-all - 1.10.19 + mockito-core + 4.11.0 test - javax.validation - validation-api - 2.0.1.Final + jakarta.validation + jakarta.validation-api - 1.8 + 21 @@ -92,10 +88,9 @@ org.apache.maven.plugins maven-compiler-plugin - 3.8.1 + 3.14.0 - ${java.version} - ${java.version} + ${java.version} diff --git a/src/main/java/com/amazonaws/samples/appconfig/movies/MoviesController.java b/src/main/java/com/amazonaws/samples/appconfig/movies/MoviesController.java index d7c6fc6..e4f20c2 100644 --- a/src/main/java/com/amazonaws/samples/appconfig/movies/MoviesController.java +++ b/src/main/java/com/amazonaws/samples/appconfig/movies/MoviesController.java @@ -17,15 +17,13 @@ import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import software.amazon.awssdk.services.appconfig.AppConfigClient; import software.amazon.awssdk.services.appconfig.model.GetConfigurationResponse; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import javax.validation.Valid; - -import static org.springframework.web.bind.annotation.RequestMethod.POST; +import jakarta.validation.Valid; @RestController public class MoviesController { @@ -107,7 +105,7 @@ public String movie() { } } - @RequestMapping(value = "/movies/{movie}/edit", method = POST) + @PostMapping("/movies/{movie}/edit") public String processUpdateMovie(@Valid Movie movie, BindingResult result, @PathVariable("movieId") int movieId) { final AppConfigUtility appConfigUtility = new AppConfigUtility(getOrDefault(this::getClient, this::getDefaultClient), getOrDefault(this::getConfigurationCache, ConfigurationCache::new), diff --git a/src/main/java/com/amazonaws/samples/appconfig/utils/Encoder.java b/src/main/java/com/amazonaws/samples/appconfig/utils/Encoder.java index ff45b66..d5fcdaa 100644 --- a/src/main/java/com/amazonaws/samples/appconfig/utils/Encoder.java +++ b/src/main/java/com/amazonaws/samples/appconfig/utils/Encoder.java @@ -1,16 +1,18 @@ // depreciation example - sun.misc.BASE64Encoder; package com.amazonaws.samples.appconfig.utils; -import sun.misc.BASE64Encoder; +import java.util.Base64; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; public class Encoder { - Date defaultDate = new Date(1999, 0, 1); + Date defaultDate = Date.from(LocalDate.of(1999, 1, 1).atStartOfDay(ZoneId.systemDefault()).toInstant()); byte[] bytes = new byte[57]; - String enc1 = new sun.misc.BASE64Encoder().encode(bytes); + String enc1 = Base64.getEncoder().encodeToString(bytes); } \ No newline at end of file diff --git a/src/main/java/com/amazonaws/samples/appconfig/utils/Math.java b/src/main/java/com/amazonaws/samples/appconfig/utils/Math.java index 259b286..226f6fb 100644 --- a/src/main/java/com/amazonaws/samples/appconfig/utils/Math.java +++ b/src/main/java/com/amazonaws/samples/appconfig/utils/Math.java @@ -1,27 +1,28 @@ //example from https://docs.openrewrite.org/running-recipes/popular-recipe-guides/migrate-to-java-17 package com.amazonaws.samples.appconfig.utils; import java.math.BigDecimal; +import java.math.RoundingMode; public class Math { - Boolean bool = new Boolean(true); - Byte b = new Byte("1"); - Character c = new Character('c'); - Double d = new Double(1.0); - Float f = new Float(1.1f); - Long l = new Long(1); - Short sh = new Short("12"); + Boolean bool = Boolean.valueOf(true); + Byte b = Byte.valueOf("1"); + Character c = Character.valueOf('c'); + Double d = Double.valueOf(1.0); + Float f = Float.valueOf(1.1f); + Long l = Long.valueOf(1); + Short sh = Short.valueOf("12"); short s3 = 3; - Short sh3 = new Short(s3); - Integer i = new Integer(1); + Short sh3 = Short.valueOf(s3); + Integer i = Integer.valueOf(1); public void divide() { BigDecimal bd = BigDecimal.valueOf(10); BigDecimal bd2 = BigDecimal.valueOf(2); - bd.divide(bd2, BigDecimal.ROUND_DOWN); - bd.divide(bd2, 1); - bd.divide(bd2, 1, BigDecimal.ROUND_CEILING); - bd.divide(bd2, 1, 1); - bd.setScale(2, 1); + bd.divide(bd2, RoundingMode.DOWN); + bd.divide(bd2, RoundingMode.DOWN); + bd.divide(bd2, 1, RoundingMode.CEILING); + bd.divide(bd2, 1, RoundingMode.DOWN); + bd.setScale(2, RoundingMode.DOWN); } } \ No newline at end of file diff --git a/src/main/java/com/amazonaws/samples/appconfig/utils/Security.java b/src/main/java/com/amazonaws/samples/appconfig/utils/Security.java index 56cad72..d83807d 100644 --- a/src/main/java/com/amazonaws/samples/appconfig/utils/Security.java +++ b/src/main/java/com/amazonaws/samples/appconfig/utils/Security.java @@ -1,7 +1,7 @@ //javax.security.cert to java.security.cert classes migration package com.amazonaws.samples.appconfig.utils; -import javax.security.cert.*; +import java.security.cert.*; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -13,7 +13,8 @@ public Certificate getCertificate(File certFile) throws CertificateExpiredExcept X509Certificate cert = null; try { InputStream inStream = new FileInputStream(certFile); - cert = X509Certificate.getInstance(inStream); + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + cert = (X509Certificate) cf.generateCertificate(inStream); } catch (CertificateException e) { throw new RuntimeException(e); } catch (FileNotFoundException e) { diff --git a/src/test/java/com/amazonaws/samples/appconfig/movies/MathTest.java b/src/test/java/com/amazonaws/samples/appconfig/movies/MathTest.java index 04972c1..b57fd8d 100644 --- a/src/test/java/com/amazonaws/samples/appconfig/movies/MathTest.java +++ b/src/test/java/com/amazonaws/samples/appconfig/movies/MathTest.java @@ -1,11 +1,10 @@ package com.amazonaws.samples.appconfig.movies; - -import org.junit.Test; - +import java.math.RoundingMode; +import org.junit.jupiter.api.Test; import java.math.BigDecimal; -import com.amazonaws.samples.appconfig.utils.Math; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import com.amazonaws.samples.appconfig.utils.Math; public class MathTest { @@ -18,21 +17,21 @@ public void testDivide() { BigDecimal bd = BigDecimal.valueOf(10); BigDecimal bd2 = BigDecimal.valueOf(2); BigDecimal expectedResult1 = BigDecimal.valueOf(5); - assertEquals(expectedResult1, bd.divide(bd2, BigDecimal.ROUND_DOWN)); + assertEquals(expectedResult1, bd.divide(bd2, RoundingMode.DOWN)); // Test divide(BigDecimal, int) BigDecimal expectedResult2 = BigDecimal.valueOf(5.0); // Test divide(BigDecimal, int, int) BigDecimal expectedResult3 = BigDecimal.valueOf(5.0); - assertEquals(expectedResult3, bd.divide(bd2, 1, BigDecimal.ROUND_CEILING)); + assertEquals(expectedResult3, bd.divide(bd2, 1, RoundingMode.CEILING)); BigDecimal expectedResult4 = BigDecimal.valueOf(5.0); - assertEquals(expectedResult4, bd.divide(bd2, 1, 1)); + assertEquals(expectedResult4, bd.divide(bd2, 1, RoundingMode.DOWN)); // Test setScale(int, int) BigDecimal expectedResult5 = BigDecimal.valueOf(10); - bd.setScale(2, 1); + bd.setScale(2, RoundingMode.DOWN); assertEquals(expectedResult5, bd); } } diff --git a/src/test/java/com/amazonaws/samples/appconfig/movies/MockTest.class b/src/test/java/com/amazonaws/samples/appconfig/movies/MockTest.class new file mode 100644 index 0000000000000000000000000000000000000000..d3f595a35d36e66dc1142a610d30066a6a201494 GIT binary patch literal 1733 zcma)6T~pge6g`V=#g&I1P1_83T84ml(f4;ts>}LB=7! zY;lm0FN0c*J~qov!=~a}+j*cZ{ zG-M4tM2=xr6*vya8G5&bDl7(q!{pVA(WXy5b<0rB@a|A`>Hv z^PXq5&wMrwe6CE6`K@*mUyw>WmN-zNuNruQr?g@n94OJRDE*6)cg?_8cuu;Ua8Dez z85XbFdiiUG@xs8@sv+XO_`sDQ-zYU+F(fjDLbj^oTWn}}ZD12`7;Z+LM(x2H++)yA zEIZ)kLxzd-Z4vGu&)$;k>QFu36v}r7zDJSLJwdkv+y0*ul6cz;X5DR?R@3_6I@WvN z^sQ#g=05q;s=LmiP`5+1ME7#+ai4lLzTqBlhS8#M_;%2&ac|G6*_262T36yTOzsAb z6ir?gzM!?dKokqUWYL}h9qYN3FOJ7}5g;60@_k}zv z1-2AKxz~7Ar5N?k=-}2Zb+hz}8+dj8MkuD&RTYJ|qGZP$O7v$@PXgo*hUs0V*&Q00 z%0B!P><3g|YH{HP^#qohSaTZ5VQv?8v;~M=WW-*CnOkoYvc#RqChEysvGVJxK{2o%-NiTP> z(xsAqe2Om#Jf~Q6gASh2N mocklist = mock(List.class); when(mocklist.get(anyInt())).thenReturn("Movies"); @@ -29,6 +30,7 @@ public void testList() { @Test public void creatingASpyOnArrayList() { + @SuppressWarnings("unchecked") List listSpy = spy(ArrayList.class); listSpy.add("Paid"); listSpy.add("Movies"); @@ -40,7 +42,8 @@ public void creatingASpyOnArrayList() { @Test public void letsMockListSizeWithMultipleReturnValues() { - List list = mock(List.class); + @SuppressWarnings("unchecked") + List list = mock(List.class); Mockito.when(list.size()).thenReturn(10).thenReturn(20); assertEquals(10, list.size()); // First Call assertEquals(20, list.size()); // Second Call @@ -49,6 +52,7 @@ public void letsMockListSizeWithMultipleReturnValues() { @Test public void letsMockListGet() { + @SuppressWarnings("unchecked") List list = mock(List.class); Mockito.when(list.get(0)).thenReturn("PaidMovies"); diff --git a/src/test/java/com/amazonaws/samples/appconfig/movies/MovieTest.java b/src/test/java/com/amazonaws/samples/appconfig/movies/MovieTest.java index 998a8b6..7e599e8 100644 --- a/src/test/java/com/amazonaws/samples/appconfig/movies/MovieTest.java +++ b/src/test/java/com/amazonaws/samples/appconfig/movies/MovieTest.java @@ -1,12 +1,8 @@ package com.amazonaws.samples.appconfig.movies; - -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; import com.amazonaws.samples.appconfig.movies.MoviesController; -@RunWith(SpringRunner.class) @SpringBootTest public class MovieTest { diff --git a/src/test/java/com/amazonaws/samples/appconfig/movies/MoviesControllerTest.java b/src/test/java/com/amazonaws/samples/appconfig/movies/MoviesControllerTest.java index f4f616c..c937af3 100644 --- a/src/test/java/com/amazonaws/samples/appconfig/movies/MoviesControllerTest.java +++ b/src/test/java/com/amazonaws/samples/appconfig/movies/MoviesControllerTest.java @@ -3,8 +3,9 @@ import com.amazonaws.samples.appconfig.utils.AppConfigUtility; import com.amazonaws.samples.appconfig.cache.ConfigurationCache; import com.amazonaws.samples.appconfig.model.ConfigurationKey; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.core.env.Environment; @@ -14,12 +15,15 @@ import java.time.Duration; import java.util.UUID; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.nullable; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class MoviesControllerTest { + private AutoCloseable mocks; + @Mock private Environment env; @@ -31,9 +35,9 @@ public class MoviesControllerTest { private MoviesController moviesController; - @Before + @BeforeEach public void setUp() { - MockitoAnnotations.initMocks(this); + mocks = MockitoAnnotations.openMocks(this); moviesController = new MoviesController(); moviesController.env = env; } @@ -51,7 +55,7 @@ public void testMovieWithFeatureEnabled() { GetConfigurationResponse getConfigurationResponse = GetConfigurationResponse.builder().build(); AppConfigUtility appConfigUtility = mock(AppConfigUtility.class); - when(appConfigUtility.getConfiguration(any(ConfigurationKey.class))).thenReturn(getConfigurationResponse); + when(appConfigUtility.getConfiguration(nullable(ConfigurationKey.class))).thenReturn(getConfigurationResponse); moviesController.cacheItemTtl = Duration.ofSeconds(60); moviesController.client = appConfigClient; @@ -70,4 +74,9 @@ public void testMovieWithFeatureEnabled() { assertEquals(5, expectedMovies.length); } + @AfterEach + void tearDown() throws Exception { + mocks.close(); + } + } \ No newline at end of file