Skip to content

Commit 38792c1

Browse files
fix:fix swagger not working bug. (#1225)
1 parent dd56d3c commit 38792c1

File tree

21 files changed

+233
-499
lines changed

21 files changed

+233
-499
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,4 @@
2121
- [feat: support nacos namespace mapping](https://github.com/Tencent/spring-cloud-tencent/pull/1192)
2222
- [fix:fix rule-based router when using RestTemplate.](https://github.com/Tencent/spring-cloud-tencent/pull/1201)
2323
- [fix:fix sct-all wrong spring boot version obtain.](https://github.com/Tencent/spring-cloud-tencent/pull/1205)
24+
- [fix:fix swagger not working bug.](https://github.com/Tencent/spring-cloud-tencent/pull/1125)

spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/adapter/MockedConfigKVFile.java

+5
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,11 @@ public boolean hasContent() {
138138
return false;
139139
}
140140

141+
@Override
142+
public String getMd5() {
143+
return null;
144+
}
145+
141146
@Override
142147
public void addChangeListener(ConfigFileChangeListener configFileChangeListener) {
143148

spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/condition/ConditionalOnReflectRefreshTypeTest.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import java.io.IOException;
2222
import java.net.ServerSocket;
23+
import java.util.Objects;
2324

2425
import com.tencent.cloud.polaris.config.PolarisConfigAutoConfiguration;
2526
import com.tencent.cloud.polaris.config.PolarisConfigBootstrapAutoConfiguration;
@@ -67,7 +68,9 @@ static void beforeAll() {
6768

6869
@AfterAll
6970
static void afterAll() throws IOException {
70-
serverSocket.close();
71+
if (Objects.nonNull(serverSocket)) {
72+
serverSocket.close();
73+
}
7174
}
7275

7376
@Test

spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/spring/annotation/SpringValueProcessorTest.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.lang.reflect.Method;
2323
import java.net.ServerSocket;
2424
import java.util.Collection;
25+
import java.util.Objects;
2526
import java.util.Optional;
2627

2728
import com.tencent.cloud.polaris.config.PolarisConfigBootstrapAutoConfiguration;
@@ -71,7 +72,9 @@ static void beforeAll() {
7172

7273
@AfterAll
7374
static void afterAll() throws IOException {
74-
serverSocket.close();
75+
if (Objects.nonNull(serverSocket)) {
76+
serverSocket.close();
77+
}
7578
}
7679

7780
@Test

spring-cloud-starter-tencent-polaris-contract/pom.xml

+4-19
Original file line numberDiff line numberDiff line change
@@ -36,28 +36,13 @@
3636
<!-- Spring cloud dependencies start -->
3737

3838
<dependency>
39-
<groupId>io.springfox</groupId>
40-
<artifactId>springfox-boot-starter</artifactId>
41-
<exclusions>
42-
<exclusion>
43-
<artifactId>swagger-models</artifactId>
44-
<groupId>io.swagger</groupId>
45-
</exclusion>
46-
<exclusion>
47-
<artifactId>swagger-annotations</artifactId>
48-
<groupId>io.swagger</groupId>
49-
</exclusion>
50-
</exclusions>
39+
<groupId>org.springdoc</groupId>
40+
<artifactId>springdoc-openapi-ui</artifactId>
5141
</dependency>
5242

5343
<dependency>
54-
<groupId>io.swagger</groupId>
55-
<artifactId>swagger-models</artifactId>
56-
</dependency>
57-
58-
<dependency>
59-
<groupId>io.swagger</groupId>
60-
<artifactId>swagger-annotations</artifactId>
44+
<groupId>org.springdoc</groupId>
45+
<artifactId>springdoc-openapi-webflux-ui</artifactId>
6146
</dependency>
6247

6348
<dependency>

spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/PolarisContractReporter.java

+44-32
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,16 @@
2929
import com.tencent.polaris.api.plugin.server.InterfaceDescriptor;
3030
import com.tencent.polaris.api.plugin.server.ReportServiceContractRequest;
3131
import com.tencent.polaris.api.plugin.server.ReportServiceContractResponse;
32-
import io.swagger.models.HttpMethod;
33-
import io.swagger.models.Operation;
34-
import io.swagger.models.Path;
35-
import io.swagger.models.Swagger;
32+
import io.swagger.v3.oas.models.OpenAPI;
33+
import io.swagger.v3.oas.models.Operation;
34+
import io.swagger.v3.oas.models.PathItem;
35+
import io.swagger.v3.oas.models.Paths;
3636
import org.slf4j.Logger;
3737
import org.slf4j.LoggerFactory;
38-
import springfox.documentation.service.Documentation;
39-
import springfox.documentation.spring.web.DocumentationCache;
40-
import springfox.documentation.swagger2.mappers.ServiceModelToSwagger2Mapper;
38+
import org.springdoc.api.AbstractOpenApiResource;
39+
import org.springdoc.api.AbstractOpenApiResourceUtil;
40+
import org.springdoc.webflux.api.OpenApiWebFluxUtil;
41+
import org.springdoc.webmvc.api.OpenApiWebMvcUtil;
4142

4243
import org.springframework.boot.context.event.ApplicationReadyEvent;
4344
import org.springframework.context.ApplicationListener;
@@ -52,18 +53,21 @@
5253
public class PolarisContractReporter implements ApplicationListener<ApplicationReadyEvent> {
5354

5455
private final Logger LOG = LoggerFactory.getLogger(PolarisContractReporter.class);
55-
private final ServiceModelToSwagger2Mapper swagger2Mapper;
56-
private final DocumentationCache documentationCache;
56+
57+
private final org.springdoc.webmvc.api.MultipleOpenApiResource multipleOpenApiWebMvcResource;
58+
private final org.springdoc.webflux.api.MultipleOpenApiResource multipleOpenApiWebFluxResource;
5759
private final PolarisContractProperties polarisContractProperties;
5860

5961
private final ProviderAPI providerAPI;
6062

6163
private final PolarisDiscoveryProperties polarisDiscoveryProperties;
6264

63-
public PolarisContractReporter(DocumentationCache documentationCache, ServiceModelToSwagger2Mapper swagger2Mapper,
64-
PolarisContractProperties polarisContractProperties, ProviderAPI providerAPI, PolarisDiscoveryProperties polarisDiscoveryProperties) {
65-
this.swagger2Mapper = swagger2Mapper;
66-
this.documentationCache = documentationCache;
65+
public PolarisContractReporter(org.springdoc.webmvc.api.MultipleOpenApiResource multipleOpenApiWebMvcResource,
66+
org.springdoc.webflux.api.MultipleOpenApiResource multipleOpenApiWebFluxResource,
67+
PolarisContractProperties polarisContractProperties, ProviderAPI providerAPI,
68+
PolarisDiscoveryProperties polarisDiscoveryProperties) {
69+
this.multipleOpenApiWebMvcResource = multipleOpenApiWebMvcResource;
70+
this.multipleOpenApiWebFluxResource = multipleOpenApiWebFluxResource;
6771
this.polarisContractProperties = polarisContractProperties;
6872
this.providerAPI = providerAPI;
6973
this.polarisDiscoveryProperties = polarisDiscoveryProperties;
@@ -73,29 +77,37 @@ public PolarisContractReporter(DocumentationCache documentationCache, ServiceMod
7377
public void onApplicationEvent(@NonNull ApplicationReadyEvent applicationReadyEvent) {
7478
if (polarisContractProperties.isReportEnabled()) {
7579
try {
76-
Documentation documentation = documentationCache.documentationByGroup(polarisContractProperties.getGroup());
77-
Swagger swagger = swagger2Mapper.mapDocumentation(documentation);
78-
if (swagger != null) {
80+
AbstractOpenApiResource openApiResource = null;
81+
if (multipleOpenApiWebMvcResource != null) {
82+
openApiResource = OpenApiWebMvcUtil.getOpenApiResourceOrThrow(multipleOpenApiWebMvcResource, polarisContractProperties.getGroup());
83+
}
84+
else if (multipleOpenApiWebFluxResource != null) {
85+
openApiResource = OpenApiWebFluxUtil.getOpenApiResourceOrThrow(multipleOpenApiWebFluxResource, polarisContractProperties.getGroup());
86+
}
87+
OpenAPI openAPI = null;
88+
if (openApiResource != null) {
89+
openAPI = AbstractOpenApiResourceUtil.getOpenApi(openApiResource);
90+
}
91+
if (openAPI != null) {
7992
ReportServiceContractRequest request = new ReportServiceContractRequest();
8093
request.setName(polarisDiscoveryProperties.getService());
8194
request.setNamespace(polarisDiscoveryProperties.getNamespace());
8295
request.setService(polarisDiscoveryProperties.getService());
8396
request.setProtocol("http");
8497
request.setVersion(polarisDiscoveryProperties.getVersion());
85-
List<InterfaceDescriptor> interfaceDescriptorList = getInterfaceDescriptorFromSwagger(swagger);
98+
List<InterfaceDescriptor> interfaceDescriptorList = getInterfaceDescriptorFromSwagger(openAPI);
8699
request.setInterfaceDescriptors(interfaceDescriptorList);
87100
ReportServiceContractResponse response = providerAPI.reportServiceContract(request);
88101
LOG.info("Service contract [Namespace: {}. Name: {}. Service: {}. Protocol:{}. Version: {}. API counter: {}] is reported.",
89102
request.getNamespace(), request.getName(), request.getService(), request.getProtocol(),
90103
request.getVersion(), request.getInterfaceDescriptors().size());
91104
if (LOG.isDebugEnabled()) {
92-
String jsonValue = JacksonUtils.serialize2Json(swagger);
105+
String jsonValue = JacksonUtils.serialize2Json(openAPI);
93106
LOG.debug("OpenApi json data: {}", jsonValue);
94107
}
95108
}
96109
else {
97-
LOG.warn("Swagger or json is null, documentationCache keys:{}, group:{}", documentationCache.all()
98-
.keySet(), polarisContractProperties.getGroup());
110+
LOG.warn("OpenAPI or json is null, group:{}", polarisContractProperties.getGroup());
99111
}
100112
}
101113
catch (Throwable t) {
@@ -104,11 +116,11 @@ public void onApplicationEvent(@NonNull ApplicationReadyEvent applicationReadyEv
104116
}
105117
}
106118

107-
private List<InterfaceDescriptor> getInterfaceDescriptorFromSwagger(Swagger swagger) {
119+
private List<InterfaceDescriptor> getInterfaceDescriptorFromSwagger(OpenAPI openAPI) {
108120
List<InterfaceDescriptor> interfaceDescriptorList = new ArrayList<>();
109-
Map<String, Path> paths = swagger.getPaths();
110-
for (Map.Entry<String, Path> p : paths.entrySet()) {
111-
Path path = p.getValue();
121+
Paths paths = openAPI.getPaths();
122+
for (Map.Entry<String, PathItem> p : paths.entrySet()) {
123+
PathItem path = p.getValue();
112124
Map<String, Operation> operationMap = getOperationMapFromPath(path);
113125
if (CollectionUtils.isEmpty(operationMap)) {
114126
continue;
@@ -124,29 +136,29 @@ private List<InterfaceDescriptor> getInterfaceDescriptorFromSwagger(Swagger swag
124136
return interfaceDescriptorList;
125137
}
126138

127-
private Map<String, Operation> getOperationMapFromPath(Path path) {
139+
private Map<String, Operation> getOperationMapFromPath(PathItem path) {
128140
Map<String, Operation> operationMap = new HashMap<>();
129141

130142
if (path.getGet() != null) {
131-
operationMap.put(HttpMethod.GET.name(), path.getGet());
143+
operationMap.put(PathItem.HttpMethod.GET.name(), path.getGet());
132144
}
133145
if (path.getPut() != null) {
134-
operationMap.put(HttpMethod.PUT.name(), path.getPut());
146+
operationMap.put(PathItem.HttpMethod.PUT.name(), path.getPut());
135147
}
136148
if (path.getPost() != null) {
137-
operationMap.put(HttpMethod.POST.name(), path.getPost());
149+
operationMap.put(PathItem.HttpMethod.POST.name(), path.getPost());
138150
}
139151
if (path.getHead() != null) {
140-
operationMap.put(HttpMethod.HEAD.name(), path.getHead());
152+
operationMap.put(PathItem.HttpMethod.HEAD.name(), path.getHead());
141153
}
142154
if (path.getDelete() != null) {
143-
operationMap.put(HttpMethod.DELETE.name(), path.getDelete());
155+
operationMap.put(PathItem.HttpMethod.DELETE.name(), path.getDelete());
144156
}
145157
if (path.getPatch() != null) {
146-
operationMap.put(HttpMethod.PATCH.name(), path.getPatch());
158+
operationMap.put(PathItem.HttpMethod.PATCH.name(), path.getPatch());
147159
}
148160
if (path.getOptions() != null) {
149-
operationMap.put(HttpMethod.OPTIONS.name(), path.getOptions());
161+
operationMap.put(PathItem.HttpMethod.OPTIONS.name(), path.getOptions());
150162
}
151163

152164
return operationMap;

spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/PolarisContractPropertiesAutoConfiguration.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,12 @@
1717

1818
package com.tencent.cloud.polaris.contract.config;
1919

20-
import javax.annotation.Nullable;
21-
2220
import com.tencent.cloud.polaris.context.ConditionalOnPolarisEnabled;
2321

2422
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2523
import org.springframework.context.annotation.Bean;
2624
import org.springframework.context.annotation.Configuration;
25+
import org.springframework.lang.Nullable;
2726

2827
/**
2928
* Auto configuration for Polaris contract properties.

0 commit comments

Comments
 (0)