From eac9955ad3e59850136c2602ffb4783097fd69cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Sat, 19 Apr 2025 08:43:15 +0200 Subject: [PATCH 1/3] Fix checkstyle violation --- .../ws/gradle/conventions/CheckstyleConventions.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gradle/plugins/conventions-plugin/src/main/java/org/springframework/ws/gradle/conventions/CheckstyleConventions.java b/gradle/plugins/conventions-plugin/src/main/java/org/springframework/ws/gradle/conventions/CheckstyleConventions.java index 23949656..8634d96a 100644 --- a/gradle/plugins/conventions-plugin/src/main/java/org/springframework/ws/gradle/conventions/CheckstyleConventions.java +++ b/gradle/plugins/conventions-plugin/src/main/java/org/springframework/ws/gradle/conventions/CheckstyleConventions.java @@ -40,8 +40,10 @@ public class CheckstyleConventions { public void apply(Project project) { project.getPlugins().withType(JavaPlugin.class, (java) -> { project.getPlugins().apply(CheckstylePlugin.class); - project.getTasks().withType(Checkstyle.class).forEach(checkstyle -> checkstyle.getMaxHeapSize().set("1g")); - project.getTasks().named("checkstyleTest").configure(task -> task.setEnabled(false)); + project.getTasks() + .withType(Checkstyle.class) + .forEach((checkstyle) -> checkstyle.getMaxHeapSize().set("1g")); + project.getTasks().named("checkstyleTest").configure((task) -> task.setEnabled(false)); CheckstyleExtension checkstyle = project.getExtensions().getByType(CheckstyleExtension.class); checkstyle.setToolVersion("10.21.1"); checkstyle.getConfigDirectory().set(project.getRootProject().file("src/checkstyle")); From b98055139adac1d8b36a39679d8755e86c40b7cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Sat, 19 Apr 2025 11:41:13 +0200 Subject: [PATCH 2/3] Fix compilation warnings --- .../client/core/WebServiceTemplateTests.java | 30 ++++++++++++------- .../InliningXsdSchemaTypesProviderTests.java | 16 ++++++---- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/spring-ws-core/src/test/java/org/springframework/ws/client/core/WebServiceTemplateTests.java b/spring-ws-core/src/test/java/org/springframework/ws/client/core/WebServiceTemplateTests.java index 2fc51423..c4c53239 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/client/core/WebServiceTemplateTests.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/client/core/WebServiceTemplateTests.java @@ -109,7 +109,7 @@ public class WebServiceTemplateTests { WebServiceMessageCallback requestCallback = mock(WebServiceMessageCallback.class); requestCallback.doWithMessage(isA(WebServiceMessage.class)); - WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); + WebServiceMessageExtractor extractorMock = mockWebServiceMessageExtractor(); Object extracted = new Object(); when(extractorMock.extractData(isA(WebServiceMessage.class))).thenReturn(extracted); @@ -127,7 +127,7 @@ public class WebServiceTemplateTests { @Test public void testSendAndReceiveMessageNoResponse() throws Exception { - WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); + WebServiceMessageExtractor extractorMock = mockWebServiceMessageExtractor(); this.connectionMock.send(isA(WebServiceMessage.class)); when(this.connectionMock.hasError()).thenReturn(false); @@ -142,7 +142,7 @@ public class WebServiceTemplateTests { @Test public void testSendAndReceiveMessageFault() throws Exception { - WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); + WebServiceMessageExtractor extractorMock = mockWebServiceMessageExtractor(); FaultMessageResolver faultMessageResolverMock = mock(FaultMessageResolver.class); this.template.setFaultMessageResolver(faultMessageResolverMock); @@ -165,7 +165,7 @@ public class WebServiceTemplateTests { @Test public void testSendAndReceiveConnectionError() throws Exception { - WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); + WebServiceMessageExtractor extractorMock = mockWebServiceMessageExtractor(); this.template.setFaultMessageResolver(null); @@ -184,7 +184,7 @@ public class WebServiceTemplateTests { @Test public void testSendAndReceiveSourceResponse() throws Exception { - SourceExtractor extractorMock = mock(SourceExtractor.class); + SourceExtractor extractorMock = mockSourceExtractor(); Object extracted = new Object(); when(extractorMock.extractData(isA(Source.class))).thenReturn(extracted); @@ -202,7 +202,7 @@ public class WebServiceTemplateTests { @Test public void testSendAndReceiveSourceNoResponse() throws Exception { - SourceExtractor extractorMock = mock(SourceExtractor.class); + SourceExtractor extractorMock = mockSourceExtractor(); this.connectionMock.send(isA(WebServiceMessage.class)); when(this.connectionMock.hasError()).thenReturn(false); @@ -321,7 +321,7 @@ public class WebServiceTemplateTests { WebServiceMessageCallback requestCallback = mock(WebServiceMessageCallback.class); requestCallback.doWithMessage(isA(WebServiceMessage.class)); - WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); + WebServiceMessageExtractor extractorMock = mockWebServiceMessageExtractor(); Object extracted = new Object(); when(extractorMock.extractData(isA(WebServiceMessage.class))).thenReturn(extracted); @@ -352,7 +352,7 @@ public class WebServiceTemplateTests { WebServiceMessageCallback requestCallback = mock(WebServiceMessageCallback.class); requestCallback.doWithMessage(isA(WebServiceMessage.class)); - WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); + WebServiceMessageExtractor extractorMock = mockWebServiceMessageExtractor(); Object extracted = new Object(); when(extractorMock.extractData(isA(WebServiceMessage.class))).thenReturn(extracted); @@ -381,7 +381,7 @@ public class WebServiceTemplateTests { WebServiceMessageCallback requestCallback = mock(WebServiceMessageCallback.class); requestCallback.doWithMessage(messageContext.getRequest()); - WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); + WebServiceMessageExtractor extractorMock = mockWebServiceMessageExtractor(); Object result = this.template.doSendAndReceive(messageContext, this.connectionMock, requestCallback, extractorMock); @@ -406,7 +406,7 @@ public class WebServiceTemplateTests { WebServiceMessageCallback requestCallback = mock(WebServiceMessageCallback.class); requestCallback.doWithMessage(messageContext.getRequest()); - WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); + WebServiceMessageExtractor extractorMock = mockWebServiceMessageExtractor(); Object extracted = new Object(); when(extractorMock.extractData(messageContext.getResponse())).thenReturn(extracted); @@ -441,7 +441,7 @@ public class WebServiceTemplateTests { } }); - WebServiceMessageExtractor extractorMock = mock(WebServiceMessageExtractor.class); + WebServiceMessageExtractor extractorMock = mockWebServiceMessageExtractor(); reset(this.connectionMock); @@ -456,4 +456,12 @@ public class WebServiceTemplateTests { assertThat(result).isNull(); } + private static WebServiceMessageExtractor mockWebServiceMessageExtractor() { + return mock(WebServiceMessageExtractor.class); + } + + private static SourceExtractor mockSourceExtractor() { + return mock(SourceExtractor.class); + } + } diff --git a/spring-ws-core/src/test/java/org/springframework/ws/wsdl/wsdl11/provider/InliningXsdSchemaTypesProviderTests.java b/spring-ws-core/src/test/java/org/springframework/ws/wsdl/wsdl11/provider/InliningXsdSchemaTypesProviderTests.java index cda3a074..f51956aa 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/wsdl/wsdl11/provider/InliningXsdSchemaTypesProviderTests.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/wsdl/wsdl11/provider/InliningXsdSchemaTypesProviderTests.java @@ -16,6 +16,8 @@ package org.springframework.ws.wsdl.wsdl11.provider; +import java.util.List; + import javax.wsdl.Definition; import javax.wsdl.Types; import javax.wsdl.extensions.schema.Schema; @@ -65,9 +67,9 @@ public class InliningXsdSchemaTypesProviderTests { Types types = this.definition.getTypes(); assertThat(types).isNotNull(); - assertThat(types.getExtensibilityElements()).hasSize(1); + assertThat(getExtensibilityElements(types)).hasSize(1); - Schema wsdlSchema = (Schema) types.getExtensibilityElements().get(0); + Schema wsdlSchema = (Schema) getExtensibilityElements(types).get(0); assertThat(wsdlSchema.getElement()).isNotNull(); } @@ -93,15 +95,19 @@ public class InliningXsdSchemaTypesProviderTests { Types types = this.definition.getTypes(); assertThat(types).isNotNull(); - assertThat(types.getExtensibilityElements()).hasSize(2); + assertThat(getExtensibilityElements(types)).hasSize(2); - Schema wsdlSchema = (Schema) types.getExtensibilityElements().get(0); + Schema wsdlSchema = (Schema) getExtensibilityElements(types).get(0); assertThat(wsdlSchema.getElement()).isNotNull(); - wsdlSchema = (Schema) types.getExtensibilityElements().get(1); + wsdlSchema = (Schema) getExtensibilityElements(types).get(1); assertThat(wsdlSchema.getElement()).isNotNull(); } + private static List getExtensibilityElements(Types types) { + return types.getExtensibilityElements(); + } + } From 514abecc7e667d2c354f8dea98fd85e3bfb90a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Sat, 19 Apr 2025 11:49:20 +0200 Subject: [PATCH 3/3] Tighten rules with compiler warnings This commit configures the Java compiler to break the build in case of the following warnings: * Calling deprecated code * Use of unchecked and raw types * Incorrect use of varargs Closes gh-1537 --- .../conventions/JavaPluginConventions.java | 22 ++++++++++++++++++- spring-ws-platform/build.gradle | 2 ++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/gradle/plugins/conventions-plugin/src/main/java/org/springframework/ws/gradle/conventions/JavaPluginConventions.java b/gradle/plugins/conventions-plugin/src/main/java/org/springframework/ws/gradle/conventions/JavaPluginConventions.java index 87f06646..d1031f07 100644 --- a/gradle/plugins/conventions-plugin/src/main/java/org/springframework/ws/gradle/conventions/JavaPluginConventions.java +++ b/gradle/plugins/conventions-plugin/src/main/java/org/springframework/ws/gradle/conventions/JavaPluginConventions.java @@ -16,6 +16,8 @@ package org.springframework.ws.gradle.conventions; +import java.util.Arrays; +import java.util.List; import java.util.Map; import io.spring.javaformat.gradle.SpringJavaFormatPlugin; @@ -28,6 +30,7 @@ import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.bundling.Jar; +import org.gradle.api.tasks.compile.JavaCompile; import org.gradle.api.tasks.testing.Test; import org.gradle.jvm.toolchain.JavaLanguageVersion; @@ -42,6 +45,7 @@ class JavaPluginConventions { void apply(Project project) { project.getPlugins().apply(SpringJavaFormatPlugin.class); + configureJavaConventions(project); JavaPluginExtension java = project.getExtensions().getByType(JavaPluginExtension.class); enableSourceAndJavadocJars(java); configureSourceAndTargetCompatibility(java); @@ -52,7 +56,22 @@ class JavaPluginConventions { configureJUnitPlatform(project); } - + private void configureJavaConventions(Project project) { + project.getTasks().withType(JavaCompile.class, (compile) -> { + compile.getOptions().setEncoding("UTF-8"); + List args = compile.getOptions().getCompilerArgs(); + if (!args.contains("-parameters")) { + args.add("-parameters"); + } + boolean buildWithJava17 = !project.hasProperty("toolchainVersion") + && JavaVersion.current() == JavaVersion.VERSION_17; + if (buildWithJava17) { + args.addAll(Arrays.asList("-Werror", "-Xlint:unchecked", "-Xlint:deprecation", "-Xlint:rawtypes", + "-Xlint:varargs")); + } + }); + project.getDependencies().add("compileOnly", "com.google.code.findbugs:jsr305"); + } private void enableSourceAndJavadocJars(JavaPluginExtension java) { java.withSourcesJar(); @@ -106,6 +125,7 @@ class JavaPluginConventions { private void configureJUnitPlatform(Project project) { project.getTasks().withType(Test.class).configureEach((task) -> task.useJUnitPlatform()); + project.getDependencies().add("testImplementation", "org.apiguardian:apiguardian-api"); project.getDependencies().add("testRuntimeOnly", "org.junit.platform:junit-platform-launcher"); } diff --git a/spring-ws-platform/build.gradle b/spring-ws-platform/build.gradle index 9b87e140..a85f4ab5 100644 --- a/spring-ws-platform/build.gradle +++ b/spring-ws-platform/build.gradle @@ -17,6 +17,7 @@ dependencies { api(platform("org.springframework.security:spring-security-bom:6.3.9-SNAPSHOT")) constraints { api("com.fasterxml.woodstox:woodstox-core:6.5.1") + api("com.google.code.findbugs:jsr305:3.0.2") api("com.icegreen:greenmail:2.0.1") api("com.icegreen:greenmail-junit5:2.0.1") api("com.icegreen:greenmail-spring:2.0.1") @@ -39,6 +40,7 @@ dependencies { api("org.apache.santuario:xmlsec:3.0.4") api("org.apache.wss4j:wss4j-ws-security-dom:2.4.3") api("org.apache.ws.xmlschema:xmlschema-core:2.3.1") + api("org.apiguardian:apiguardian-api:1.1.2") api("org.aspectj:aspectjrt:1.9.22") api("org.aspectj:aspectjweaver:1.9.22") api("org.assertj:assertj-core:3.25.3")