From 8557a743453bb3a6c8f66a0dd89c1381e778aad2 Mon Sep 17 00:00:00 2001 From: Emelyanov Alexandr Date: Tue, 19 Feb 2019 10:04:36 +0500 Subject: [PATCH] #3 Api versions feature preview. the main work is done --- build.gradle | 69 +++++++++---------- descriptor.json | 3 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../zuul/swagger/GenericSwaggerService.java | 27 -------- .../zuul/swagger/ServiceInfo.java | 27 -------- .../zuul/swagger/SwaggerService.java | 13 ---- .../ZuulSpringfoxSwaggerConfiguration.java | 1 + .../zuul/swagger/ZuulSwaggerController.java | 36 ---------- .../controller/ZuulSwaggerController.java | 26 +++++++ .../{ => exception}/NotFoundException.java | 2 +- .../zuul/swagger/props/ServiceInfo.java | 22 ++++++ .../{ => props}/ServicesSwaggerInfo.java | 25 ++++--- .../swagger/service/GenericRouteService.java | 26 +++++++ .../service/GenericSwaggerService.java | 50 ++++++++++++++ .../zuul/swagger/service/RouteService.java | 10 +++ .../zuul/swagger/service/SwaggerService.java | 20 ++++++ .../service/VersionedPatternRouteService.java | 26 +++++++ .../ZuulSwaggerResourceProvider.java | 26 +++---- 18 files changed, 244 insertions(+), 167 deletions(-) delete mode 100644 src/main/java/ru/reliabletech/zuul/swagger/GenericSwaggerService.java delete mode 100644 src/main/java/ru/reliabletech/zuul/swagger/ServiceInfo.java delete mode 100644 src/main/java/ru/reliabletech/zuul/swagger/SwaggerService.java delete mode 100644 src/main/java/ru/reliabletech/zuul/swagger/ZuulSwaggerController.java create mode 100644 src/main/java/ru/reliabletech/zuul/swagger/controller/ZuulSwaggerController.java rename src/main/java/ru/reliabletech/zuul/swagger/{ => exception}/NotFoundException.java (85%) create mode 100644 src/main/java/ru/reliabletech/zuul/swagger/props/ServiceInfo.java rename src/main/java/ru/reliabletech/zuul/swagger/{ => props}/ServicesSwaggerInfo.java (57%) create mode 100644 src/main/java/ru/reliabletech/zuul/swagger/service/GenericRouteService.java create mode 100644 src/main/java/ru/reliabletech/zuul/swagger/service/GenericSwaggerService.java create mode 100644 src/main/java/ru/reliabletech/zuul/swagger/service/RouteService.java create mode 100644 src/main/java/ru/reliabletech/zuul/swagger/service/SwaggerService.java create mode 100644 src/main/java/ru/reliabletech/zuul/swagger/service/VersionedPatternRouteService.java rename src/main/java/ru/reliabletech/zuul/swagger/{ => swagger}/ZuulSwaggerResourceProvider.java (52%) diff --git a/build.gradle b/build.gradle index 23315b7..e6ecc87 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,4 @@ +import java.time.LocalDate import java.time.format.DateTimeFormatter buildscript { @@ -16,26 +17,41 @@ apply plugin: 'maven-publish' // project properties group 'ru.reliabletech' -def artifact = 'zuul-springfox-swagger' +def libName = 'zuul-springfox-swagger' version '0.1.2-SNAPSHOT' sourceCompatibility = 1.8 -def currentDate = java.time.LocalDate.now().format(DateTimeFormatter.ISO_DATE) +def currentDate = LocalDate.now().format(DateTimeFormatter.ISO_DATE) + +//tasks +task sourcesJar(type: Jar) { + classifier = 'sources' + from sourceSets.main.allSource +} + +artifacts { + archives sourcesJar +} + +task expandDescriptor(type: Copy) { + from 'descriptor.json' + into 'build' + expand(version: project.version, date: currentDate) +} + +build.dependsOn expandDescriptor +compileJava.dependsOn(processResources) // plugin settings publishing { publications { maven(MavenPublication) { from components.java + artifact sourcesJar groupId project.group - artifactId artifact + artifactId libName version project.version - } - } -} -model { - tasks.generatePomFileForMavenPublication { - destination = file("$buildDir/libs/$artifact-${version}.pom") + } } } @@ -43,7 +59,7 @@ jar { manifest { attributes( "Group": group, - "Artifact-Id": artifact, + "Artifact-Id": libName, "Version": version, "Source-Compatibility": sourceCompatibility, "Build-Time": currentDate @@ -51,27 +67,8 @@ jar { } } -//tasks -task sourcesJar(type: Jar) { - classifier = 'sources' - from sourceSets.main.allSource -} - -artifacts { - archives sourcesJar -} - -task expandDescriptor(type: Copy) { - from 'descriptor.json' - into 'build' - expand(version: project.version, date: currentDate) -} - -build.dependsOn expandDescriptor -compileJava.dependsOn(processResources) - //dependency management -def springCloudVersion = 'Dalston.SR3' +def springCloudVersion = 'Finchley.SR1' dependencyManagement { imports { @@ -84,13 +81,11 @@ repositories { } dependencies { - compile 'org.springframework.cloud:spring-cloud-starter-eureka' - compile 'org.springframework.cloud:spring-cloud-starter-zuul' - compile 'org.projectlombok:lombok:1.16.18' - compile 'io.springfox:springfox-swagger2:2.7.0' + compileOnly 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server' + compileOnly 'org.springframework.cloud:spring-cloud-starter-netflix-zuul' + annotationProcessor 'org.projectlombok:lombok:1.18.4' + implementation 'org.projectlombok:lombok:1.18.4' + compile 'io.springfox:springfox-swagger2:2.9.2' compile 'io.springfox.ui:springfox-swagger-ui-rfc6570:1.0.0' compileOnly 'org.springframework.boot:spring-boot-configuration-processor:1.5.9.RELEASE' } -task wrapper(type: Wrapper) { - gradleVersion = '4.3.1' -} diff --git a/descriptor.json b/descriptor.json index 008ecd0..c799f5c 100644 --- a/descriptor.json +++ b/descriptor.json @@ -22,7 +22,8 @@ "gpgSign": false }, "files":[ - {"includePattern": "build/libs/(.*)", "uploadPattern": "ru/reliabletech/zuul-springfox-swagger/${version}/\$1"} + {"includePattern": "build/libs/(.*)", "uploadPattern": "ru/reliabletech/zuul-springfox-swagger/${version}/\$1"}, + {"includePattern": "build/publications/maven/pom-default.xml", "uploadPattern": "ru/reliabletech/zuul-springfox-swagger/${version}/pom-${version}.xml"} ], "publish": true } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cee9eba..6c6d336 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.1-bin.zip diff --git a/src/main/java/ru/reliabletech/zuul/swagger/GenericSwaggerService.java b/src/main/java/ru/reliabletech/zuul/swagger/GenericSwaggerService.java deleted file mode 100644 index 1037afe..0000000 --- a/src/main/java/ru/reliabletech/zuul/swagger/GenericSwaggerService.java +++ /dev/null @@ -1,27 +0,0 @@ -package ru.reliabletech.zuul.swagger; - -import com.fasterxml.jackson.databind.node.ObjectNode; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.web.client.RestTemplate; - -/** - * @author Alexandr Emelyanov - * on 27.11.2017. - */ -@Component -public class GenericSwaggerService implements SwaggerService { - - @Autowired - private RestTemplate restTemplate; - @Autowired - private ServicesSwaggerInfo servicesSwaggerInfo; - - @Override - public ObjectNode getSwaggerDoc(String route) { - return restTemplate.getForObject("{service-url}/{doc-url}", - ObjectNode.class, - servicesSwaggerInfo.getServiceUrl(route), - servicesSwaggerInfo.getSwaggerUrl(route)); - } -} diff --git a/src/main/java/ru/reliabletech/zuul/swagger/ServiceInfo.java b/src/main/java/ru/reliabletech/zuul/swagger/ServiceInfo.java deleted file mode 100644 index 0104d80..0000000 --- a/src/main/java/ru/reliabletech/zuul/swagger/ServiceInfo.java +++ /dev/null @@ -1,27 +0,0 @@ -package ru.reliabletech.zuul.swagger; - -import lombok.Data; -import org.springframework.util.StringUtils; - -import java.util.Optional; - -/** - * @author Alexandr Emelyanov - * on 27.11.2017. - */ -@Data -public class ServiceInfo { - - private static final String PROTOCOL_DEFAULT = "http://"; - private String path; - private String serviceId; - private String url; - private String swaggerUrl; - private String protocol = PROTOCOL_DEFAULT; - - public String getServiceUrl() { - return Optional.ofNullable(url) - .filter(url -> !StringUtils.isEmpty(url)) - .orElseGet(() -> String.format("%s%s/", protocol, serviceId)); - } -} \ No newline at end of file diff --git a/src/main/java/ru/reliabletech/zuul/swagger/SwaggerService.java b/src/main/java/ru/reliabletech/zuul/swagger/SwaggerService.java deleted file mode 100644 index c364438..0000000 --- a/src/main/java/ru/reliabletech/zuul/swagger/SwaggerService.java +++ /dev/null @@ -1,13 +0,0 @@ -package ru.reliabletech.zuul.swagger; - -import com.fasterxml.jackson.databind.node.ObjectNode; - -/** - * @author Alexandr Emelyanov - * on 27.11.2017. - */ -public interface SwaggerService { - - ObjectNode getSwaggerDoc(String route); - -} diff --git a/src/main/java/ru/reliabletech/zuul/swagger/ZuulSpringfoxSwaggerConfiguration.java b/src/main/java/ru/reliabletech/zuul/swagger/ZuulSpringfoxSwaggerConfiguration.java index 17e8024..8c20fd7 100644 --- a/src/main/java/ru/reliabletech/zuul/swagger/ZuulSpringfoxSwaggerConfiguration.java +++ b/src/main/java/ru/reliabletech/zuul/swagger/ZuulSpringfoxSwaggerConfiguration.java @@ -6,6 +6,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.web.client.RestTemplate; +import ru.reliabletech.zuul.swagger.props.ServicesSwaggerInfo; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; diff --git a/src/main/java/ru/reliabletech/zuul/swagger/ZuulSwaggerController.java b/src/main/java/ru/reliabletech/zuul/swagger/ZuulSwaggerController.java deleted file mode 100644 index 3481fbe..0000000 --- a/src/main/java/ru/reliabletech/zuul/swagger/ZuulSwaggerController.java +++ /dev/null @@ -1,36 +0,0 @@ -package ru.reliabletech.zuul.swagger; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.fasterxml.jackson.databind.node.TextNode; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.client.RestTemplate; - -/** - * @author Alexandr Emelyanov - * on 27.11.2017. - */ -@RestController -public class ZuulSwaggerController { - - @Autowired - private RestTemplate restTemplate; - @Autowired - private ServicesSwaggerInfo servicesSwaggerInfo; - @Autowired - private SwaggerService swaggerService; - - @GetMapping("/api-docs") - public JsonNode getApiDocs(@RequestParam("route") String route) { - String path = servicesSwaggerInfo.getServicePath(route) - .orElseThrow(NotFoundException::new) - .replace("/**", ""); - ObjectNode swaggerDocumentation = swaggerService.getSwaggerDoc(route); - swaggerDocumentation.set("host", new TextNode("")); - swaggerDocumentation.set("basePath", new TextNode(servicesSwaggerInfo.getPrefix() + path)); - return swaggerDocumentation; - } -} diff --git a/src/main/java/ru/reliabletech/zuul/swagger/controller/ZuulSwaggerController.java b/src/main/java/ru/reliabletech/zuul/swagger/controller/ZuulSwaggerController.java new file mode 100644 index 0000000..d42e13d --- /dev/null +++ b/src/main/java/ru/reliabletech/zuul/swagger/controller/ZuulSwaggerController.java @@ -0,0 +1,26 @@ +package ru.reliabletech.zuul.swagger.controller; + +import com.fasterxml.jackson.databind.JsonNode; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import ru.reliabletech.zuul.swagger.service.SwaggerService; + +/** + * Controller for api + * + * @author Alexandr Emelyanov + * on 27.11.2017. + */ +@RestController +public class ZuulSwaggerController { + + @Autowired + private SwaggerService swaggerService; + + @GetMapping("/api-docs") + public JsonNode getApiDocs(@RequestParam("route") String route) { + return swaggerService.getSwaggerDoc(route); + } +} diff --git a/src/main/java/ru/reliabletech/zuul/swagger/NotFoundException.java b/src/main/java/ru/reliabletech/zuul/swagger/exception/NotFoundException.java similarity index 85% rename from src/main/java/ru/reliabletech/zuul/swagger/NotFoundException.java rename to src/main/java/ru/reliabletech/zuul/swagger/exception/NotFoundException.java index 8481fac..d020d2c 100644 --- a/src/main/java/ru/reliabletech/zuul/swagger/NotFoundException.java +++ b/src/main/java/ru/reliabletech/zuul/swagger/exception/NotFoundException.java @@ -1,4 +1,4 @@ -package ru.reliabletech.zuul.swagger; +package ru.reliabletech.zuul.swagger.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/src/main/java/ru/reliabletech/zuul/swagger/props/ServiceInfo.java b/src/main/java/ru/reliabletech/zuul/swagger/props/ServiceInfo.java new file mode 100644 index 0000000..8890f79 --- /dev/null +++ b/src/main/java/ru/reliabletech/zuul/swagger/props/ServiceInfo.java @@ -0,0 +1,22 @@ +package ru.reliabletech.zuul.swagger.props; + +import lombok.Data; + +/** + * @author Alexandr Emelyanov + * on 27.11.2017. + */ +@Data +class ServiceInfo { + + private String path; + + private String serviceId; + + private String url; + + private String swaggerUri; + + private String protocol = ""; + +} \ No newline at end of file diff --git a/src/main/java/ru/reliabletech/zuul/swagger/ServicesSwaggerInfo.java b/src/main/java/ru/reliabletech/zuul/swagger/props/ServicesSwaggerInfo.java similarity index 57% rename from src/main/java/ru/reliabletech/zuul/swagger/ServicesSwaggerInfo.java rename to src/main/java/ru/reliabletech/zuul/swagger/props/ServicesSwaggerInfo.java index eeb27b7..607b75c 100644 --- a/src/main/java/ru/reliabletech/zuul/swagger/ServicesSwaggerInfo.java +++ b/src/main/java/ru/reliabletech/zuul/swagger/props/ServicesSwaggerInfo.java @@ -1,6 +1,6 @@ -package ru.reliabletech.zuul.swagger; +package ru.reliabletech.zuul.swagger.props; -import lombok.Data; +import lombok.*; import org.springframework.boot.context.properties.ConfigurationProperties; import java.util.HashMap; @@ -17,11 +17,14 @@ public class ServicesSwaggerInfo { public static final String DEFAULT_SWAGGER_API_URL = "v2/api-docs"; + public static final String PROTOCOL_DEFAULT = "http://"; private String prefix; private String defaultSwaggerUrl = DEFAULT_SWAGGER_API_URL; + private String defaultProtocol = PROTOCOL_DEFAULT; + private Map routes = new HashMap<>(); public Set getRouteNames() { @@ -30,18 +33,24 @@ public Set getRouteNames() { public String getSwaggerUrl(String route) { return Optional.ofNullable(routes.get(route)) - .map(ServiceInfo::getSwaggerUrl) - .orElse(defaultSwaggerUrl); + .map(ServiceInfo::getSwaggerUri) + .orElse(defaultSwaggerUrl); + } + + public String getDefaultProtocol(String route) { + return Optional.ofNullable(routes.get(route)) + .map(ServiceInfo::getProtocol) + .orElse(defaultProtocol); } - public String getServiceUrl(String route) { + public Optional getServiceUrl(String route) { return Optional.ofNullable(routes.get(route)) - .map(ServiceInfo::getServiceUrl) - .orElse(""); + .map(ServiceInfo::getUrl) + .map(url -> String.format("%s%s/", getDefaultProtocol(route), url)); } public Optional getServicePath(String route) { return Optional.ofNullable(routes.get(route)) - .map(ServiceInfo::getPath); + .map(ServiceInfo::getPath); } } \ No newline at end of file diff --git a/src/main/java/ru/reliabletech/zuul/swagger/service/GenericRouteService.java b/src/main/java/ru/reliabletech/zuul/swagger/service/GenericRouteService.java new file mode 100644 index 0000000..99b784b --- /dev/null +++ b/src/main/java/ru/reliabletech/zuul/swagger/service/GenericRouteService.java @@ -0,0 +1,26 @@ +package ru.reliabletech.zuul.swagger.service; + +import lombok.AllArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.stereotype.Component; +import ru.reliabletech.zuul.swagger.props.ServicesSwaggerInfo; + +/** + * @author Alexandr Emelyanov + * on 15.02.19. + */ +@ConditionalOnMissingBean(RouteService.class) +@Component +@AllArgsConstructor +public class GenericRouteService implements RouteService { + + private ServicesSwaggerInfo servicesSwaggerInfo; + + @Override + public String getPath(String route) { + return servicesSwaggerInfo + .getServicePath(route) + .orElse(route); + } +} diff --git a/src/main/java/ru/reliabletech/zuul/swagger/service/GenericSwaggerService.java b/src/main/java/ru/reliabletech/zuul/swagger/service/GenericSwaggerService.java new file mode 100644 index 0000000..9e5e6d5 --- /dev/null +++ b/src/main/java/ru/reliabletech/zuul/swagger/service/GenericSwaggerService.java @@ -0,0 +1,50 @@ +package ru.reliabletech.zuul.swagger.service; + +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.databind.node.TextNode; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; +import ru.reliabletech.zuul.swagger.exception.NotFoundException; +import ru.reliabletech.zuul.swagger.props.ServicesSwaggerInfo; +import ru.reliabletech.zuul.swagger.service.RouteService; + +/** + * @author Alexandr Emelyanov + * on 27.11.2017. + */ +@Component +public class GenericSwaggerService implements SwaggerService { + + @Autowired + private RestTemplate restTemplate; + @Autowired + private ServicesSwaggerInfo servicesSwaggerInfo; + @Autowired + private RouteService routeService; + + @Override + public ObjectNode getSwaggerDoc(String route) { + ObjectNode swaggerDocumentation = getOriginalSwaggerDoc(route); + swaggerDocumentation.set("host", new TextNode("")); + swaggerDocumentation.set("basePath", new TextNode(servicesSwaggerInfo.getPrefix() + routeService.getPath(route))); + return swaggerDocumentation; + } + + @Override + public ObjectNode getOriginalSwaggerDoc(String route) { + String serviceUrl = servicesSwaggerInfo.getServiceUrl(route) + .orElseGet(() -> servicesSwaggerInfo.getDefaultProtocol() + route); + String url = String.format("%s/%s", + serviceUrl, + servicesSwaggerInfo.getSwaggerUrl(route)); + try { + return restTemplate.getForObject(url, ObjectNode.class); + } catch (IllegalStateException e) { + if (e.getMessage() == null || !e.getMessage().startsWith("No instances available for")) { + throw e; + } + throw new NotFoundException(); // TODO + } + } +} diff --git a/src/main/java/ru/reliabletech/zuul/swagger/service/RouteService.java b/src/main/java/ru/reliabletech/zuul/swagger/service/RouteService.java new file mode 100644 index 0000000..fa98bdc --- /dev/null +++ b/src/main/java/ru/reliabletech/zuul/swagger/service/RouteService.java @@ -0,0 +1,10 @@ +package ru.reliabletech.zuul.swagger.service; + +/** + * @author Alexandr Emelyanov + * on 15.02.19. + */ +public interface RouteService { + + String getPath(String route); +} diff --git a/src/main/java/ru/reliabletech/zuul/swagger/service/SwaggerService.java b/src/main/java/ru/reliabletech/zuul/swagger/service/SwaggerService.java new file mode 100644 index 0000000..8376099 --- /dev/null +++ b/src/main/java/ru/reliabletech/zuul/swagger/service/SwaggerService.java @@ -0,0 +1,20 @@ +package ru.reliabletech.zuul.swagger.service; + +import com.fasterxml.jackson.databind.node.ObjectNode; + +/** + * @author Alexandr Emelyanov + * on 27.11.2017. + */ +public interface SwaggerService { + + ObjectNode getOriginalSwaggerDoc(String route); + + ObjectNode getSwaggerDoc(String route); + + default String getSwaggerVersion(String route) { + ObjectNode swaggerDocumentation = getOriginalSwaggerDoc(route); + return swaggerDocumentation == null ? "" : swaggerDocumentation.get("swagger").asText(); + } + +} diff --git a/src/main/java/ru/reliabletech/zuul/swagger/service/VersionedPatternRouteService.java b/src/main/java/ru/reliabletech/zuul/swagger/service/VersionedPatternRouteService.java new file mode 100644 index 0000000..4f6d059 --- /dev/null +++ b/src/main/java/ru/reliabletech/zuul/swagger/service/VersionedPatternRouteService.java @@ -0,0 +1,26 @@ +package ru.reliabletech.zuul.swagger.service; + +import lombok.AllArgsConstructor; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.cloud.netflix.zuul.filters.discovery.ServiceRouteMapper; +import org.springframework.stereotype.Component; +import ru.reliabletech.zuul.swagger.props.ServicesSwaggerInfo; + +/** + * @author Alexandr Emelyanov + * on 15.02.19. + */ +@Component +@ConditionalOnBean(ServiceRouteMapper.class) +@AllArgsConstructor +public class VersionedPatternRouteService implements RouteService { + + private ServicesSwaggerInfo servicesSwaggerInfo; + private ServiceRouteMapper serviceRouteMapper; + + @Override + public String getPath(String route) { + return servicesSwaggerInfo.getServicePath(route) + .orElseGet(() -> serviceRouteMapper.apply(route)); + } +} diff --git a/src/main/java/ru/reliabletech/zuul/swagger/ZuulSwaggerResourceProvider.java b/src/main/java/ru/reliabletech/zuul/swagger/swagger/ZuulSwaggerResourceProvider.java similarity index 52% rename from src/main/java/ru/reliabletech/zuul/swagger/ZuulSwaggerResourceProvider.java rename to src/main/java/ru/reliabletech/zuul/swagger/swagger/ZuulSwaggerResourceProvider.java index 0c67ebc..209e740 100644 --- a/src/main/java/ru/reliabletech/zuul/swagger/ZuulSwaggerResourceProvider.java +++ b/src/main/java/ru/reliabletech/zuul/swagger/swagger/ZuulSwaggerResourceProvider.java @@ -1,11 +1,11 @@ -package ru.reliabletech.zuul.swagger; +package ru.reliabletech.zuul.swagger.swagger; -import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; -import org.springframework.web.client.RestTemplate; +import ru.reliabletech.zuul.swagger.props.ServicesSwaggerInfo; +import ru.reliabletech.zuul.swagger.service.SwaggerService; import springfox.documentation.swagger.web.SwaggerResource; import springfox.documentation.swagger.web.SwaggerResourcesProvider; @@ -21,8 +21,6 @@ @Component public class ZuulSwaggerResourceProvider implements SwaggerResourcesProvider { - @Autowired - private RestTemplate restTemplate; @Autowired private ServicesSwaggerInfo servicesSwaggerInfo; @Autowired @@ -30,22 +28,18 @@ public class ZuulSwaggerResourceProvider implements SwaggerResourcesProvider { @Override public List get() { - return servicesSwaggerInfo.getRouteNames() + return servicesSwaggerInfo.getRouteNames() // TODO by available services .stream() - .map(route -> { - ObjectNode swaggerDocumentation = swaggerService.getSwaggerDoc(route); - return generateSwaggerDocumentationResource(route, - "/api-docs?route=" + route, - swaggerDocumentation.get("swagger").asText()); - }) + .map(this::generateSwaggerDocumentationResource) .collect(Collectors.toList()); } - private SwaggerResource generateSwaggerDocumentationResource(String name, String location, String version) { + private SwaggerResource generateSwaggerDocumentationResource(String route) { + String swaggerVersion = swaggerService.getSwaggerVersion(route); SwaggerResource swaggerResource = new SwaggerResource(); - swaggerResource.setName(name); - swaggerResource.setLocation(location); - swaggerResource.setSwaggerVersion(version); + swaggerResource.setName(route); + swaggerResource.setLocation("/api-docs?route=" + route); + swaggerResource.setSwaggerVersion(swaggerVersion); return swaggerResource; }