updated to scalatra 2.2.0

This commit is contained in:
Tony Tam 2013-03-20 21:35:41 -07:00 committed by George Sibble
parent 184a9d0d5c
commit f2f33b98f7
18 changed files with 152 additions and 77 deletions

View File

@ -23,7 +23,7 @@ mvn package
You can now generate a server from any valid[**](https://github.com/wordnik/swagger-codegen/blob/master/README.md#validating-your-swagger-spec) swagger spec: You can now generate a server from any valid[**](https://github.com/wordnik/swagger-codegen/blob/master/README.md#validating-your-swagger-spec) swagger spec:
``` ```
./bin/runscala.sh samples/server-generator/scalatra/ScalatraServerGenerator.scala http://petstore.swagger.wordnik.com/api/resources.json special-key ./bin/runscala.sh samples/server-generator/scalatra/ScalatraServerGenerator.scala http://petstore.swagger.wordnik.com/api/api-docs.json special-key
``` ```
After executing this script, you will have an output directory with the server-generated files: After executing this script, you will have an output directory with the server-generated files:

View File

@ -42,6 +42,7 @@ object ScalatraServerGenerator extends BasicScalaGenerator {
("README.mustache", outputFolder, "README.md"), ("README.mustache", outputFolder, "README.md"),
("build.sbt", outputFolder, "build.sbt"), ("build.sbt", outputFolder, "build.sbt"),
("web.xml", outputFolder + "/src/main/webapp/WEB-INF", "web.xml"), ("web.xml", outputFolder + "/src/main/webapp/WEB-INF", "web.xml"),
("JettyMain.scala", outputFolder + "/src/main/scala", "JettyMain.scala"),
("Bootstrap.mustache", destinationDir, "ScalatraBootstrap.scala"), ("Bootstrap.mustache", destinationDir, "ScalatraBootstrap.scala"),
("ServletApp.mustache", destinationDir, "ServletApp.scala"), ("ServletApp.mustache", destinationDir, "ServletApp.scala"),
("project/build.properties", outputFolder, "project/build.properties"), ("project/build.properties", outputFolder, "project/build.properties"),

View File

@ -1,30 +1,58 @@
import AssemblyKeys._ // put this at the top of the file
import com.github.siasia.PluginKeys._ import com.github.siasia.PluginKeys._
organization := "com.wordnik" assemblySettings
name := "swagger-scalatra-server" organization := "org.eatbacon"
seq(webSettings :_*)
mainClass in assembly := Some("JettyMain")
name := "sfth"
version := "0.1.0-SNAPSHOT" version := "0.1.0-SNAPSHOT"
scalaVersion := "2.9.2" scalaVersion := "2.9.2"
seq(webSettings :_*)
libraryDependencies ++= Seq( libraryDependencies ++= Seq(
"org.scalatra" % "scalatra" % "2.2.0-SNAPSHOT", "org.scalatest" %% "scalatest" % "1.6.1" % "test",
"org.scalatra" % "scalatra-scalate" % "2.2.0-SNAPSHOT", "org.scalatra" % "scalatra" % "2.2.0",
"org.scalatra" % "scalatra-specs2" % "2.2.0-SNAPSHOT" % "test", "org.scalatra" % "scalatra-auth" % "2.2.0",
"org.scalatra" % "scalatra-swagger" % "2.2.0-SNAPSHOT", "org.scalatra" % "scalatra-scalate" % "2.2.0",
"org.scalatra" % "scalatra-json" % "2.2.0-SNAPSHOT", "org.scalatra" % "scalatra-json" % "2.2.0",
"org.json4s" %% "json4s-jackson" % "3.0.0-SNAPSHOT", "org.scalatra" % "scalatra-fileupload" % "2.2.0",
"com.wordnik" % "swagger-core_2.9.1" % "1.1.1-SNAPSHOT", "org.scalatra" % "scalatra-swagger" % "2.2.0",
"ch.qos.logback" % "logback-classic" % "1.0.6" % "runtime", "org.scalatra" % "scalatra-swagger-ext" % "2.2.0",
"org.eclipse.jetty" % "jetty-webapp" % "8.1.5.v20120716" % "container", "org.scalatra" % "scalatra-slf4j" % "2.2.0",
"org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar"))) "org.scalatra" % "scalatra-specs2" % "2.2.0" % "test",
"org.json4s" %% "json4s-jackson" % "3.1.0",
"org.json4s" %% "json4s-ext" % "3.1.0",
"commons-codec" % "commons-codec" % "1.7",
"net.databinder.dispatch" %% "dispatch-core" % "0.9.5",
"net.databinder.dispatch" %% "json4s-jackson" % "0.9.5",
"com.typesafe.akka" % "akka-actor" % "2.0.2",
"org.eclipse.jetty" % "jetty-server" % "8.1.7.v20120910" % "container;provided",
"org.eclipse.jetty" % "jetty-webapp" % "8.1.7.v20120910" % "container;provided",
"org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;compile;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar"))
)
resolvers += "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository"
resolvers += "Sonatype OSS Snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/" resolvers += "Sonatype OSS Snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/"
apps in container.Configuration <<= (deployment in Compile) map (d => Seq("/api" -> d)) resolvers += "Sonatype OSS Releases" at "http://oss.sonatype.org/content/repositories/releases/"
ivyXML := <dependencies>
<exclude module="slf4j-log4j12"/>
<exclude module="grizzled-slf4j_2.9.1"/>
<exclude module="jsr311-api" />
</dependencies>
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
{
case "about.html" => MergeStrategy.discard
case x => old(x)
}
}
ivyXML := <dependencies><exclude module="slf4j-log4j12"/></dependencies>

View File

@ -1,3 +1,5 @@
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.8.4")
libraryDependencies <+= sbtVersion(v => v match { libraryDependencies <+= sbtVersion(v => v match {
case "0.11.0" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.0-0.2.8" case "0.11.0" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.0-0.2.8"
case "0.11.1" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.1-0.2.10" case "0.11.1" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.1-0.2.10"

View File

@ -8,8 +8,8 @@ class ScalatraBootstrap extends LifeCycle {
override def init(context: ServletContext) { override def init(context: ServletContext) {
try { try {
context mount (new StoreApi, "/store/*")
context mount (new PetApi, "/pet/*") context mount (new PetApi, "/pet/*")
context mount (new StoreApi, "/store/*")
context mount (new UserApi, "/user/*") context mount (new UserApi, "/user/*")
context mount (new ResourcesApp, "/*") context mount (new ResourcesApp, "/*")
} catch { } catch {

View File

@ -6,8 +6,6 @@ import org.scalatra.ScalatraServlet
import org.json4s.{DefaultFormats, Formats} import org.json4s.{DefaultFormats, Formats}
class ResourcesApp(implicit val swagger: Swagger) extends ScalatraServlet with JacksonSwaggerBase { class ResourcesApp(implicit val swagger: Swagger) extends ScalatraServlet with JacksonSwaggerBase {
protected implicit val jsonFormats: Formats = DefaultFormats
before() { before() {
response.headers += ("Access-Control-Allow-Origin" -> "*") response.headers += ("Access-Control-Allow-Origin" -> "*")
} }

View File

@ -7,15 +7,13 @@ import org.scalatra.{ TypedParamSupport, ScalatraServlet }
import org.scalatra.swagger._ import org.scalatra.swagger._
import org.json4s._ import org.json4s._
import org.json4s.JsonDSL._ import org.json4s.JsonDSL._
import org.scalatra.json.{JValueResult, NativeJsonSupport} import org.scalatra.json.{ JValueResult, JacksonJsonSupport }
import scala.collection.JavaConverters._ import scala.collection.JavaConverters._
class PetApi (implicit val swagger: Swagger) extends ScalatraServlet class PetApi (implicit val swagger: Swagger) extends ScalatraServlet
with TypedParamSupport with JacksonJsonSupport
with NativeJsonSupport with SwaggerSupport {
with JValueResult
with SwaggerSupport {
protected implicit val jsonFormats: Formats = DefaultFormats protected implicit val jsonFormats: Formats = DefaultFormats
protected val applicationDescription: String = "PetApi" protected val applicationDescription: String = "PetApi"
@ -96,7 +94,7 @@ class PetApi (implicit val swagger: Swagger) extends ScalatraServlet
paramType = ParamType.Query, paramType = ParamType.Query,
required = true, required = true,
allowMultiple = true, allowMultiple = true,
allowableValues = AllowableValues("available","pending","sold"),defaultValue = Some("available"), defaultValue = Some("available"),
dataType = DataType("String")) dataType = DataType("String"))
)) { )) {

View File

@ -7,15 +7,13 @@ import org.scalatra.{ TypedParamSupport, ScalatraServlet }
import org.scalatra.swagger._ import org.scalatra.swagger._
import org.json4s._ import org.json4s._
import org.json4s.JsonDSL._ import org.json4s.JsonDSL._
import org.scalatra.json.{JValueResult, NativeJsonSupport} import org.scalatra.json.{ JValueResult, JacksonJsonSupport }
import scala.collection.JavaConverters._ import scala.collection.JavaConverters._
class StoreApi (implicit val swagger: Swagger) extends ScalatraServlet class StoreApi (implicit val swagger: Swagger) extends ScalatraServlet
with TypedParamSupport with JacksonJsonSupport
with NativeJsonSupport with SwaggerSupport {
with JValueResult
with SwaggerSupport {
protected implicit val jsonFormats: Formats = DefaultFormats protected implicit val jsonFormats: Formats = DefaultFormats
protected val applicationDescription: String = "StoreApi" protected val applicationDescription: String = "StoreApi"

View File

@ -7,15 +7,13 @@ import org.scalatra.{ TypedParamSupport, ScalatraServlet }
import org.scalatra.swagger._ import org.scalatra.swagger._
import org.json4s._ import org.json4s._
import org.json4s.JsonDSL._ import org.json4s.JsonDSL._
import org.scalatra.json.{JValueResult, NativeJsonSupport} import org.scalatra.json.{ JValueResult, JacksonJsonSupport }
import scala.collection.JavaConverters._ import scala.collection.JavaConverters._
class UserApi (implicit val swagger: Swagger) extends ScalatraServlet class UserApi (implicit val swagger: Swagger) extends ScalatraServlet
with TypedParamSupport with JacksonJsonSupport
with NativeJsonSupport with SwaggerSupport {
with JValueResult
with SwaggerSupport {
protected implicit val jsonFormats: Formats = DefaultFormats protected implicit val jsonFormats: Formats = DefaultFormats
protected val applicationDescription: String = "UserApi" protected val applicationDescription: String = "UserApi"

View File

@ -5,8 +5,8 @@ import com.wordnik.client.model.Tag
import scala.reflect.BeanProperty import scala.reflect.BeanProperty
case class Pet ( case class Pet (
id: Long,
tags: List[Tag], tags: List[Tag],
id: Long,
category: Category, category: Category,
/* pet status in the store */ /* pet status in the store */
status: String, status: String,

View File

@ -5,8 +5,8 @@ import scala.reflect.BeanProperty
case class User ( case class User (
id: Long, id: Long,
lastName: String, lastName: String,
username: String,
phone: String, phone: String,
username: String,
email: String, email: String,
/* User Status */ /* User Status */
userStatus: Int, userStatus: Int,

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"> version="3.0">
<listener> <listener>
@ -8,13 +9,9 @@
<servlet-mapping> <servlet-mapping>
<servlet-name>default</servlet-name> <servlet-name>default</servlet-name>
<url-pattern>/img/*</url-pattern> <url-pattern>/*.html</url-pattern>
<url-pattern>/css/*</url-pattern> <url-pattern>/css/*</url-pattern>
<url-pattern>/js/*</url-pattern> <url-pattern>/js/*.js</url-pattern>
<url-pattern>/assets/*</url-pattern> <url-pattern>/images/*</url-pattern>
</servlet-mapping> </servlet-mapping>
<context-param>
<param-name>org.scalatra.LifeCycle</param-name>
<param-value>com.wordnik.swagger.sample.Scalatra</param-value>
</context-param>
</web-app> </web-app>

View File

@ -0,0 +1,32 @@
import org.eclipse.jetty.server.nio.SelectChannelConnector
import org.eclipse.jetty.server.{ Server }
import org.eclipse.jetty.server.handler.ContextHandlerCollection
import org.eclipse.jetty.webapp.WebAppContext
import org.eclipse.jetty.servlet.{ DefaultServlet, ServletContextHandler, ServletHolder }
object JettyMain {
def main(args: Array[String]) = {
val server: Server = new Server
println("starting jetty")
server setGracefulShutdown 5000
server setSendServerVersion false
server setSendDateHeader true
server setStopAtShutdown true
val connector = new SelectChannelConnector
connector setPort sys.env.get("PORT").map(_.toInt).getOrElse(8080)
connector setMaxIdleTime 90000
server addConnector connector
val webapp = sys.env.get("PUBLIC") getOrElse "webapp"
val webApp = new WebAppContext
webApp setContextPath "/"
webApp setResourceBase webapp
webApp setDescriptor (webapp+"/WEB-INF/web.xml");
server setHandler webApp
server.start()
}
}

View File

@ -6,8 +6,6 @@ import org.scalatra.ScalatraServlet
import org.json4s.{DefaultFormats, Formats} import org.json4s.{DefaultFormats, Formats}
class ResourcesApp(implicit val swagger: Swagger) extends ScalatraServlet with JacksonSwaggerBase { class ResourcesApp(implicit val swagger: Swagger) extends ScalatraServlet with JacksonSwaggerBase {
protected implicit val jsonFormats: Formats = DefaultFormats
before() { before() {
response.headers += ("Access-Control-Allow-Origin" -> "*") response.headers += ("Access-Control-Allow-Origin" -> "*")
} }

View File

@ -8,15 +8,13 @@ import org.scalatra.{ TypedParamSupport, ScalatraServlet }
import org.scalatra.swagger._ import org.scalatra.swagger._
import org.json4s._ import org.json4s._
import org.json4s.JsonDSL._ import org.json4s.JsonDSL._
import org.scalatra.json.{JValueResult, NativeJsonSupport} import org.scalatra.json.{ JValueResult, JacksonJsonSupport }
import scala.collection.JavaConverters._ import scala.collection.JavaConverters._
class {{className}} (implicit val swagger: Swagger) extends ScalatraServlet class {{className}} (implicit val swagger: Swagger) extends ScalatraServlet
with TypedParamSupport with JacksonJsonSupport
with NativeJsonSupport with SwaggerSupport {
with JValueResult
with SwaggerSupport {
protected implicit val jsonFormats: Formats = DefaultFormats protected implicit val jsonFormats: Formats = DefaultFormats
protected val applicationDescription: String = "{{className}}" protected val applicationDescription: String = "{{className}}"

View File

@ -1,30 +1,58 @@
import AssemblyKeys._ // put this at the top of the file
import com.github.siasia.PluginKeys._ import com.github.siasia.PluginKeys._
organization := "com.wordnik" assemblySettings
name := "swagger-scalatra-server" organization := "org.eatbacon"
seq(webSettings :_*)
mainClass in assembly := Some("JettyMain")
name := "sfth"
version := "0.1.0-SNAPSHOT" version := "0.1.0-SNAPSHOT"
scalaVersion := "2.9.2" scalaVersion := "2.9.2"
seq(webSettings :_*)
libraryDependencies ++= Seq( libraryDependencies ++= Seq(
"org.scalatra" % "scalatra" % "2.2.0-SNAPSHOT", "org.scalatest" %% "scalatest" % "1.6.1" % "test",
"org.scalatra" % "scalatra-scalate" % "2.2.0-SNAPSHOT", "org.scalatra" % "scalatra" % "2.2.0",
"org.scalatra" % "scalatra-specs2" % "2.2.0-SNAPSHOT" % "test", "org.scalatra" % "scalatra-auth" % "2.2.0",
"org.scalatra" % "scalatra-swagger" % "2.2.0-SNAPSHOT", "org.scalatra" % "scalatra-scalate" % "2.2.0",
"org.scalatra" % "scalatra-json" % "2.2.0-SNAPSHOT", "org.scalatra" % "scalatra-json" % "2.2.0",
"org.json4s" %% "json4s-jackson" % "3.0.0", "org.scalatra" % "scalatra-fileupload" % "2.2.0",
"com.wordnik" % "swagger-core_2.9.1" % "1.1.1-SNAPSHOT", "org.scalatra" % "scalatra-swagger" % "2.2.0",
"ch.qos.logback" % "logback-classic" % "1.0.6" % "runtime", "org.scalatra" % "scalatra-swagger-ext" % "2.2.0",
"org.eclipse.jetty" % "jetty-webapp" % "8.1.5.v20120716" % "container", "org.scalatra" % "scalatra-slf4j" % "2.2.0",
"org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar"))) "org.scalatra" % "scalatra-specs2" % "2.2.0" % "test",
"org.json4s" %% "json4s-jackson" % "3.1.0",
"org.json4s" %% "json4s-ext" % "3.1.0",
"commons-codec" % "commons-codec" % "1.7",
"net.databinder.dispatch" %% "dispatch-core" % "0.9.5",
"net.databinder.dispatch" %% "json4s-jackson" % "0.9.5",
"com.typesafe.akka" % "akka-actor" % "2.0.2",
"org.eclipse.jetty" % "jetty-server" % "8.1.7.v20120910" % "container;provided",
"org.eclipse.jetty" % "jetty-webapp" % "8.1.7.v20120910" % "container;provided",
"org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;compile;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar"))
)
resolvers += "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository"
resolvers += "Sonatype OSS Snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/" resolvers += "Sonatype OSS Snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/"
apps in container.Configuration <<= (deployment in Compile) map (d => Seq("/api" -> d)) resolvers += "Sonatype OSS Releases" at "http://oss.sonatype.org/content/repositories/releases/"
ivyXML := <dependencies>
<exclude module="slf4j-log4j12"/>
<exclude module="grizzled-slf4j_2.9.1"/>
<exclude module="jsr311-api" />
</dependencies>
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
{
case "about.html" => MergeStrategy.discard
case x => old(x)
}
}
ivyXML := <dependencies><exclude module="slf4j-log4j12"/></dependencies>

View File

@ -1,3 +1,5 @@
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.8.4")
libraryDependencies <+= sbtVersion(v => v match { libraryDependencies <+= sbtVersion(v => v match {
case "0.11.0" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.0-0.2.8" case "0.11.0" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.0-0.2.8"
case "0.11.1" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.1-0.2.10" case "0.11.1" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.1-0.2.10"

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"> version="3.0">
<listener> <listener>
@ -8,13 +9,9 @@
<servlet-mapping> <servlet-mapping>
<servlet-name>default</servlet-name> <servlet-name>default</servlet-name>
<url-pattern>/img/*</url-pattern> <url-pattern>/*.html</url-pattern>
<url-pattern>/css/*</url-pattern> <url-pattern>/css/*</url-pattern>
<url-pattern>/js/*</url-pattern> <url-pattern>/js/*.js</url-pattern>
<url-pattern>/assets/*</url-pattern> <url-pattern>/images/*</url-pattern>
</servlet-mapping> </servlet-mapping>
<context-param>
<param-name>org.scalatra.LifeCycle</param-name>
<param-value>com.wordnik.swagger.sample.Scalatra</param-value>
</context-param>
</web-app> </web-app>