aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVlad Uspensky <v.uspenskiy@icloud.com>2017-05-24 18:18:06 -0700
committerGitHub <noreply@github.com>2017-05-24 18:18:06 -0700
commita5946b44626c8bb0024ced3204feba6e71598088 (patch)
tree2276eaefa58e4cefa4a2c2971c0d0c02378a87cb
parent4918ea8daa68fbd5e0c7d63129a7f1f41cf2d25a (diff)
parentdaa48a7c0f95e27600e10efdc7aa8d4d596d2396 (diff)
downloaddriver-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.scala34
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