diff --git a/spring-cloud-gateway-sample/pom.xml b/spring-cloud-gateway-sample/pom.xml index 7a2c35de..93564465 100644 --- a/spring-cloud-gateway-sample/pom.xml +++ b/spring-cloud-gateway-sample/pom.xml @@ -92,44 +92,6 @@ org.springframework.boot spring-boot-maven-plugin - - org.jetbrains.kotlin - kotlin-maven-plugin - - - -Xjsr305=strict - - 1.8 - - - - compile - compile - - compile - - - - src/main/java - src/main/kotlin - - - - - test-compile - test-compile - - test-compile - - - - src/test/java - src/test/kotlin - - - - - org.apache.maven.plugins maven-compiler-plugin @@ -173,5 +135,55 @@ + + + javaLowerThan16 + + (,16) + + + + + org.jetbrains.kotlin + kotlin-maven-plugin + + + -Xjsr305=strict + + 1.8 + + + + compile + compile + + compile + + + + src/main/java + src/main/kotlin + + + + + test-compile + test-compile + + test-compile + + + + src/test/java + src/test/kotlin + + + + + + + + + diff --git a/spring-cloud-gateway-sample/src/main/java/org/springframework/cloud/gateway/sample/AdditionalRoutesImportSelector.java b/spring-cloud-gateway-sample/src/main/java/org/springframework/cloud/gateway/sample/AdditionalRoutesImportSelector.java new file mode 100644 index 00000000..bd372b0c --- /dev/null +++ b/spring-cloud-gateway-sample/src/main/java/org/springframework/cloud/gateway/sample/AdditionalRoutesImportSelector.java @@ -0,0 +1,33 @@ +/* + * Copyright 2013-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.gateway.sample; + +import org.springframework.context.annotation.DeferredImportSelector; +import org.springframework.core.type.AnnotationMetadata; +import org.springframework.util.ClassUtils; + +class AdditionalRoutesImportSelector implements DeferredImportSelector { + + @Override + public String[] selectImports(AnnotationMetadata importingClassMetadata) { + if (ClassUtils.isPresent("org.springframework.cloud.gateway.sample.AdditionalRoutes", null)) { + return new String[] { "org.springframework.cloud.gateway.sample.AdditionalRoutes" }; + } + return new String[0]; + } + +} diff --git a/spring-cloud-gateway-sample/src/main/java/org/springframework/cloud/gateway/sample/GatewaySampleApplication.java b/spring-cloud-gateway-sample/src/main/java/org/springframework/cloud/gateway/sample/GatewaySampleApplication.java index ed192eb3..48cfbb95 100644 --- a/spring-cloud-gateway-sample/src/main/java/org/springframework/cloud/gateway/sample/GatewaySampleApplication.java +++ b/spring-cloud-gateway-sample/src/main/java/org/springframework/cloud/gateway/sample/GatewaySampleApplication.java @@ -41,7 +41,7 @@ import org.springframework.web.reactive.function.server.ServerResponse; */ @SpringBootConfiguration @EnableAutoConfiguration -@Import(AdditionalRoutes.class) +@Import(AdditionalRoutesImportSelector.class) public class GatewaySampleApplication { public static final String HELLO_FROM_FAKE_ACTUATOR_METRICS_GATEWAY_REQUESTS = "hello from fake /actuator/metrics/gateway.requests"; diff --git a/spring-cloud-gateway-sample/src/main/kotlin/org/springframework/cloud/gateway/sample/AdditionalRoutes.kt b/spring-cloud-gateway-sample/src/main/kotlin/org/springframework/cloud/gateway/sample/AdditionalRoutes.kt index 779d15e6..d6321067 100644 --- a/spring-cloud-gateway-sample/src/main/kotlin/org/springframework/cloud/gateway/sample/AdditionalRoutes.kt +++ b/spring-cloud-gateway-sample/src/main/kotlin/org/springframework/cloud/gateway/sample/AdditionalRoutes.kt @@ -32,7 +32,7 @@ open class AdditionalRoutes { @Bean open fun additionalRouteLocator(builder: RouteLocatorBuilder) = builder.routes { route(id = "test-kotlin") { - host("kotlin.abc.org") and path("/image/png") + host("kotlin.abc.org") and path("/anything/kotlinroute") filters { prefixPath("/httpbin") addResponseHeader("X-TestHeader", "foobar") diff --git a/spring-cloud-gateway-sample/src/test/java/org/springframework/cloud/gateway/sample/GatewaySampleApplicationTests.java b/spring-cloud-gateway-sample/src/test/java/org/springframework/cloud/gateway/sample/GatewaySampleApplicationTests.java index fac9e2f1..05335404 100644 --- a/spring-cloud-gateway-sample/src/test/java/org/springframework/cloud/gateway/sample/GatewaySampleApplicationTests.java +++ b/spring-cloud-gateway-sample/src/test/java/org/springframework/cloud/gateway/sample/GatewaySampleApplicationTests.java @@ -22,11 +22,12 @@ import java.util.Map; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledForJreRange; +import org.junit.jupiter.api.condition.JRE; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -42,7 +43,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.core.env.Environment; -import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.reactive.server.WebTestClient; import org.springframework.util.SocketUtils; @@ -52,7 +52,6 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen /** * @author Spencer Gibb */ -@RunWith(SpringRunner.class) @SpringBootTest(classes = { GatewaySampleApplicationTests.TestConfig.class }, webEnvironment = RANDOM_PORT, properties = "management.server.port=${test.port}") public class GatewaySampleApplicationTests { @@ -69,19 +68,19 @@ public class GatewaySampleApplicationTests { protected String baseUri; - @BeforeClass + @BeforeAll public static void beforeClass() { managementPort = SocketUtils.findAvailableTcpPort(); System.setProperty("test.port", String.valueOf(managementPort)); } - @AfterClass + @AfterAll public static void afterClass() { System.clearProperty("test.port"); } - @Before + @BeforeEach public void setup() { baseUri = "http://localhost:" + port; this.webClient = WebTestClient.bindToServer().responseTimeout(Duration.ofSeconds(10)).baseUrl(baseUri).build(); @@ -157,7 +156,13 @@ public class GatewaySampleApplicationTests { public void complexPredicate() { webClient.get().uri("/anything/png").header("Host", "www.abc.org").exchange().expectHeader() .valueEquals("X-TestHeader", "foobar").expectStatus().isOk(); + } + @Test + @DisabledForJreRange(min = JRE.JAVA_16) + public void routeFromKotlin() { + webClient.get().uri("/anything/kotlinroute").header("Host", "kotlin.abc.org").exchange().expectHeader() + .valueEquals("X-TestHeader", "foobar").expectStatus().isOk(); } @Test diff --git a/spring-cloud-gateway-server/pom.xml b/spring-cloud-gateway-server/pom.xml index 5ee25c6b..6ba69a70 100644 --- a/spring-cloud-gateway-server/pom.xml +++ b/spring-cloud-gateway-server/pom.xml @@ -139,40 +139,6 @@ - - - kotlin-maven-plugin - org.jetbrains.kotlin - - 1.8 - - - - compile - - compile - - - - ${project.basedir}/src/main/kotlin - ${project.basedir}/src/main/java - - - - - test-compile - - test-compile - - - - ${project.basedir}/src/test/kotlin - ${project.basedir}/src/test/java - - - - - org.apache.maven.plugins maven-compiler-plugin @@ -223,6 +189,50 @@ + + javaLowerThan16 + + (,16) + + + + + + kotlin-maven-plugin + org.jetbrains.kotlin + + 1.8 + + + + compile + + compile + + + + ${project.basedir}/src/main/kotlin + ${project.basedir}/src/main/java + + + + + test-compile + + test-compile + + + + ${project.basedir}/src/test/kotlin + ${project.basedir}/src/test/java + + + + + + + + java13plus diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/AdhocTestSuite.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/AdhocTestSuite.java index d7a66329..e1e53cc0 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/AdhocTestSuite.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/AdhocTestSuite.java @@ -100,7 +100,7 @@ import static org.junit.Assume.assumeThat; org.springframework.cloud.gateway.route.RouteTests.class, org.springframework.cloud.gateway.route.CachingRouteLocatorTests.class, org.springframework.cloud.gateway.route.RouteRefreshListenerTests.class, - org.springframework.cloud.gateway.route.builder.RouteDslTests.class, + // org.springframework.cloud.gateway.route.builder.RouteDslTests.class, org.springframework.cloud.gateway.route.builder.RouteBuilderTests.class, org.springframework.cloud.gateway.route.builder.GatewayFilterSpecTests.class, org.springframework.cloud.gateway.route.CachingRouteDefinitionLocatorTests.class,