feat: Upgrade to Spring Cloud 2025.1.1. (#1801)

pull/1811/head
gzoldou 6 months ago committed by GitHub
parent 2c436a69b3
commit c5a937c121
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -3,6 +3,7 @@ name: Junit Test
on: on:
push: push:
branches: branches:
- 2025
- 2024 - 2024
- 2023 - 2023
- 2022 - 2022
@ -15,6 +16,7 @@ on:
- '**.md' - '**.md'
pull_request: pull_request:
branches: branches:
- 2025
- 2024 - 2024
- 2023 - 2023
- 2022 - 2022
@ -41,7 +43,9 @@ jobs:
branch_name=${{ github.base_ref }} branch_name=${{ github.base_ref }}
fi fi
echo $branch_name echo $branch_name
if [[ "$branch_name" == "2024" ]]; then if [[ "$branch_name" == "2025" ]]; then
echo "jdks=[17,21,25]" >> $GITHUB_OUTPUT
elif [[ "$branch_name" == "2024" ]]; then
echo "jdks=[17,21]" >> $GITHUB_OUTPUT echo "jdks=[17,21]" >> $GITHUB_OUTPUT
elif [[ "$branch_name" == "2023" ]]; then elif [[ "$branch_name" == "2023" ]]; then
echo "jdks=[17,21]" >> $GITHUB_OUTPUT echo "jdks=[17,21]" >> $GITHUB_OUTPUT

@ -3,6 +3,7 @@ name: License checker
on: on:
push: push:
branches: branches:
- 2025
- 2024 - 2024
- 2023 - 2023
- 2022 - 2022
@ -15,6 +16,7 @@ on:
- '**.md' - '**.md'
pull_request: pull_request:
branches: branches:
- 2025
- 2024 - 2024
- 2023 - 2023
- 2022 - 2022

@ -3,6 +3,7 @@ name: Snapshot
on: on:
push: push:
branches: branches:
- 2025
- 2024 - 2024
- 2023 - 2023
- 2022 - 2022
@ -41,7 +42,9 @@ jobs:
id: set-jdk id: set-jdk
run: | run: |
shopt -s nocasematch shopt -s nocasematch
if [[ "${{ github.ref_name }}" == "2024" ]]; then if [[ "${{ github.ref_name }}" == "2025" ]]; then
echo "jdk=17" >> $GITHUB_OUTPUT
elif [[ "${{ github.ref_name }}" == "2024" ]]; then
echo "jdk=17" >> $GITHUB_OUTPUT echo "jdk=17" >> $GITHUB_OUTPUT
elif [[ "${{ github.ref_name }}" == "2023" ]]; then elif [[ "${{ github.ref_name }}" == "2023" ]]; then
echo "jdk=17" >> $GITHUB_OUTPUT echo "jdk=17" >> $GITHUB_OUTPUT

@ -6,3 +6,4 @@
- [feat: Support Polaris config env value and add related tests](https://github.com/Tencent/spring-cloud-tencent/pull/1797) - [feat: Support Polaris config env value and add related tests](https://github.com/Tencent/spring-cloud-tencent/pull/1797)
- [refactor: modify the initialization of ApplicationContextAwareUtils.](https://github.com/Tencent/spring-cloud-tencent/pull/1798) - [refactor: modify the initialization of ApplicationContextAwareUtils.](https://github.com/Tencent/spring-cloud-tencent/pull/1798)
- [feat: support enable/disable cloud location provider via configuration.](https://github.com/Tencent/spring-cloud-tencent/pull/1799) - [feat: support enable/disable cloud location provider via configuration.](https://github.com/Tencent/spring-cloud-tencent/pull/1799)
- [feat: Upgrade to Spring Cloud 2025.1.1.](https://github.com/Tencent/spring-cloud-tencent/pull/1801)

@ -5,7 +5,7 @@
<parent> <parent>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-build</artifactId> <artifactId>spring-cloud-build</artifactId>
<version>4.2.4</version> <version>5.0.1</version>
<relativePath/> <relativePath/>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@ -90,22 +90,22 @@
<properties> <properties>
<!-- Project revision --> <!-- Project revision -->
<revision>2.1.2.0-2024.0.3-SNAPSHOT</revision> <revision>2.1.2.0-2025.1.1-SNAPSHOT</revision>
<!-- Spring Framework --> <!-- Spring Framework -->
<spring.framework.version>6.2.15</spring.framework.version> <spring.framework.version>7.0.3</spring.framework.version>
<!-- Spring Boot --> <!-- Spring Boot -->
<spring.boot.version>3.4.12</spring.boot.version> <spring.boot.version>4.0.2</spring.boot.version>
<!-- Spring Cloud --> <!-- Spring Cloud -->
<spring.cloud.version>2024.0.3</spring.cloud.version> <spring.cloud.version>2025.1.1</spring.cloud.version>
<!-- Test --> <!-- Test -->
<system-stubs-jupiter.version>2.0.2</system-stubs-jupiter.version> <system-stubs-jupiter.version>2.0.2</system-stubs-jupiter.version>
<!-- Maven Plugin Versions --> <!-- Maven Plugin Versions -->
<jacoco.version>0.8.12</jacoco.version> <jacoco.version>0.8.14</jacoco.version>
<maven-clean-plugin.version>3.4.0</maven-clean-plugin.version> <maven-clean-plugin.version>3.4.0</maven-clean-plugin.version>
<central.publishing.maven.plugin.version>0.8.0</central.publishing.maven.plugin.version> <central.publishing.maven.plugin.version>0.8.0</central.publishing.maven.plugin.version>
@ -193,6 +193,12 @@
<artifactId>reactor-test</artifactId> <artifactId>reactor-test</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>

@ -23,7 +23,7 @@
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId> <artifactId>spring-cloud-starter-gateway-server-webflux</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>

@ -44,7 +44,7 @@ public final class CustomTransitiveMetadataResolver {
Map<String, String> result = new HashMap<>(); Map<String, String> result = new HashMap<>();
HttpHeaders headers = exchange.getRequest().getHeaders(); HttpHeaders headers = exchange.getRequest().getHeaders();
for (Map.Entry<String, List<String>> entry : headers.entrySet()) { for (Map.Entry<String, List<String>> entry : headers.headerSet()) {
String key = entry.getKey(); String key = entry.getKey();
if (StringUtils.isBlank(key)) { if (StringUtils.isBlank(key)) {
continue; continue;

@ -84,7 +84,7 @@ public final class TransHeadersTransfer {
if (transHeaders != null) { if (transHeaders != null) {
String[] transHeaderArray = transHeaders.split(","); String[] transHeaderArray = transHeaders.split(",");
HttpHeaders headers = serverHttpRequest.getHeaders(); HttpHeaders headers = serverHttpRequest.getHeaders();
Set<String> headerKeys = headers.keySet(); Set<String> headerKeys = headers.headerNames();
for (String httpHeader : headerKeys) { for (String httpHeader : headerKeys) {
for (String transHeader : transHeaderArray) { for (String transHeader : transHeaderArray) {
if (transHeader.equals(httpHeader)) { if (transHeader.equals(httpHeader)) {

@ -149,7 +149,7 @@ public final class SnapshotHttpServletRequest implements HttpServletRequest {
@Override @Override
public Enumeration<String> getHeaderNames() { public Enumeration<String> getHeaderNames() {
return Collections.enumeration(headers.keySet()); return Collections.enumeration(headers.headerNames());
} }
@Override @Override

@ -45,7 +45,8 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
@ExtendWith(SpringExtension.class) @ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = MOCK, @SpringBootTest(webEnvironment = MOCK,
classes = DecodeTransferMetadataServletFilterTest.TestApplication.class, classes = DecodeTransferMetadataServletFilterTest.TestApplication.class,
properties = {"spring.config.location = classpath:application-test.yml", "spring.main.web-application-type = reactive"}) properties = {"spring.config.location = classpath:application-test.yml", "spring.main.web-application-type = reactive",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration"})
public class DecodeTransferMetadataReactiveFilterTest { public class DecodeTransferMetadataReactiveFilterTest {
@Autowired @Autowired

@ -46,7 +46,8 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
classes = DecodeTransferMetadataServletFilterTest.TestApplication.class, classes = DecodeTransferMetadataServletFilterTest.TestApplication.class,
properties = {"spring.config.location = classpath:application-test.yml", properties = {"spring.config.location = classpath:application-test.yml",
"spring.main.web-application-type = servlet", "spring.main.web-application-type = servlet",
"spring.cloud.gateway.enabled = false"}) "spring.cloud.gateway.enabled = false",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration"})
public class DecodeTransferMetadataServletFilterTest { public class DecodeTransferMetadataServletFilterTest {
@Autowired @Autowired

@ -49,7 +49,8 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
classes = EncodeTransferMedataFeignInterceptorTest.TestApplication.class, classes = EncodeTransferMedataFeignInterceptorTest.TestApplication.class,
properties = {"server.port=48081", "spring.config.location = classpath:application-test.yml", properties = {"server.port=48081", "spring.config.location = classpath:application-test.yml",
"spring.main.web-application-type = servlet", "spring.main.web-application-type = servlet",
"spring.cloud.gateway.enabled = false"}) "spring.cloud.gateway.enabled = false",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration"})
public class EncodeTransferMedataFeignInterceptorTest { public class EncodeTransferMedataFeignInterceptorTest {
@Autowired @Autowired

@ -44,7 +44,8 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
@SpringBootTest(webEnvironment = RANDOM_PORT, @SpringBootTest(webEnvironment = RANDOM_PORT,
classes = EncodeTransferMedataWebClientFilterTest.TestApplication.class, classes = EncodeTransferMedataWebClientFilterTest.TestApplication.class,
properties = {"spring.config.location = classpath:application-test.yml", properties = {"spring.config.location = classpath:application-test.yml",
"spring.main.web-application-type = reactive"}) "spring.main.web-application-type = reactive",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration"})
public class EncodeTransferMedataWebClientFilterTest { public class EncodeTransferMedataWebClientFilterTest {
@Autowired @Autowired

@ -52,7 +52,8 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
@SpringBootTest(webEnvironment = RANDOM_PORT, @SpringBootTest(webEnvironment = RANDOM_PORT,
classes = EnhancedRestTemplateInterceptorTest.TestApplication.class, classes = EnhancedRestTemplateInterceptorTest.TestApplication.class,
properties = {"spring.config.location = classpath:application-test.yml", properties = {"spring.config.location = classpath:application-test.yml",
"spring.main.web-application-type = reactive"}) "spring.main.web-application-type = reactive",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration"})
public class EnhancedRestTemplateInterceptorTest { public class EnhancedRestTemplateInterceptorTest {
@Autowired @Autowired

@ -42,7 +42,8 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
@ExtendWith(SpringExtension.class) @ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = RANDOM_PORT, @SpringBootTest(webEnvironment = RANDOM_PORT,
classes = DecodeTransferMetadataServletFilterTest.TestApplication.class, classes = DecodeTransferMetadataServletFilterTest.TestApplication.class,
properties = {"spring.config.location = classpath:application-test.yml"}) properties = {"spring.config.location = classpath:application-test.yml",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration"})
public class TransHeadersTransferTest { public class TransHeadersTransferTest {
@AfterAll @AfterAll
static void afterAll() { static void afterAll() {

@ -40,7 +40,7 @@
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId> <artifactId>spring-cloud-starter-gateway-server-webflux</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>

@ -40,7 +40,7 @@ public class PolarisResultToErrorCode implements ResultToErrorCode {
public int onError(Throwable e) { public int onError(Throwable e) {
if (checkClassExist("org.springframework.web.client.RestClientResponseException") if (checkClassExist("org.springframework.web.client.RestClientResponseException")
&& e instanceof RestClientResponseException) { && e instanceof RestClientResponseException) {
return ((RestClientResponseException) e).getRawStatusCode(); return ((RestClientResponseException) e).getStatusCode().value();
} }
else if (checkClassExist("feign.FeignException") else if (checkClassExist("feign.FeignException")
&& e instanceof FeignException) { && e instanceof FeignException) {
@ -48,10 +48,10 @@ public class PolarisResultToErrorCode implements ResultToErrorCode {
} }
else if (checkClassExist("org.springframework.web.reactive.function.client.WebClientResponseException") else if (checkClassExist("org.springframework.web.reactive.function.client.WebClientResponseException")
&& e instanceof WebClientResponseException) { && e instanceof WebClientResponseException) {
return ((WebClientResponseException) e).getRawStatusCode(); return ((WebClientResponseException) e).getStatusCode().value();
} }
else if (e instanceof CircuitBreakerStatusCodeException) { else if (e instanceof CircuitBreakerStatusCodeException) {
return ((CircuitBreakerStatusCodeException) e).getRawStatusCode(); return ((CircuitBreakerStatusCodeException) e).getStatusCode().value();
} }
return -1; return -1;
} }

@ -80,7 +80,7 @@ public class ExceptionCircuitBreakerReporter implements EnhancedPlugin {
EnhancedRequestContext request = context.getRequest(); EnhancedRequestContext request = context.getRequest();
ServiceInstance serviceInstance = Optional.ofNullable(context.getTargetServiceInstance()) ServiceInstance serviceInstance = Optional.ofNullable(context.getTargetServiceInstance())
.orElse(new DefaultServiceInstance()); .orElse(new DefaultServiceInstance(null, null, null, 0, false));
ResourceStat resourceStat = PolarisEnhancedPluginUtils.createInstanceResourceStat( ResourceStat resourceStat = PolarisEnhancedPluginUtils.createInstanceResourceStat(
serviceInstance.getServiceId(), serviceInstance.getServiceId(),

@ -84,7 +84,7 @@ public class SuccessCircuitBreakerReporter implements EnhancedPlugin {
EnhancedRequestContext request = context.getRequest(); EnhancedRequestContext request = context.getRequest();
EnhancedResponseContext response = context.getResponse(); EnhancedResponseContext response = context.getResponse();
ServiceInstance serviceInstance = Optional.ofNullable(context.getTargetServiceInstance()) ServiceInstance serviceInstance = Optional.ofNullable(context.getTargetServiceInstance())
.orElse(new DefaultServiceInstance()); .orElse(new DefaultServiceInstance(null, null, null, 0, false));
ResourceStat resourceStat = PolarisEnhancedPluginUtils.createInstanceResourceStat( ResourceStat resourceStat = PolarisEnhancedPluginUtils.createInstanceResourceStat(
serviceInstance.getServiceId(), serviceInstance.getServiceId(),

@ -44,7 +44,7 @@ public class PolarisCircuitBreakerHttpResponseTest {
assertThat(response.getStatusCode().value()).isEqualTo(200); assertThat(response.getStatusCode().value()).isEqualTo(200);
assertThat(response.getHeaders()).isNotNull(); assertThat(response.getHeaders()).isNotNull();
assertThat(response.getHeaders()).isEmpty(); assertThat(response.getHeaders().isEmpty()).isTrue();
assertThat(response.getBody()).isNull(); assertThat(response.getBody()).isNull();
} }
@ -55,7 +55,7 @@ public class PolarisCircuitBreakerHttpResponseTest {
assertThat(response.getStatusCode().value()).isEqualTo(200); assertThat(response.getStatusCode().value()).isEqualTo(200);
assertThat(response.getHeaders()).isNotNull(); assertThat(response.getHeaders()).isNotNull();
assertThat(response.getHeaders()).isEmpty(); assertThat(response.getHeaders().isEmpty()).isTrue();
assertThat(response.getBody()).isNotNull(); assertThat(response.getBody()).isNotNull();
} }
@ -71,8 +71,8 @@ public class PolarisCircuitBreakerHttpResponseTest {
assertThat(response.getStatusCode().value()).isEqualTo(200); assertThat(response.getStatusCode().value()).isEqualTo(200);
assertThat(response.getHeaders()).isNotNull(); assertThat(response.getHeaders()).isNotNull();
assertThat(response.getHeaders().size()).isEqualTo(2); assertThat(response.getHeaders().size()).isEqualTo(2);
assertThat(response.getHeaders()).containsKey("Content-Type"); assertThat(response.getHeaders().containsHeader("Content-Type")).isTrue();
assertThat(response.getHeaders()).containsKey("Authorization"); assertThat(response.getHeaders().containsHeader("Authorization")).isTrue();
assertThat(response.getBody()).isNotNull(); assertThat(response.getBody()).isNotNull();
} }
@ -87,7 +87,7 @@ public class PolarisCircuitBreakerHttpResponseTest {
assertThat(response.getStatusCode().value()).isEqualTo(200); assertThat(response.getStatusCode().value()).isEqualTo(200);
assertThat(response.getFallbackInfo()).isEqualTo(fallbackInfo); assertThat(response.getFallbackInfo()).isEqualTo(fallbackInfo);
assertThat(response.getHeaders()).isNotNull(); assertThat(response.getHeaders()).isNotNull();
assertThat(response.getHeaders()).containsKey("Content-Type"); assertThat(response.getHeaders().containsHeader("Content-Type")).isTrue();
assertThat(response.getBody()).isNotNull(); assertThat(response.getBody()).isNotNull();
} }

@ -125,7 +125,7 @@ public class CircuitBreakerPluginTest {
EnhancedResponseContext response = EnhancedResponseContext.builder() EnhancedResponseContext response = EnhancedResponseContext.builder()
.httpStatus(200) .httpStatus(200)
.build(); .build();
DefaultServiceInstance serviceInstance = new DefaultServiceInstance(); DefaultServiceInstance serviceInstance = new DefaultServiceInstance(null, null, null, 0, false);
serviceInstance.setServiceId(SERVICE_PROVIDER); serviceInstance.setServiceId(SERVICE_PROVIDER);
pluginContext.setRequest(request); pluginContext.setRequest(request);
@ -157,7 +157,7 @@ public class CircuitBreakerPluginTest {
EnhancedResponseContext response = EnhancedResponseContext.builder() EnhancedResponseContext response = EnhancedResponseContext.builder()
.httpStatus(200) .httpStatus(200)
.build(); .build();
DefaultServiceInstance serviceInstance = new DefaultServiceInstance(); DefaultServiceInstance serviceInstance = new DefaultServiceInstance(null, null, null, 0, false);
serviceInstance.setServiceId(SERVICE_PROVIDER); serviceInstance.setServiceId(SERVICE_PROVIDER);
pluginContext.setRequest(request); pluginContext.setRequest(request);

@ -122,7 +122,7 @@ public class ExceptionCircuitBreakerReporterTest {
EnhancedResponseContext response = EnhancedResponseContext.builder() EnhancedResponseContext response = EnhancedResponseContext.builder()
.httpStatus(200) .httpStatus(200)
.build(); .build();
DefaultServiceInstance serviceInstance = new DefaultServiceInstance(); DefaultServiceInstance serviceInstance = new DefaultServiceInstance(null, null, null, 0, false);
serviceInstance.setServiceId(SERVICE_PROVIDER); serviceInstance.setServiceId(SERVICE_PROVIDER);
pluginContext.setRequest(request); pluginContext.setRequest(request);
@ -162,7 +162,7 @@ public class ExceptionCircuitBreakerReporterTest {
EnhancedResponseContext response = EnhancedResponseContext.builder() EnhancedResponseContext response = EnhancedResponseContext.builder()
.httpStatus(300) .httpStatus(300)
.build(); .build();
DefaultServiceInstance serviceInstance = new DefaultServiceInstance(); DefaultServiceInstance serviceInstance = new DefaultServiceInstance(null, null, null, 0, false);
serviceInstance.setServiceId(SERVICE_PROVIDER); serviceInstance.setServiceId(SERVICE_PROVIDER);
pluginContext.setRequest(request); pluginContext.setRequest(request);
@ -197,7 +197,7 @@ public class ExceptionCircuitBreakerReporterTest {
EnhancedResponseContext response = EnhancedResponseContext.builder() EnhancedResponseContext response = EnhancedResponseContext.builder()
.httpStatus(300) .httpStatus(300)
.build(); .build();
DefaultServiceInstance serviceInstance = new DefaultServiceInstance(); DefaultServiceInstance serviceInstance = new DefaultServiceInstance(null, null, null, 0, false);
serviceInstance.setServiceId(SERVICE_PROVIDER); serviceInstance.setServiceId(SERVICE_PROVIDER);
pluginContext.setRequest(request); pluginContext.setRequest(request);

@ -137,7 +137,7 @@ public class SuccessCircuitBreakerReporterTest {
EnhancedResponseContext response = EnhancedResponseContext.builder() EnhancedResponseContext response = EnhancedResponseContext.builder()
.httpStatus(200) .httpStatus(200)
.build(); .build();
DefaultServiceInstance serviceInstance = new DefaultServiceInstance(); DefaultServiceInstance serviceInstance = new DefaultServiceInstance(null, null, null, 0, false);
serviceInstance.setServiceId(SERVICE_PROVIDER); serviceInstance.setServiceId(SERVICE_PROVIDER);
pluginContext.setRequest(request); pluginContext.setRequest(request);
@ -176,7 +176,7 @@ public class SuccessCircuitBreakerReporterTest {
EnhancedResponseContext response = EnhancedResponseContext.builder() EnhancedResponseContext response = EnhancedResponseContext.builder()
.httpStatus(300) .httpStatus(300)
.build(); .build();
DefaultServiceInstance serviceInstance = new DefaultServiceInstance(); DefaultServiceInstance serviceInstance = new DefaultServiceInstance(null, null, null, 0, false);
serviceInstance.setServiceId(SERVICE_PROVIDER); serviceInstance.setServiceId(SERVICE_PROVIDER);
pluginContext.setRequest(request); pluginContext.setRequest(request);
@ -210,7 +210,7 @@ public class SuccessCircuitBreakerReporterTest {
EnhancedResponseContext response = EnhancedResponseContext.builder() EnhancedResponseContext response = EnhancedResponseContext.builder()
.httpStatus(300) .httpStatus(300)
.build(); .build();
DefaultServiceInstance serviceInstance = new DefaultServiceInstance(); DefaultServiceInstance serviceInstance = new DefaultServiceInstance(null, null, null, 0, false);
serviceInstance.setServiceId(SERVICE_PROVIDER); serviceInstance.setServiceId(SERVICE_PROVIDER);
pluginContext.setRequest(request); pluginContext.setRequest(request);

@ -35,8 +35,8 @@ import com.tencent.polaris.client.api.SDKContext;
import com.tencent.polaris.factory.config.ConfigurationImpl; import com.tencent.polaris.factory.config.ConfigurationImpl;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.springframework.boot.BootstrapRegistry; import org.springframework.boot.bootstrap.BootstrapRegistry;
import org.springframework.boot.ConfigurableBootstrapContext; import org.springframework.boot.bootstrap.ConfigurableBootstrapContext;
import org.springframework.boot.context.config.ConfigDataLocation; import org.springframework.boot.context.config.ConfigDataLocation;
import org.springframework.boot.context.config.ConfigDataLocationNotFoundException; import org.springframework.boot.context.config.ConfigDataLocationNotFoundException;
import org.springframework.boot.context.config.ConfigDataLocationResolver; import org.springframework.boot.context.config.ConfigDataLocationResolver;

@ -8,6 +8,6 @@ org.springframework.boot.context.config.ConfigDataLoader=\
com.tencent.cloud.polaris.config.configdata.PolarisConfigDataLoader com.tencent.cloud.polaris.config.configdata.PolarisConfigDataLoader
org.springframework.boot.diagnostics.FailureAnalyzer=\ org.springframework.boot.diagnostics.FailureAnalyzer=\
com.tencent.cloud.polaris.config.configdata.PolarisImportExceptionFailureAnalyzer com.tencent.cloud.polaris.config.configdata.PolarisImportExceptionFailureAnalyzer
org.springframework.boot.env.EnvironmentPostProcessor=\ org.springframework.boot.EnvironmentPostProcessor=\
com.tencent.cloud.polaris.config.configdata.PolarisConfigDataMissingEnvironmentPostProcessor com.tencent.cloud.polaris.config.configdata.PolarisConfigDataMissingEnvironmentPostProcessor

@ -211,7 +211,7 @@ public class SpringValueProcessorTest {
} }
@Component @Component
private static class ValueTest { private static final class ValueTest {
private static String name; private static String name;
@Value("${timeout:1000}") @Value("${timeout:1000}")
private int timeout; private int timeout;

@ -24,7 +24,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.common.metadata.MetadataContext;
import com.tencent.cloud.common.util.GzipUtil; import com.tencent.cloud.common.util.GzipUtil;
import com.tencent.cloud.polaris.PolarisDiscoveryProperties; import com.tencent.cloud.polaris.PolarisDiscoveryProperties;
@ -46,6 +45,7 @@ import org.springdoc.api.AbstractOpenApiResourceUtil;
import org.springdoc.core.providers.ObjectMapperProvider; import org.springdoc.core.providers.ObjectMapperProvider;
import org.springdoc.webflux.api.OpenApiWebFluxUtil; import org.springdoc.webflux.api.OpenApiWebFluxUtil;
import org.springdoc.webmvc.api.OpenApiWebMvcUtil; import org.springdoc.webmvc.api.OpenApiWebMvcUtil;
import tools.jackson.databind.json.JsonMapper;
import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener; import org.springframework.context.ApplicationListener;
@ -115,8 +115,9 @@ public class PolarisContractReporter implements ApplicationListener<ApplicationR
jsonValue = springdocObjectMapperProvider.jsonMapper().writeValueAsString(openAPI); jsonValue = springdocObjectMapperProvider.jsonMapper().writeValueAsString(openAPI);
} }
else { else {
ObjectMapper mapper = new ObjectMapper(); JsonMapper mapper = JsonMapper.builder()
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); .changeDefaultPropertyInclusion(incl -> incl.withValueInclusion(JsonInclude.Include.NON_NULL))
.build();
jsonValue = mapper.writeValueAsString(openAPI); jsonValue = mapper.writeValueAsString(openAPI);
} }
String serviceApiMeta = GzipUtil.compressBase64Encode(jsonValue, "utf-8"); String serviceApiMeta = GzipUtil.compressBase64Encode(jsonValue, "utf-8");
@ -159,8 +160,9 @@ public class PolarisContractReporter implements ApplicationListener<ApplicationR
jsonValue = springdocObjectMapperProvider.jsonMapper().writeValueAsString(o.getValue()); jsonValue = springdocObjectMapperProvider.jsonMapper().writeValueAsString(o.getValue());
} }
else { else {
ObjectMapper mapper = new ObjectMapper(); JsonMapper mapper = JsonMapper.builder()
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); .changeDefaultPropertyInclusion(incl -> incl.withValueInclusion(JsonInclude.Include.NON_NULL))
.build();
jsonValue = mapper.writeValueAsString(o.getValue()); jsonValue = mapper.writeValueAsString(o.getValue());
} }
interfaceDescriptor.setContent(GzipUtil.compressBase64Encode(jsonValue, "utf-8")); interfaceDescriptor.setContent(GzipUtil.compressBase64Encode(jsonValue, "utf-8"));

@ -20,7 +20,6 @@ package com.tencent.cloud.polaris.contract.tsf;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.tencent.cloud.common.util.GzipUtil; import com.tencent.cloud.common.util.GzipUtil;
import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.OpenAPI;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -30,6 +29,7 @@ import org.springdoc.api.AbstractOpenApiResourceUtil;
import org.springdoc.core.providers.ObjectMapperProvider; import org.springdoc.core.providers.ObjectMapperProvider;
import org.springdoc.webflux.api.OpenApiWebFluxUtil; import org.springdoc.webflux.api.OpenApiWebFluxUtil;
import org.springdoc.webmvc.api.OpenApiWebMvcUtil; import org.springdoc.webmvc.api.OpenApiWebMvcUtil;
import tools.jackson.databind.json.JsonMapper;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.SmartLifecycle; import org.springframework.context.SmartLifecycle;
@ -89,8 +89,9 @@ public class TsfApiMetadataGrapher implements SmartLifecycle {
jsonValue = springdocObjectMapperProvider.jsonMapper().writeValueAsString(openAPI); jsonValue = springdocObjectMapperProvider.jsonMapper().writeValueAsString(openAPI);
} }
else { else {
ObjectMapper mapper = new ObjectMapper(); JsonMapper mapper = JsonMapper.builder()
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); .changeDefaultPropertyInclusion(incl -> incl.withValueInclusion(JsonInclude.Include.NON_NULL))
.build();
jsonValue = mapper.writeValueAsString(openAPI); jsonValue = mapper.writeValueAsString(openAPI);
} }
if (openAPI != null && !StringUtils.isEmpty(jsonValue)) { if (openAPI != null && !StringUtils.isEmpty(jsonValue)) {

@ -53,7 +53,7 @@
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId> <artifactId>spring-boot-starter-actuator</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>

@ -47,7 +47,7 @@ public class PolarisReactiveDiscoveryClientConfiguration {
} }
@Bean @Bean
@ConditionalOnClass(name = "org.springframework.boot.actuate.health.ReactiveHealthIndicator") @ConditionalOnClass(name = "org.springframework.boot.health.contributor.ReactiveHealthIndicator")
@ConditionalOnDiscoveryHealthIndicatorEnabled @ConditionalOnDiscoveryHealthIndicatorEnabled
public ReactiveDiscoveryClientHealthIndicator polarisReactiveDiscoveryClientHealthIndicator( public ReactiveDiscoveryClientHealthIndicator polarisReactiveDiscoveryClientHealthIndicator(
PolarisReactiveDiscoveryClient client, DiscoveryClientHealthIndicatorProperties properties) { PolarisReactiveDiscoveryClient client, DiscoveryClientHealthIndicatorProperties properties) {

@ -31,6 +31,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration; import org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration;
import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties;
import org.springframework.cloud.client.serviceregistry.ServiceRegistry; import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
import org.springframework.context.ApplicationContext;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
/** /**
@ -49,13 +50,14 @@ public class PolarisAutoServiceRegistration extends AbstractAutoServiceRegistrat
private final AssemblyAPI assemblyAPI; private final AssemblyAPI assemblyAPI;
public PolarisAutoServiceRegistration( public PolarisAutoServiceRegistration(
ApplicationContext context,
ServiceRegistry<PolarisRegistration> serviceRegistry, ServiceRegistry<PolarisRegistration> serviceRegistry,
AutoServiceRegistrationProperties autoServiceRegistrationProperties, AutoServiceRegistrationProperties autoServiceRegistrationProperties,
PolarisRegistration registration, PolarisRegistration registration,
PolarisDiscoveryProperties polarisDiscoveryProperties, PolarisDiscoveryProperties polarisDiscoveryProperties,
AssemblyAPI assemblyAPI AssemblyAPI assemblyAPI
) { ) {
super(serviceRegistry, autoServiceRegistrationProperties); super(context, serviceRegistry, autoServiceRegistrationProperties);
this.registration = registration; this.registration = registration;
this.polarisDiscoveryProperties = polarisDiscoveryProperties; this.polarisDiscoveryProperties = polarisDiscoveryProperties;
this.assemblyAPI = assemblyAPI; this.assemblyAPI = assemblyAPI;

@ -31,9 +31,9 @@ import com.tencent.polaris.api.utils.CollectionUtils;
import com.tencent.polaris.api.utils.StringUtils; import com.tencent.polaris.api.utils.StringUtils;
import com.tencent.polaris.client.api.SDKContext; import com.tencent.polaris.client.api.SDKContext;
import org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext; import org.springframework.boot.web.server.reactive.context.ReactiveWebServerApplicationContext;
import org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext; import org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext;
import org.springframework.cloud.client.DefaultServiceInstance; import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.serviceregistry.Registration; import org.springframework.cloud.client.serviceregistry.Registration;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
/** /**
@ -180,7 +180,7 @@ public class PolarisRegistration implements Registration {
@Override @Override
public URI getUri() { public URI getUri() {
return DefaultServiceInstance.getUri(this); return ServiceInstance.createUri(this);
} }
@Override @Override

@ -34,11 +34,12 @@ import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext; import org.springframework.boot.web.server.reactive.context.ReactiveWebServerApplicationContext;
import org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext; import org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext;
import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration;
import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties;
import org.springframework.cloud.client.serviceregistry.ServiceRegistryAutoConfiguration; import org.springframework.cloud.client.serviceregistry.ServiceRegistryAutoConfiguration;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@ -81,13 +82,14 @@ public class PolarisServiceRegistryAutoConfiguration {
@Bean @Bean
public PolarisAutoServiceRegistration polarisAutoServiceRegistration( public PolarisAutoServiceRegistration polarisAutoServiceRegistration(
ApplicationContext context,
PolarisServiceRegistry registry, PolarisServiceRegistry registry,
AutoServiceRegistrationProperties autoServiceRegistrationProperties, AutoServiceRegistrationProperties autoServiceRegistrationProperties,
PolarisRegistration registration, PolarisRegistration registration,
PolarisDiscoveryProperties polarisDiscoveryProperties, PolarisDiscoveryProperties polarisDiscoveryProperties,
PolarisSDKContextManager polarisSDKContextManager PolarisSDKContextManager polarisSDKContextManager
) { ) {
return new PolarisAutoServiceRegistration(registry, autoServiceRegistrationProperties, registration, return new PolarisAutoServiceRegistration(context, registry, autoServiceRegistrationProperties, registration,
polarisDiscoveryProperties, polarisSDKContextManager.getAssemblyAPI()); polarisDiscoveryProperties, polarisSDKContextManager.getAssemblyAPI());
} }

@ -30,6 +30,7 @@ import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationP
import org.springframework.cloud.client.serviceregistry.ServiceRegistry; import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.mock.env.MockEnvironment;
import static com.tencent.polaris.test.common.Consts.SERVICE_PROVIDER; import static com.tencent.polaris.test.common.Consts.SERVICE_PROVIDER;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@ -73,12 +74,15 @@ public class PolarisAutoServiceRegistrationTest {
doNothing().when(serviceRegistry).register(nullable(PolarisRegistration.class)); doNothing().when(serviceRegistry).register(nullable(PolarisRegistration.class));
doNothing().when(serviceRegistry).deregister(nullable(PolarisRegistration.class)); doNothing().when(serviceRegistry).deregister(nullable(PolarisRegistration.class));
// Use MockEnvironment to simulate real Spring environment
MockEnvironment mockEnvironment = new MockEnvironment();
mockEnvironment.setProperty("spring.application.name", "application");
doReturn(mockEnvironment).when(applicationContext).getEnvironment();
polarisAutoServiceRegistration = polarisAutoServiceRegistration =
new PolarisAutoServiceRegistration(serviceRegistry, autoServiceRegistrationProperties, registration, new PolarisAutoServiceRegistration(applicationContext, serviceRegistry, autoServiceRegistrationProperties, registration,
polarisDiscoveryProperties, null); polarisDiscoveryProperties, null);
doReturn(environment).when(applicationContext).getEnvironment();
polarisAutoServiceRegistration.setApplicationContext(applicationContext);
} }
@Test @Test

@ -36,9 +36,9 @@ import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings; import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness; import org.mockito.quality.Strictness;
import org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext;
import org.springframework.boot.web.server.WebServer; import org.springframework.boot.web.server.WebServer;
import org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext; import org.springframework.boot.web.server.reactive.context.ReactiveWebServerApplicationContext;
import org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext;
import static com.tencent.polaris.test.common.Consts.HOST; import static com.tencent.polaris.test.common.Consts.HOST;
import static com.tencent.polaris.test.common.Consts.PORT; import static com.tencent.polaris.test.common.Consts.PORT;

@ -38,11 +38,11 @@ import shade.polaris.com.google.protobuf.StringValue;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
import org.springframework.test.context.bean.override.mockito.MockitoBean;
import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.web.client.HttpClientErrorException.TooManyRequests; import org.springframework.web.client.HttpClientErrorException.TooManyRequests;
import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestClientException;
@ -77,7 +77,7 @@ public class CalleeControllerTests {
@Autowired @Autowired
private RestTemplate restTemplate; private RestTemplate restTemplate;
@MockBean @MockitoBean
private LimitAPI limitAPI; private LimitAPI limitAPI;
@BeforeAll @BeforeAll

@ -50,7 +50,6 @@ import shade.polaris.com.google.protobuf.util.JsonFormat;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.mock.http.server.reactive.MockServerHttpRequest; import org.springframework.mock.http.server.reactive.MockServerHttpRequest;
import org.springframework.mock.web.server.MockServerWebExchange; import org.springframework.mock.web.server.MockServerWebExchange;
@ -182,8 +181,7 @@ public class QuotaCheckReactiveFilterTest {
ServerWebExchange testApp3Exchange = MockServerWebExchange.from(request); ServerWebExchange testApp3Exchange = MockServerWebExchange.from(request);
quotaCheckReactiveFilter.filter(testApp3Exchange, webFilterChain); quotaCheckReactiveFilter.filter(testApp3Exchange, webFilterChain);
ServerHttpResponse response = testApp3Exchange.getResponse(); ServerHttpResponse response = testApp3Exchange.getResponse();
assertThat(response.getRawStatusCode()).isEqualTo(419); assertThat(response.getStatusCode().value()).isEqualTo(419);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.INSUFFICIENT_SPACE_ON_RESOURCE);
assertThat(response.getHeaders() assertThat(response.getHeaders()
.get(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME)).isEqualTo(Collections.singletonList("MOCK_RULE")); .get(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME)).isEqualTo(Collections.singletonList("MOCK_RULE"));
@ -227,7 +225,7 @@ public class QuotaCheckReactiveFilterTest {
MetadataContext.LOCAL_SERVICE = "TestApp3"; MetadataContext.LOCAL_SERVICE = "TestApp3";
quotaCheckWithRateLimiterLimitedFallbackReactiveFilter.filter(exchange, webFilterChain); quotaCheckWithRateLimiterLimitedFallbackReactiveFilter.filter(exchange, webFilterChain);
ServerHttpResponse response = exchange.getResponse(); ServerHttpResponse response = exchange.getResponse();
assertThat(response.getRawStatusCode()).isEqualTo(polarisRateLimiterLimitedFallback.rejectHttpCode()); assertThat(response.getStatusCode().value()).isEqualTo(polarisRateLimiterLimitedFallback.rejectHttpCode());
assertThat(response.getHeaders().getContentType()).isEqualTo(polarisRateLimiterLimitedFallback.mediaType()); assertThat(response.getHeaders().getContentType()).isEqualTo(polarisRateLimiterLimitedFallback.mediaType());
// Exception // Exception

@ -36,7 +36,7 @@
<!-- spring cloud gateway dependencies start --> <!-- spring cloud gateway dependencies start -->
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gateway-server</artifactId> <artifactId>spring-cloud-gateway-server-webflux</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
@ -50,7 +50,7 @@
<!-- spring cloud gateway mvc dependencies start --> <!-- spring cloud gateway mvc dependencies start -->
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gateway-server-mvc</artifactId> <artifactId>spring-cloud-gateway-server-webmvc</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<!-- spring cloud gateway mvc dependencies end --> <!-- spring cloud gateway mvc dependencies end -->

@ -46,6 +46,7 @@ public class LoadBalancerConfigurationTest {
contextRunner.withConfiguration(AutoConfigurations.of( contextRunner.withConfiguration(AutoConfigurations.of(
PolarisContextAutoConfiguration.class, PolarisContextAutoConfiguration.class,
LoadBalancerConfiguration.class)) LoadBalancerConfiguration.class))
.withPropertyValues("loadbalancer.client.name=test")
.run(context -> { .run(context -> {
assertThat(context).hasSingleBean(LoadBalancerConfiguration.class); assertThat(context).hasSingleBean(LoadBalancerConfiguration.class);
}); });
@ -59,6 +60,7 @@ public class LoadBalancerConfigurationTest {
.withBean(SimpleReactiveDiscoveryProperties.class) .withBean(SimpleReactiveDiscoveryProperties.class)
.withBean(SimpleReactiveDiscoveryClient.class) .withBean(SimpleReactiveDiscoveryClient.class)
.withBean(PolarisInstanceTransformer.class) .withBean(PolarisInstanceTransformer.class)
.withPropertyValues("loadbalancer.client.name=test")
.run(context -> { .run(context -> {
assertThat(context).hasSingleBean(LoadBalancerConfiguration.PolarisReactiveSupportConfiguration.class); assertThat(context).hasSingleBean(LoadBalancerConfiguration.PolarisReactiveSupportConfiguration.class);
assertThat(context).hasSingleBean(ReactiveDiscoveryClient.class); assertThat(context).hasSingleBean(ReactiveDiscoveryClient.class);
@ -75,6 +77,7 @@ public class LoadBalancerConfigurationTest {
.withBean(SimpleDiscoveryProperties.class) .withBean(SimpleDiscoveryProperties.class)
.withBean(SimpleDiscoveryClient.class) .withBean(SimpleDiscoveryClient.class)
.withBean(PolarisInstanceTransformer.class) .withBean(PolarisInstanceTransformer.class)
.withPropertyValues("loadbalancer.client.name=test")
.run(context -> { .run(context -> {
assertThat(context).hasSingleBean(LoadBalancerConfiguration.PolarisBlockingSupportConfiguration.class); assertThat(context).hasSingleBean(LoadBalancerConfiguration.PolarisBlockingSupportConfiguration.class);
assertThat(context).hasSingleBean(DiscoveryClient.class); assertThat(context).hasSingleBean(DiscoveryClient.class);

@ -48,7 +48,8 @@ import static org.mockito.Mockito.mock;
*/ */
@ExtendWith(SpringExtension.class) @ExtendWith(SpringExtension.class)
@SpringBootTest(classes = RouterLabelFeignInterceptorTest.TestApplication.class, @SpringBootTest(classes = RouterLabelFeignInterceptorTest.TestApplication.class,
properties = {"spring.cloud.polaris.namespace=test", "spring.application.name=test", "spring.cloud.gateway.enabled=false"}) properties = {"spring.cloud.polaris.namespace=test", "spring.application.name=test", "spring.cloud.gateway.enabled=false",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration"})
public class RouterLabelFeignInterceptorTest { public class RouterLabelFeignInterceptorTest {
@Test @Test

@ -31,6 +31,7 @@ import io.netty.handler.codec.http.HttpHeaderNames;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
@ -53,9 +54,10 @@ import static org.mockito.Mockito.when;
* *
* @author liuye, Haotian Zhang * @author liuye, Haotian Zhang
*/ */
@ExtendWith(SpringExtension.class) @ExtendWith({SpringExtension.class, MockitoExtension.class})
@SpringBootTest(classes = RouterLabelRestTemplateInterceptorTest.TestApplication.class, @SpringBootTest(classes = RouterLabelRestTemplateInterceptorTest.TestApplication.class,
properties = {"spring.cloud.polaris.namespace=test", "spring.application.name=test", "spring.cloud.gateway.enabled=false"}) properties = {"spring.cloud.polaris.namespace=test", "spring.application.name=test", "spring.cloud.gateway.enabled=false",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration"})
public class RouterLabelRestTemplateInterceptorTest { public class RouterLabelRestTemplateInterceptorTest {
@Mock @Mock

@ -47,7 +47,8 @@ import static org.springframework.cloud.gateway.server.mvc.filter.FormFilter.FOR
*/ */
@ExtendWith(SpringExtension.class) @ExtendWith(SpringExtension.class)
@SpringBootTest(classes = RouterLabelMvcFilterTest.TestApplication.class, @SpringBootTest(classes = RouterLabelMvcFilterTest.TestApplication.class,
properties = {"spring.cloud.polaris.namespace=test", "spring.application.name=test", "spring.main.web-application-type=servlet", "spring.cloud.gateway.enabled=false"}) properties = {"spring.cloud.polaris.namespace=test", "spring.application.name=test", "spring.main.web-application-type=servlet", "spring.cloud.gateway.enabled=false",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration"})
public class RouterLabelMvcFilterTest { public class RouterLabelMvcFilterTest {
@Test @Test

@ -65,7 +65,7 @@
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId> <artifactId>spring-cloud-starter-gateway-server-webflux</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
@ -87,6 +87,11 @@
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-web-server</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator-autoconfigure</artifactId> <artifactId>spring-boot-actuator-autoconfigure</artifactId>

@ -26,7 +26,6 @@ import com.tencent.polaris.api.pojo.Instance;
import com.tencent.polaris.api.utils.CollectionUtils; import com.tencent.polaris.api.utils.CollectionUtils;
import com.tencent.polaris.api.utils.StringUtils; import com.tencent.polaris.api.utils.StringUtils;
import org.springframework.cloud.client.DefaultServiceInstance;
import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.ServiceInstance;
/** /**
@ -94,7 +93,7 @@ public class PolarisServiceInstance implements ServiceInstance {
@Override @Override
public URI getUri() { public URI getUri() {
return DefaultServiceInstance.getUri(this); return ServiceInstance.createUri(this);
} }
@Override @Override

@ -22,14 +22,14 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import tools.jackson.core.JacksonException;
import tools.jackson.core.type.TypeReference;
import tools.jackson.databind.DeserializationFeature;
import tools.jackson.databind.JavaType;
import tools.jackson.databind.ObjectWriter;
import tools.jackson.databind.json.JsonMapper;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -43,12 +43,12 @@ public final class JacksonUtils {
/** /**
* Object Mapper. * Object Mapper.
*/ */
public static final ObjectMapper OM = new ObjectMapper(); public static final JsonMapper OM = new JsonMapper();
private static final Logger LOG = LoggerFactory.getLogger(JacksonUtils.class); private static final Logger LOG = LoggerFactory.getLogger(JacksonUtils.class);
static { static {
OM.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); OM.rebuild().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
} }
private JacksonUtils() { private JacksonUtils() {
@ -81,7 +81,7 @@ public final class JacksonUtils {
return OM.writeValueAsString(object); return OM.writeValueAsString(object);
} }
} }
catch (JsonProcessingException e) { catch (JacksonException e) {
LOG.error("Object to Json failed. {}", object, e); LOG.error("Object to Json failed. {}", object, e);
throw new RuntimeException("Object to Json failed.", e); throw new RuntimeException("Object to Json failed.", e);
} }
@ -91,7 +91,7 @@ public final class JacksonUtils {
try { try {
return OM.readValue(jsonStr, type); return OM.readValue(jsonStr, type);
} }
catch (JsonProcessingException e) { catch (JacksonException e) {
LOG.error("Json to object failed. {}", type, e); LOG.error("Json to object failed. {}", type, e);
throw new RuntimeException("Json to object failed.", e); throw new RuntimeException("Json to object failed.", e);
} }
@ -101,7 +101,7 @@ public final class JacksonUtils {
try { try {
return OM.readValue(jsonStr, typeReference); return OM.readValue(jsonStr, typeReference);
} }
catch (JsonProcessingException e) { catch (JacksonException e) {
LOG.error("Json to object failed. {}", typeReference, e); LOG.error("Json to object failed. {}", typeReference, e);
throw new RuntimeException("Json to object failed.", e); throw new RuntimeException("Json to object failed.", e);
} }
@ -138,7 +138,7 @@ public final class JacksonUtils {
} }
return new HashMap<>(); return new HashMap<>();
} }
catch (JsonProcessingException e) { catch (JacksonException e) {
LOG.error( LOG.error(
"Json to map failed. check if the format of the json string[{}] is correct.", jsonStr, e); "Json to map failed. check if the format of the json string[{}] is correct.", jsonStr, e);
throw new RuntimeException("Json to map failed.", e); throw new RuntimeException("Json to map failed.", e);

@ -40,7 +40,7 @@ public class Tag implements Serializable {
public Tag(String key, String value, ControlFlag... flags) { public Tag(String key, String value, ControlFlag... flags) {
this.key = key; this.key = key;
this.value = value; this.value = value;
this.flags = new HashSet<>(Arrays.asList(flags)); this.flags = flags != null ? new HashSet<>(Arrays.asList(flags)) : new HashSet<>();
} }
public Tag() { public Tag() {

@ -35,7 +35,8 @@ import static org.assertj.core.api.Assertions.assertThat;
@ExtendWith(SpringExtension.class) @ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = PolarisAsyncPropertiesTest.TestApplication.class, classes = PolarisAsyncPropertiesTest.TestApplication.class,
properties = {"spring.config.location = classpath:application-test.yml"}) properties = {"spring.config.location = classpath:application-test.yml",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration"})
public class PolarisAsyncPropertiesTest { public class PolarisAsyncPropertiesTest {
@Autowired @Autowired

@ -37,7 +37,8 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = MetadataContextHolderTest.TestApplication.class, classes = MetadataContextHolderTest.TestApplication.class,
properties = {"spring.config.location = classpath:application-test.yml", properties = {"spring.config.location = classpath:application-test.yml",
"spring.main.web-application-type = reactive"}) "spring.main.web-application-type = reactive",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration"})
public class MetadataContextHolderTest { public class MetadataContextHolderTest {
@Test @Test

@ -39,7 +39,8 @@ import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = MetadataContextTest.TestApplication.class, classes = MetadataContextTest.TestApplication.class,
properties = {"spring.config.location = classpath:application-test.yml", properties = {"spring.config.location = classpath:application-test.yml",
"spring.main.web-application-type = reactive"}) "spring.main.web-application-type = reactive",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration"})
public class MetadataContextTest { public class MetadataContextTest {
private MetadataContext metadataContext; private MetadataContext metadataContext;

@ -35,7 +35,10 @@ import static org.assertj.core.api.Assertions.assertThat;
@ExtendWith(SpringExtension.class) @ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = MetadataLocalPropertiesTest.TestApplication.class, classes = MetadataLocalPropertiesTest.TestApplication.class,
properties = {"spring.config.location = classpath:application-test.yml"}) properties = {"spring.config.location = classpath:application-test.yml",
"spring.main.web-application-type = servlet",
"spring.cloud.gateway.enabled = false",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration"})
public class MetadataLocalPropertiesTest { public class MetadataLocalPropertiesTest {
@Autowired @Autowired

@ -26,6 +26,7 @@ import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.core.ResolvableType; import org.springframework.core.ResolvableType;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@ -115,6 +116,11 @@ public class BeanFactoryUtilsTest {
return null; return null;
} }
@Override
public <T> ObjectProvider<T> getBeanProvider(ParameterizedTypeReference<T> requiredType) {
return null;
}
@Override @Override
public boolean containsBean(String s) { public boolean containsBean(String s) {
return false; return false;

@ -21,10 +21,10 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.fasterxml.jackson.core.type.TypeReference;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoExtension;
import tools.jackson.core.type.TypeReference;
import org.springframework.tsf.core.entity.Tag; import org.springframework.tsf.core.entity.Tag;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;

@ -42,7 +42,8 @@ import static org.assertj.core.api.Assertions.assertThat;
properties = { properties = {
"spring.application.name=test", "spring.application.name=test",
"spring.cloud.polaris.discovery.register=false", "spring.cloud.polaris.discovery.register=false",
"spring.cloud.gateway.enabled=false" "spring.cloud.gateway.enabled=false",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration"
}) })
public class OkHttpUtilTest { public class OkHttpUtilTest {

@ -5,7 +5,7 @@
<parent> <parent>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies-parent</artifactId> <artifactId>spring-cloud-dependencies-parent</artifactId>
<version>4.2.4</version> <version>5.0.1</version>
<relativePath/> <relativePath/>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@ -71,7 +71,7 @@
<properties> <properties>
<!-- Project revision --> <!-- Project revision -->
<revision>2.1.2.0-2024.0.3-SNAPSHOT</revision> <revision>2.1.2.0-2025.1.1-SNAPSHOT</revision>
<!-- Polaris SDK version --> <!-- Polaris SDK version -->
<polaris.version>2.1.2.0-SNAPSHOT</polaris.version> <polaris.version>2.1.2.0-SNAPSHOT</polaris.version>

@ -15,7 +15,7 @@
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2023.0.0.0-RC1</version> <version>2025.1.0.0</version>
</dependency> </dependency>
<dependency> <dependency>

@ -21,7 +21,7 @@
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2022.0.0.0-RC1</version> <version>2025.1.0.0</version>
</dependency> </dependency>
<dependency> <dependency>

@ -21,7 +21,7 @@
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2022.0.0.0-RC1</version> <version>2025.1.0.0</version>
</dependency> </dependency>
<dependency> <dependency>

@ -21,7 +21,7 @@
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2022.0.0.0-RC1</version> <version>2025.1.0.0</version>
</dependency> </dependency>
<dependency> <dependency>

@ -25,7 +25,7 @@
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId> <artifactId>spring-cloud-starter-gateway-server-webflux</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>

@ -21,7 +21,7 @@
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway-mvc</artifactId> <artifactId>spring-cloud-starter-gateway-server-webmvc</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>

@ -21,7 +21,7 @@
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId> <artifactId>spring-cloud-starter-gateway-server-webflux</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </project>

@ -35,8 +35,8 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.restclient.RestTemplateBuilder;
import org.springframework.boot.ssl.SslBundles; import org.springframework.boot.ssl.SslBundles;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.EnableFeignClients;

@ -21,7 +21,7 @@
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId> <artifactId>spring-cloud-starter-gateway-server-webflux</artifactId>
</dependency> </dependency>
<dependency> <dependency>

@ -44,7 +44,7 @@ import org.springframework.web.bind.annotation.RestController;
@Tag(description = "swagger 测试", name = "swaggerValue1") @Tag(description = "swagger 测试", name = "swaggerValue1")
public class SwaggerApiController { public class SwaggerApiController {
@RequestMapping(value = "/swagger/findMessages", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @RequestMapping(value = "/swagger/findMessages", produces = MediaType.APPLICATION_JSON_VALUE)
@Operation(method = "POST", @Operation(method = "POST",
summary = "根据任务ID查询任务列表", summary = "根据任务ID查询任务列表",
description = "根据任务ID查询任务列表Note") description = "根据任务ID查询任务列表Note")
@ -85,7 +85,7 @@ public class SwaggerApiController {
@Operation(summary = "获取消息详情", method = "GET", description = "获取消息内容Note") @Operation(summary = "获取消息详情", method = "GET", description = "获取消息内容Note")
@ApiResponses({@ApiResponse(responseCode = "200", description = "abcdef", content = @Content(schema = @Schema(implementation = MessageModel.class)))}) @ApiResponses({@ApiResponse(responseCode = "200", description = "abcdef", content = @Content(schema = @Schema(implementation = MessageModel.class)))})
@RequestMapping(value = "/swagger/getMessageDetail", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @RequestMapping(value = "/swagger/getMessageDetail", produces = MediaType.APPLICATION_JSON_VALUE)
public MessageModel getMessageDetail(@RequestParam(name = "id") public MessageModel getMessageDetail(@RequestParam(name = "id")
@Parameter(description = "消息ID", name = "id") String msgId) { @Parameter(description = "消息ID", name = "id") String msgId) {
MessageModel messageModel = new MessageModel(); MessageModel messageModel = new MessageModel();
@ -109,7 +109,7 @@ public class SwaggerApiController {
@Operation(summary = "获取投递箱详情", method = "GET", description = "") @Operation(summary = "获取投递箱详情", method = "GET", description = "")
@ApiResponses({@ApiResponse(responseCode = "200", description = "获取投递箱成功", content = @Content(schema = @Schema(implementation = MessageBox.class)))}) @ApiResponses({@ApiResponse(responseCode = "200", description = "获取投递箱成功", content = @Content(schema = @Schema(implementation = MessageBox.class)))})
@RequestMapping(value = "/swagger/getMessageBox", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @RequestMapping(value = "/swagger/getMessageBox", produces = MediaType.APPLICATION_JSON_VALUE)
public MessageBox getMessageBox(@RequestParam @Parameter(required = true, description = "投递箱ID") String boxId, public MessageBox getMessageBox(@RequestParam @Parameter(required = true, description = "投递箱ID") String boxId,
@RequestParam @Parameter(name = "sizeLimit", example = "10", description = "投递箱最大投递数") int maxSizeLimit) { @RequestParam @Parameter(name = "sizeLimit", example = "10", description = "投递箱最大投递数") int maxSizeLimit) {
return new MessageBox(); return new MessageBox();
@ -117,7 +117,7 @@ public class SwaggerApiController {
@Operation(summary = "获取投递箱详情V2", method = "POST", description = "") @Operation(summary = "获取投递箱详情V2", method = "POST", description = "")
@ApiResponses({@ApiResponse(responseCode = "200", description = "获取投递箱成功", content = @Content(schema = @Schema(implementation = MessageBox.class)))}) @ApiResponses({@ApiResponse(responseCode = "200", description = "获取投递箱成功", content = @Content(schema = @Schema(implementation = MessageBox.class)))})
@RequestMapping(value = "/swagger/v2/getMessageBox", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @RequestMapping(value = "/swagger/v2/getMessageBox", produces = MediaType.APPLICATION_JSON_VALUE)
public MessageBox getMessageBoxV2(@RequestBody public MessageBox getMessageBoxV2(@RequestBody
@Parameter(required = true, name = "messageBox", example = "投递箱信息") MessageBox messageBox) { @Parameter(required = true, name = "messageBox", example = "投递箱信息") MessageBox messageBox) {
return new MessageBox(); return new MessageBox();
@ -125,7 +125,7 @@ public class SwaggerApiController {
@Operation(summary = "获取投递箱详情V3", method = "POST", description = "") @Operation(summary = "获取投递箱详情V3", method = "POST", description = "")
@ApiResponses({@ApiResponse(responseCode = "200", description = "获取投递箱成功", content = @Content(schema = @Schema(implementation = Map.class)))}) @ApiResponses({@ApiResponse(responseCode = "200", description = "获取投递箱成功", content = @Content(schema = @Schema(implementation = Map.class)))})
@RequestMapping(value = "/swagger/v3/getMessageBox", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @RequestMapping(value = "/swagger/v3/getMessageBox", produces = MediaType.APPLICATION_JSON_VALUE)
public Map<String, Object> queryMessageBoxV3(@RequestBody public Map<String, Object> queryMessageBoxV3(@RequestBody
@Parameter(required = true, name = "messageBox", example = "投递箱信息") MessageBox messageBox) { @Parameter(required = true, name = "messageBox", example = "投递箱信息") MessageBox messageBox) {

@ -23,7 +23,7 @@
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2023.0.0.0-RC1</version> <version>2025.1.0.0</version>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
</dependencies> </dependencies>

@ -16,7 +16,7 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId> <artifactId>spring-boot-starter-aspectj</artifactId>
<exclusions> <exclusions>
<exclusion> <exclusion>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>

@ -32,7 +32,7 @@
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gateway-server</artifactId> <artifactId>spring-cloud-gateway-server-webflux</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>

@ -529,7 +529,7 @@ public class ContextGatewayFilter implements GatewayFilter, Ordered {
private Map<String, String> copyRequestHeader(ServerHttpRequest request) { private Map<String, String> copyRequestHeader(ServerHttpRequest request) {
Map<String, String> headerMap = new LinkedHashMap<>(); Map<String, String> headerMap = new LinkedHashMap<>();
HttpHeaders headers = request.getHeaders(); HttpHeaders headers = request.getHeaders();
for (Map.Entry<String, List<String>> entry : headers.entrySet()) { for (Map.Entry<String, List<String>> entry : headers.headerSet()) {
if (!entry.getValue().isEmpty()) { if (!entry.getValue().isEmpty()) {
headerMap.put(entry.getKey(), entry.getValue().get(0)); headerMap.put(entry.getKey(), entry.getValue().get(0));
} }

@ -18,11 +18,11 @@
package com.tencent.tsf.gateway.core.model; package com.tencent.tsf.gateway.core.model;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.type.TypeReference;
import com.tencent.cloud.common.util.JacksonUtils; import com.tencent.cloud.common.util.JacksonUtils;
import com.tencent.polaris.api.utils.StringUtils; import com.tencent.polaris.api.utils.StringUtils;
import com.tencent.tsf.gateway.core.exception.TsfGatewayError; import com.tencent.tsf.gateway.core.exception.TsfGatewayError;
import com.tencent.tsf.gateway.core.exception.TsfGatewayException; import com.tencent.tsf.gateway.core.exception.TsfGatewayException;
import tools.jackson.core.type.TypeReference;
public class RequestTransformerPlugin extends PluginInfo { public class RequestTransformerPlugin extends PluginInfo {

@ -25,7 +25,6 @@ import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
import com.fasterxml.jackson.core.type.TypeReference;
import com.tencent.cloud.common.util.JacksonUtils; import com.tencent.cloud.common.util.JacksonUtils;
import com.tencent.cloud.plugin.gateway.context.Position; import com.tencent.cloud.plugin.gateway.context.Position;
import com.tencent.polaris.api.utils.CollectionUtils; import com.tencent.polaris.api.utils.CollectionUtils;
@ -50,6 +49,7 @@ import org.apache.commons.collections.MapUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import shade.polaris.com.google.common.base.Joiner; import shade.polaris.com.google.common.base.Joiner;
import tools.jackson.core.type.TypeReference;
import org.springframework.tsf.core.TsfContext; import org.springframework.tsf.core.TsfContext;
import org.springframework.tsf.core.entity.Tag; import org.springframework.tsf.core.entity.Tag;

@ -34,7 +34,6 @@ import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration; import org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration;
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.cloud.gateway.config.GatewayAutoConfiguration;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@ -52,11 +51,11 @@ class GatewayPluginAutoConfigurationTest {
ConfigurationPropertiesAutoConfiguration.class, ConfigurationPropertiesAutoConfiguration.class,
PropertyPlaceholderAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class,
PolarisContextAutoConfiguration.class, PolarisContextAutoConfiguration.class,
GatewayAutoConfiguration.class,
GatewayPluginAutoConfiguration.class GatewayPluginAutoConfiguration.class
)) ))
.withPropertyValues( .withPropertyValues(
"spring.cloud.gateway.enabled=false", // not needed for this test "spring.cloud.gateway.enabled=false",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration",
"spring.cloud.tencent.plugin.scg.enabled=true", "spring.cloud.tencent.plugin.scg.enabled=true",
"spring.cloud.tencent.plugin.scg.context.enabled=true", "spring.cloud.tencent.plugin.scg.context.enabled=true",
"spring.cloud.tencent.gateway.routes.test_group.uri=lb://test-group" "spring.cloud.tencent.gateway.routes.test_group.uri=lb://test-group"

@ -20,11 +20,11 @@ package com.tencent.tsf.gateway.core.model;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.fasterxml.jackson.core.type.TypeReference;
import com.tencent.cloud.common.util.JacksonUtils; import com.tencent.cloud.common.util.JacksonUtils;
import com.tencent.cloud.plugin.gateway.context.Position; import com.tencent.cloud.plugin.gateway.context.Position;
import com.tencent.tsf.gateway.core.exception.TsfGatewayException; import com.tencent.tsf.gateway.core.exception.TsfGatewayException;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import tools.jackson.core.type.TypeReference;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatNoException; import static org.assertj.core.api.Assertions.assertThatNoException;

@ -22,7 +22,7 @@
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId> <artifactId>spring-boot-starter-aspectj</artifactId>
<exclusions> <exclusions>
<exclusion> <exclusion>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>

@ -25,8 +25,8 @@ import com.tencent.cloud.polaris.context.config.extend.tsf.TsfTlsProperties;
import com.tencent.polaris.api.utils.ClassUtils; import com.tencent.polaris.api.utils.ClassUtils;
import com.tencent.polaris.api.utils.StringUtils; import com.tencent.polaris.api.utils.StringUtils;
import org.springframework.boot.EnvironmentPostProcessor;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource; import org.springframework.core.env.MapPropertySource;

@ -1,2 +1,2 @@
org.springframework.boot.env.EnvironmentPostProcessor=\ org.springframework.boot.EnvironmentPostProcessor=\
com.tencent.cloud.plugin.tsf.tls.TlsEnvironmentPostProcessor com.tencent.cloud.plugin.tsf.tls.TlsEnvironmentPostProcessor

@ -22,7 +22,7 @@
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId> <artifactId>spring-boot-starter-aspectj</artifactId>
<exclusions> <exclusions>
<exclusion> <exclusion>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>

@ -28,13 +28,13 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId> <groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId> <artifactId>jackson-databind</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId> <groupId>tools.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId> <artifactId>jackson-dataformat-yaml</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>

@ -26,7 +26,6 @@ import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import com.fasterxml.jackson.core.type.TypeReference;
import com.tencent.cloud.common.metadata.MetadataContextHolder; import com.tencent.cloud.common.metadata.MetadataContextHolder;
import com.tencent.cloud.common.util.JacksonUtils; import com.tencent.cloud.common.util.JacksonUtils;
import com.tencent.cloud.common.util.MetadataContextUtils; import com.tencent.cloud.common.util.MetadataContextUtils;
@ -36,6 +35,7 @@ import com.tencent.polaris.metadata.core.MetadataType;
import com.tencent.tsf.unit.core.model.UnitRouteInfo.GrayMatchRouteUnit; import com.tencent.tsf.unit.core.model.UnitRouteInfo.GrayMatchRouteUnit;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import tools.jackson.core.type.TypeReference;
public final class TencentUnitContext { public final class TencentUnitContext {

@ -20,7 +20,6 @@ package com.tencent.tsf.unit.core.mapping.impl;
import java.io.IOException; import java.io.IOException;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.tencent.polaris.api.utils.StringUtils; import com.tencent.polaris.api.utils.StringUtils;
import com.tencent.tsf.unit.core.TencentUnitManager; import com.tencent.tsf.unit.core.TencentUnitManager;
import com.tencent.tsf.unit.core.exception.ErrorCode; import com.tencent.tsf.unit.core.exception.ErrorCode;
@ -33,6 +32,7 @@ import shade.polaris.okhttp3.HttpUrl;
import shade.polaris.okhttp3.OkHttpClient; import shade.polaris.okhttp3.OkHttpClient;
import shade.polaris.okhttp3.Request; import shade.polaris.okhttp3.Request;
import shade.polaris.okhttp3.Response; import shade.polaris.okhttp3.Response;
import tools.jackson.databind.json.JsonMapper;
public class CustomerMappingService implements IMappingService { public class CustomerMappingService implements IMappingService {
@ -74,8 +74,8 @@ public class CustomerMappingService implements IMappingService {
throw new TencentUnitException(ErrorCode.MAPPING_RESPONSE_EMPTY_BODY_ERROR, msg); throw new TencentUnitException(ErrorCode.MAPPING_RESPONSE_EMPTY_BODY_ERROR, msg);
} }
ObjectMapper objectMapper = new ObjectMapper(); JsonMapper JsonMapper = new JsonMapper();
MappingEntity entity = objectMapper.readValue(response.body().string(), MappingEntity.class); MappingEntity entity = JsonMapper.readValue(response.body().string(), MappingEntity.class);
response.body().close(); response.body().close();
return entity; return entity;
} }

@ -21,16 +21,15 @@ import com.ecwid.consul.v1.ConsulClient;
import com.ecwid.consul.v1.QueryParams; import com.ecwid.consul.v1.QueryParams;
import com.ecwid.consul.v1.Response; import com.ecwid.consul.v1.Response;
import com.ecwid.consul.v1.kv.model.GetValue; import com.ecwid.consul.v1.kv.model.GetValue;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.tencent.cloud.common.util.GzipUtil; import com.tencent.cloud.common.util.GzipUtil;
import com.tencent.tsf.unit.core.Env; import com.tencent.tsf.unit.core.Env;
import com.tencent.tsf.unit.core.TencentUnitManager; import com.tencent.tsf.unit.core.TencentUnitManager;
import com.tencent.tsf.unit.core.model.UnitArch; import com.tencent.tsf.unit.core.model.UnitArch;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import tools.jackson.core.JacksonException;
import tools.jackson.databind.DeserializationFeature;
import tools.jackson.dataformat.yaml.YAMLMapper;
public final class TencentUnitArchKVLoader { public final class TencentUnitArchKVLoader {
@ -91,11 +90,11 @@ public final class TencentUnitArchKVLoader {
} }
} }
public static void loadUnitArch(String content) throws JsonProcessingException { public static void loadUnitArch(String content) throws JacksonException {
LOGGER.info("[unit] unit arch config old raw content:\n{}", rawContent); LOGGER.info("[unit] unit arch config old raw content:\n{}", rawContent);
ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); YAMLMapper mapper = new YAMLMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); mapper.rebuild().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
TencentUnitManager.setUnitArch(mapper.readValue(content, UnitArch.class)); TencentUnitManager.setUnitArch(mapper.readValue(content, UnitArch.class));
rawContent = content; rawContent = content;

@ -21,16 +21,15 @@ import com.ecwid.consul.v1.ConsulClient;
import com.ecwid.consul.v1.QueryParams; import com.ecwid.consul.v1.QueryParams;
import com.ecwid.consul.v1.Response; import com.ecwid.consul.v1.Response;
import com.ecwid.consul.v1.kv.model.GetValue; import com.ecwid.consul.v1.kv.model.GetValue;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.tencent.cloud.common.util.GzipUtil; import com.tencent.cloud.common.util.GzipUtil;
import com.tencent.tsf.unit.core.Env; import com.tencent.tsf.unit.core.Env;
import com.tencent.tsf.unit.core.TencentUnitManager; import com.tencent.tsf.unit.core.TencentUnitManager;
import com.tencent.tsf.unit.core.model.UnitGray; import com.tencent.tsf.unit.core.model.UnitGray;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import tools.jackson.core.JacksonException;
import tools.jackson.databind.DeserializationFeature;
import tools.jackson.dataformat.yaml.YAMLMapper;
public final class TencentUnitGrayKVLoader { public final class TencentUnitGrayKVLoader {
@ -89,11 +88,11 @@ public final class TencentUnitGrayKVLoader {
} }
} }
public static void loadUnitGray(String content) throws JsonProcessingException { public static void loadUnitGray(String content) throws JacksonException {
LOGGER.info("[unit] unit gray old raw content:\n{}", rawContent); LOGGER.info("[unit] unit gray old raw content:\n{}", rawContent);
ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); YAMLMapper mapper = new YAMLMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); mapper.rebuild().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
TencentUnitManager.setUnitGray(mapper.readValue(content, UnitGray.class)); TencentUnitManager.setUnitGray(mapper.readValue(content, UnitGray.class));
rawContent = content; rawContent = content;

@ -21,16 +21,15 @@ import com.ecwid.consul.v1.ConsulClient;
import com.ecwid.consul.v1.QueryParams; import com.ecwid.consul.v1.QueryParams;
import com.ecwid.consul.v1.Response; import com.ecwid.consul.v1.Response;
import com.ecwid.consul.v1.kv.model.GetValue; import com.ecwid.consul.v1.kv.model.GetValue;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.tencent.cloud.common.util.GzipUtil; import com.tencent.cloud.common.util.GzipUtil;
import com.tencent.tsf.unit.core.Env; import com.tencent.tsf.unit.core.Env;
import com.tencent.tsf.unit.core.TencentUnitManager; import com.tencent.tsf.unit.core.TencentUnitManager;
import com.tencent.tsf.unit.core.model.UnitRouteInfo; import com.tencent.tsf.unit.core.model.UnitRouteInfo;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import tools.jackson.core.JacksonException;
import tools.jackson.databind.DeserializationFeature;
import tools.jackson.dataformat.yaml.YAMLMapper;
public final class TencentUnitRouteRuleKVLoader { public final class TencentUnitRouteRuleKVLoader {
@ -89,11 +88,11 @@ public final class TencentUnitRouteRuleKVLoader {
} }
} }
public static void loadUnitRouteRule(String content) throws JsonProcessingException { public static void loadUnitRouteRule(String content) throws JacksonException {
LOGGER.info("[unit] unit route rule old raw content:\n{}", rawContent); LOGGER.info("[unit] unit route rule old raw content:\n{}", rawContent);
ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); YAMLMapper mapper = new YAMLMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); mapper.rebuild().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
TencentUnitManager.setUnitRouteRule(mapper.readValue(content, UnitRouteInfo.class)); TencentUnitManager.setUnitRouteRule(mapper.readValue(content, UnitRouteInfo.class));
rawContent = content; rawContent = content;

@ -23,9 +23,9 @@ import java.util.Map;
import com.tencent.polaris.api.utils.StringUtils; import com.tencent.polaris.api.utils.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.springframework.boot.EnvironmentPostProcessor;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor; import org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.boot.logging.DeferredLogFactory; import org.springframework.boot.logging.DeferredLogFactory;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.ConfigurableEnvironment;

@ -26,9 +26,9 @@ import com.tencent.polaris.api.utils.StringUtils;
import com.tencent.polaris.plugins.router.lane.BaseLaneMode; import com.tencent.polaris.plugins.router.lane.BaseLaneMode;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.springframework.boot.EnvironmentPostProcessor;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor; import org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.boot.logging.DeferredLogFactory; import org.springframework.boot.logging.DeferredLogFactory;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.ConfigurableEnvironment;

@ -24,9 +24,9 @@ import com.tencent.cloud.common.tsf.TsfContextUtils;
import com.tencent.polaris.api.utils.StringUtils; import com.tencent.polaris.api.utils.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.springframework.boot.EnvironmentPostProcessor;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor; import org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.boot.logging.DeferredLogFactory; import org.springframework.boot.logging.DeferredLogFactory;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.ConfigurableEnvironment;

@ -25,7 +25,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent; import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
import org.springframework.boot.context.event.ApplicationFailedEvent; import org.springframework.boot.context.event.ApplicationFailedEvent;
import org.springframework.boot.context.logging.LoggingApplicationListener; import org.springframework.boot.context.logging.LoggingApplicationListener;
import org.springframework.boot.web.context.WebServerInitializedEvent; import org.springframework.boot.web.server.context.WebServerInitializedEvent;
import org.springframework.cloud.context.environment.EnvironmentChangeEvent; import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationEvent;
import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.ConfigurableApplicationContext;

@ -3,7 +3,7 @@ org.springframework.cloud.bootstrap.BootstrapConfiguration=\
org.springframework.context.ApplicationListener=\ org.springframework.context.ApplicationListener=\
com.tencent.cloud.polaris.context.logging.PolarisLoggingApplicationListener,\ com.tencent.cloud.polaris.context.logging.PolarisLoggingApplicationListener,\
com.tencent.cloud.polaris.context.listener.FailedEventApplicationListener com.tencent.cloud.polaris.context.listener.FailedEventApplicationListener
org.springframework.boot.env.EnvironmentPostProcessor=\ org.springframework.boot.EnvironmentPostProcessor=\
com.tencent.cloud.polaris.context.config.PolarisContextEnvironmentPostProcessor,\ com.tencent.cloud.polaris.context.config.PolarisContextEnvironmentPostProcessor,\
com.tencent.cloud.polaris.context.config.extend.tsf.TsfCoreEnvironmentPostProcessor,\ com.tencent.cloud.polaris.context.config.extend.tsf.TsfCoreEnvironmentPostProcessor,\
com.tencent.cloud.polaris.context.config.extend.tsf.TsfLastEnvironmentPostProcessor com.tencent.cloud.polaris.context.config.extend.tsf.TsfLastEnvironmentPostProcessor

@ -23,7 +23,7 @@
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId> <artifactId>spring-boot-starter-aspectj</artifactId>
<exclusions> <exclusions>
<exclusion> <exclusion>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
@ -55,7 +55,7 @@
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gateway-server</artifactId> <artifactId>spring-cloud-gateway-server-webflux</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>

@ -69,7 +69,7 @@ public class EnhancedReactiveFilter implements WebFilter, Ordered {
enhancedPluginContext.setDelay(System.currentTimeMillis() - startMillis); enhancedPluginContext.setDelay(System.currentTimeMillis() - startMillis);
EnhancedResponseContext enhancedResponseContext = EnhancedResponseContext.builder() EnhancedResponseContext enhancedResponseContext = EnhancedResponseContext.builder()
.httpStatus(exchange.getResponse().getRawStatusCode()) .httpStatus(exchange.getResponse().getStatusCode().value())
.httpHeaders(exchange.getResponse().getHeaders()) .httpHeaders(exchange.getResponse().getHeaders())
.build(); .build();
enhancedPluginContext.setResponse(enhancedResponseContext); enhancedPluginContext.setResponse(enhancedResponseContext);

@ -46,6 +46,7 @@ import org.springframework.cloud.gateway.route.Route;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
@ -177,7 +178,7 @@ public class EnhancedGatewayGlobalFilter implements GlobalFilter, Ordered {
enhancedPluginContext.setDelay(System.currentTimeMillis() - startTime); enhancedPluginContext.setDelay(System.currentTimeMillis() - startTime);
EnhancedResponseContext enhancedResponseContext = EnhancedResponseContext.builder() EnhancedResponseContext enhancedResponseContext = EnhancedResponseContext.builder()
.httpStatus(exchange.getResponse().getRawStatusCode()) .httpStatus(Optional.ofNullable(exchange.getResponse().getStatusCode()).map(HttpStatusCode::value).orElse(null))
.httpHeaders(exchange.getResponse().getHeaders()) .httpHeaders(exchange.getResponse().getHeaders())
.build(); .build();
enhancedPluginContext.setResponse(enhancedResponseContext); enhancedPluginContext.setResponse(enhancedResponseContext);
@ -222,7 +223,7 @@ public class EnhancedGatewayGlobalFilter implements GlobalFilter, Ordered {
if (uri != null) { if (uri != null) {
if (route != null && route.getUri().getScheme() if (route != null && route.getUri().getScheme()
.contains("lb") && StringUtils.isNotEmpty(serviceId)) { .contains("lb") && StringUtils.isNotEmpty(serviceId)) {
DefaultServiceInstance serviceInstance = new DefaultServiceInstance(); DefaultServiceInstance serviceInstance = new DefaultServiceInstance(null, null, null, 0, false);
serviceInstance.setServiceId(serviceId); serviceInstance.setServiceId(serviceId);
serviceInstance.setHost(uri.getHost()); serviceInstance.setHost(uri.getHost());
serviceInstance.setPort(uri.getPort()); serviceInstance.setPort(uri.getPort());

@ -67,7 +67,7 @@ public class DefaultEnhancedPluginRunner implements EnhancedPluginRunner {
localServiceInstance = registration; localServiceInstance = registration;
} }
else { else {
DefaultServiceInstance defaultServiceInstance = new DefaultServiceInstance(); DefaultServiceInstance defaultServiceInstance = new DefaultServiceInstance(null, null, null, 0, false);
defaultServiceInstance.setServiceId(MetadataContext.LOCAL_SERVICE); defaultServiceInstance.setServiceId(MetadataContext.LOCAL_SERVICE);
defaultServiceInstance.setHost(sdkContext.getConfig().getGlobal().getAPI().getBindIP()); defaultServiceInstance.setHost(sdkContext.getConfig().getGlobal().getAPI().getBindIP());
localServiceInstance = defaultServiceInstance; localServiceInstance = defaultServiceInstance;

@ -121,7 +121,7 @@ public class EnhancedPluginContext {
this.targetServiceInstance = targetServiceInstance; this.targetServiceInstance = targetServiceInstance;
} }
else if (Objects.nonNull(url)) { else if (Objects.nonNull(url)) {
DefaultServiceInstance defaultServiceInstance = new DefaultServiceInstance(); DefaultServiceInstance defaultServiceInstance = new DefaultServiceInstance(null, null, null, 0, false);
defaultServiceInstance.setUri(url); defaultServiceInstance.setUri(url);
if (defaultServiceInstance.isSecure()) { if (defaultServiceInstance.isSecure()) {
defaultServiceInstance.setPort(443); defaultServiceInstance.setPort(443);
@ -132,7 +132,7 @@ public class EnhancedPluginContext {
this.targetServiceInstance = defaultServiceInstance; this.targetServiceInstance = defaultServiceInstance;
} }
else { else {
this.targetServiceInstance = new DefaultServiceInstance(); this.targetServiceInstance = new DefaultServiceInstance(null, null, null, 0, false);
LOGGER.warn("TargetServiceInstance is empty."); LOGGER.warn("TargetServiceInstance is empty.");
} }
} }

@ -29,9 +29,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.tencent.cloud.common.constant.HeaderConstant; import com.tencent.cloud.common.constant.HeaderConstant;
import com.tencent.cloud.common.constant.MetadataConstant; import com.tencent.cloud.common.constant.MetadataConstant;
import com.tencent.cloud.common.constant.RouterConstant; import com.tencent.cloud.common.constant.RouterConstant;
@ -50,6 +47,9 @@ import com.tencent.polaris.api.utils.CollectionUtils;
import com.tencent.polaris.api.utils.StringUtils; import com.tencent.polaris.api.utils.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import tools.jackson.core.JacksonException;
import tools.jackson.core.type.TypeReference;
import tools.jackson.databind.json.JsonMapper;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
@ -204,7 +204,7 @@ public final class PolarisEnhancedPluginUtils {
} }
static RetStatus getRetStatusFromRequest(HttpHeaders headers, RetStatus defaultVal) { static RetStatus getRetStatusFromRequest(HttpHeaders headers, RetStatus defaultVal) {
if (headers != null && headers.containsKey(HeaderConstant.INTERNAL_CALLEE_RET_STATUS)) { if (headers != null && headers.containsHeader(HeaderConstant.INTERNAL_CALLEE_RET_STATUS)) {
List<String> values = headers.get(HeaderConstant.INTERNAL_CALLEE_RET_STATUS); List<String> values = headers.get(HeaderConstant.INTERNAL_CALLEE_RET_STATUS);
if (CollectionUtils.isNotEmpty(values)) { if (CollectionUtils.isNotEmpty(values)) {
String retStatusVal = com.tencent.polaris.api.utils.StringUtils.defaultString(values.get(0)); String retStatusVal = com.tencent.polaris.api.utils.StringUtils.defaultString(values.get(0));
@ -220,7 +220,7 @@ public final class PolarisEnhancedPluginUtils {
} }
static String getActiveRuleNameFromRequest(HttpHeaders headers) { static String getActiveRuleNameFromRequest(HttpHeaders headers) {
if (headers != null && headers.containsKey(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME)) { if (headers != null && headers.containsHeader(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME)) {
Collection<String> values = headers.get(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME); Collection<String> values = headers.get(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME);
if (CollectionUtils.isNotEmpty(values)) { if (CollectionUtils.isNotEmpty(values)) {
String decodedActiveRuleName = ""; String decodedActiveRuleName = "";
@ -285,9 +285,9 @@ public final class PolarisEnhancedPluginUtils {
LOG.error("unsupported charset exception " + UTF_8, e); LOG.error("unsupported charset exception " + UTF_8, e);
} }
try { try {
return new ObjectMapper().readValue(label, new TypeReference<HashMap<String, String>>() { }); return new JsonMapper().readValue(label, new TypeReference<HashMap<String, String>>() { });
} }
catch (JsonProcessingException e) { catch (JacksonException e) {
LOG.error("parse label map exception", e); LOG.error("parse label map exception", e);
} }
} }

@ -72,8 +72,8 @@ public class ExceptionPolarisReporter implements EnhancedPlugin {
} }
EnhancedRequestContext request = context.getRequest(); EnhancedRequestContext request = context.getRequest();
ServiceInstance callerServiceInstance = Optional.ofNullable(context.getLocalServiceInstance()).orElse(new DefaultServiceInstance()); ServiceInstance callerServiceInstance = Optional.ofNullable(context.getLocalServiceInstance()).orElse(new DefaultServiceInstance(null, null, null, 0, false));
ServiceInstance calleeServiceInstance = Optional.ofNullable(context.getTargetServiceInstance()).orElse(new DefaultServiceInstance()); ServiceInstance calleeServiceInstance = Optional.ofNullable(context.getTargetServiceInstance()).orElse(new DefaultServiceInstance(null, null, null, 0, false));
ServiceCallResult resultRequest = PolarisEnhancedPluginUtils.createServiceCallResult( ServiceCallResult resultRequest = PolarisEnhancedPluginUtils.createServiceCallResult(
callerServiceInstance.getHost(), callerServiceInstance.getHost(),

@ -73,8 +73,8 @@ public class SuccessPolarisReporter implements EnhancedPlugin {
EnhancedRequestContext request = context.getRequest(); EnhancedRequestContext request = context.getRequest();
EnhancedResponseContext response = context.getResponse(); EnhancedResponseContext response = context.getResponse();
ServiceInstance callerServiceInstance = Optional.ofNullable(context.getLocalServiceInstance()).orElse(new DefaultServiceInstance()); ServiceInstance callerServiceInstance = Optional.ofNullable(context.getLocalServiceInstance()).orElse(new DefaultServiceInstance(null, null, null, 0, false));
ServiceInstance calleeServiceInstance = Optional.ofNullable(context.getTargetServiceInstance()).orElse(new DefaultServiceInstance()); ServiceInstance calleeServiceInstance = Optional.ofNullable(context.getTargetServiceInstance()).orElse(new DefaultServiceInstance(null, null, null, 0, false));
ServiceCallResult resultRequest = PolarisEnhancedPluginUtils.createServiceCallResult( ServiceCallResult resultRequest = PolarisEnhancedPluginUtils.createServiceCallResult(
callerServiceInstance.getHost(), callerServiceInstance.getHost(),

@ -49,7 +49,8 @@ public class RpcEnhancementAutoConfigurationTest {
RpcEnhancementAutoConfiguration.class, RpcEnhancementAutoConfiguration.class,
PolarisRestTemplateAutoConfigurationTester.class, PolarisRestTemplateAutoConfigurationTester.class,
FeignLoadBalancerAutoConfiguration.class)) FeignLoadBalancerAutoConfiguration.class))
.withPropertyValues("spring.cloud.polaris.circuitbreaker.enabled=true", "spring.application.name=test", "spring.cloud.gateway.enabled=false"); .withPropertyValues("spring.cloud.polaris.circuitbreaker.enabled=true", "spring.application.name=test", "spring.cloud.gateway.enabled=false",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration");
@Test @Test
public void testDefaultInitialization() { public void testDefaultInitialization() {

@ -38,7 +38,8 @@ import static org.assertj.core.api.Assertions.assertThat;
"spring.application.name=test", "spring.application.name=test",
"spring.cloud.gateway.enabled=false", "spring.cloud.gateway.enabled=false",
"spring.cloud.tencent.rpc-enhancement=true", "spring.cloud.tencent.rpc-enhancement=true",
"spring.cloud.tencent.rpc-enhancement.ignore-body=false" "spring.cloud.tencent.rpc-enhancement.ignore-body=false",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration"
}) })
@ActiveProfiles("test") @ActiveProfiles("test")
public class RpcEnhancementPropertiesTest { public class RpcEnhancementPropertiesTest {

@ -41,7 +41,8 @@ import static org.springframework.http.HttpStatus.Series.SERVER_ERROR;
@SpringBootTest(classes = RpcEnhancementReporterPropertiesTest.TestApplication.class, properties = { @SpringBootTest(classes = RpcEnhancementReporterPropertiesTest.TestApplication.class, properties = {
"spring.application.name=test", "spring.application.name=test",
"spring.cloud.gateway.enabled=false", "spring.cloud.gateway.enabled=false",
"spring.cloud.tencent.rpc-enhancement.reporter=true" "spring.cloud.tencent.rpc-enhancement.reporter=true",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration"
}) })
@ActiveProfiles("test") @ActiveProfiles("test")
public class RpcEnhancementReporterPropertiesTest { public class RpcEnhancementReporterPropertiesTest {

@ -59,7 +59,8 @@ import static org.mockito.Mockito.mock;
*/ */
@ExtendWith(SpringExtension.class) @ExtendWith(SpringExtension.class)
@SpringBootTest(classes = EnhancedFeignClientTest.TestApplication.class, @SpringBootTest(classes = EnhancedFeignClientTest.TestApplication.class,
properties = {"spring.cloud.polaris.namespace=Test", "spring.cloud.polaris.service=TestApp", "spring.cloud.gateway.enabled=false"}) properties = {"spring.cloud.polaris.namespace=Test", "spring.cloud.polaris.service=TestApp", "spring.cloud.gateway.enabled=false",
"spring.autoconfigure.exclude=org.springframework.cloud.gateway.config.GatewayAutoConfiguration,org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration"})
public class EnhancedFeignClientTest { public class EnhancedFeignClientTest {
@Autowired @Autowired

@ -170,7 +170,7 @@ public class EnhancedWebClientExchangeFilterFunctionTest {
StepVerifier.create(responseMono) StepVerifier.create(responseMono)
.expectNextMatches(response -> { .expectNextMatches(response -> {
assertThat(response.statusCode()).isEqualTo(HttpStatus.SERVICE_UNAVAILABLE); assertThat(response.statusCode()).isEqualTo(HttpStatus.SERVICE_UNAVAILABLE);
assertThat(response.headers().asHttpHeaders().containsKey("header-key")).isTrue(); assertThat(response.headers().asHttpHeaders().containsHeader("header-key")).isTrue();
return true; return true;
}) })
.verifyComplete(); .verifyComplete();

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save