diff options
author | Vlad Uspensky <v.uspenskiy@icloud.com> | 2017-05-24 18:18:06 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-24 18:18:06 -0700 |
commit | a5946b44626c8bb0024ced3204feba6e71598088 (patch) | |
tree | 2276eaefa58e4cefa4a2c2971c0d0c02378a87cb | |
parent | 4918ea8daa68fbd5e0c7d63129a7f1f41cf2d25a (diff) | |
parent | daa48a7c0f95e27600e10efdc7aa8d4d596d2396 (diff) | |
download | driver-core-a5946b44626c8bb0024ced3204feba6e71598088.tar.gz driver-core-a5946b44626c8bb0024ced3204feba6e71598088.tar.bz2 driver-core-a5946b44626c8bb0024ced3204feba6e71598088.zip |
Merge pull request #40 from drivergroup/swagger-overridev0.12.8
Removing trailing spaces from Swagger routes …
-rw-r--r-- | src/main/scala/xyz/driver/core/app.scala | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/src/main/scala/xyz/driver/core/app.scala b/src/main/scala/xyz/driver/core/app.scala index e35c300..db8aa10 100644 --- a/src/main/scala/xyz/driver/core/app.scala +++ b/src/main/scala/xyz/driver/core/app.scala @@ -12,9 +12,11 @@ import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.RouteResult._ import akka.http.scaladsl.server.{ExceptionHandler, Route, RouteConcatenation} import akka.stream.ActorMaterializer +import com.github.swagger.akka.SwaggerHttpService._ import com.typesafe.config.Config import com.typesafe.scalalogging.Logger import io.swagger.models.Scheme +import io.swagger.util.Json import org.slf4j.{LoggerFactory, MDC} import spray.json.DefaultJsonProtocol import xyz.driver.core @@ -26,6 +28,8 @@ import xyz.driver.core.time.provider.{SystemTimeProvider, TimeProvider} import scala.compat.Platform.ConcurrentModificationException import scala.concurrent.duration._ import scala.concurrent.{Await, ExecutionContext, Future} +import scala.reflect.runtime.universe._ +import scala.util.control.NonFatal import scalaz.Scalaz.stringInstance import scalaz.syntax.equal._ @@ -66,7 +70,7 @@ object app { protected def bindHttp(modules: Seq[Module]): Unit = { val serviceTypes = modules.flatMap(_.routeTypes) - val swaggerService = new Swagger(baseUrl, Scheme.forValue(scheme), version, actorSystem, serviceTypes, config) + val swaggerService = swaggerOverride(serviceTypes) val swaggerRoutes = swaggerService.routes ~ swaggerService.swaggerUI val versionRt = versionRoute(version, gitHash, time.currentTime()) @@ -111,6 +115,32 @@ object app { } } + protected def swaggerOverride(apiTypes: Seq[Type]) = { + new Swagger(baseUrl, Scheme.forValue(scheme), version, actorSystem, apiTypes, config) { + override def generateSwaggerJson: String = { + import io.swagger.models.Swagger + + import scala.collection.JavaConverters._ + + try { + val swagger: Swagger = reader.read(toJavaTypeSet(apiTypes).asJava) + + // Removing trailing spaces + swagger.setPaths(swagger.getPaths.asScala.map { case (key, path) => + key.trim -> path + }.toMap.asJava) + + Json.pretty().writeValueAsString(swagger) + } catch { + case NonFatal(t) => { + logger.error("Issue with creating swagger.json", t) + throw t + } + } + } + } + } + /** * Override me for custom exception handling * @@ -233,8 +263,6 @@ object app { } } - import scala.reflect.runtime.universe._ - trait Module { val name: String def route: Route |