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:
```
./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:

View File

@ -42,6 +42,7 @@ object ScalatraServerGenerator extends BasicScalaGenerator {
("README.mustache", outputFolder, "README.md"),
("build.sbt", outputFolder, "build.sbt"),
("web.xml", outputFolder + "/src/main/webapp/WEB-INF", "web.xml"),
("JettyMain.scala", outputFolder + "/src/main/scala", "JettyMain.scala"),
("Bootstrap.mustache", destinationDir, "ScalatraBootstrap.scala"),
("ServletApp.mustache", destinationDir, "ServletApp.scala"),
("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._
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"
scalaVersion := "2.9.2"
seq(webSettings :_*)
libraryDependencies ++= Seq(
"org.scalatra" % "scalatra" % "2.2.0-SNAPSHOT",
"org.scalatra" % "scalatra-scalate" % "2.2.0-SNAPSHOT",
"org.scalatra" % "scalatra-specs2" % "2.2.0-SNAPSHOT" % "test",
"org.scalatra" % "scalatra-swagger" % "2.2.0-SNAPSHOT",
"org.scalatra" % "scalatra-json" % "2.2.0-SNAPSHOT",
"org.json4s" %% "json4s-jackson" % "3.0.0-SNAPSHOT",
"com.wordnik" % "swagger-core_2.9.1" % "1.1.1-SNAPSHOT",
"ch.qos.logback" % "logback-classic" % "1.0.6" % "runtime",
"org.eclipse.jetty" % "jetty-webapp" % "8.1.5.v20120716" % "container",
"org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar")))
"org.scalatest" %% "scalatest" % "1.6.1" % "test",
"org.scalatra" % "scalatra" % "2.2.0",
"org.scalatra" % "scalatra-auth" % "2.2.0",
"org.scalatra" % "scalatra-scalate" % "2.2.0",
"org.scalatra" % "scalatra-json" % "2.2.0",
"org.scalatra" % "scalatra-fileupload" % "2.2.0",
"org.scalatra" % "scalatra-swagger" % "2.2.0",
"org.scalatra" % "scalatra-swagger-ext" % "2.2.0",
"org.scalatra" % "scalatra-slf4j" % "2.2.0",
"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/"
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 {
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"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,5 +1,6 @@
<?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"
version="3.0">
<listener>
@ -8,13 +9,9 @@
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/img/*</url-pattern>
<url-pattern>/*.html</url-pattern>
<url-pattern>/css/*</url-pattern>
<url-pattern>/js/*</url-pattern>
<url-pattern>/assets/*</url-pattern>
<url-pattern>/js/*.js</url-pattern>
<url-pattern>/images/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>org.scalatra.LifeCycle</param-name>
<param-value>com.wordnik.swagger.sample.Scalatra</param-value>
</context-param>
</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}
class ResourcesApp(implicit val swagger: Swagger) extends ScalatraServlet with JacksonSwaggerBase {
protected implicit val jsonFormats: Formats = DefaultFormats
before() {
response.headers += ("Access-Control-Allow-Origin" -> "*")
}

View File

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

View File

@ -1,30 +1,58 @@
import AssemblyKeys._ // put this at the top of the file
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"
scalaVersion := "2.9.2"
seq(webSettings :_*)
libraryDependencies ++= Seq(
"org.scalatra" % "scalatra" % "2.2.0-SNAPSHOT",
"org.scalatra" % "scalatra-scalate" % "2.2.0-SNAPSHOT",
"org.scalatra" % "scalatra-specs2" % "2.2.0-SNAPSHOT" % "test",
"org.scalatra" % "scalatra-swagger" % "2.2.0-SNAPSHOT",
"org.scalatra" % "scalatra-json" % "2.2.0-SNAPSHOT",
"org.json4s" %% "json4s-jackson" % "3.0.0",
"com.wordnik" % "swagger-core_2.9.1" % "1.1.1-SNAPSHOT",
"ch.qos.logback" % "logback-classic" % "1.0.6" % "runtime",
"org.eclipse.jetty" % "jetty-webapp" % "8.1.5.v20120716" % "container",
"org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar")))
"org.scalatest" %% "scalatest" % "1.6.1" % "test",
"org.scalatra" % "scalatra" % "2.2.0",
"org.scalatra" % "scalatra-auth" % "2.2.0",
"org.scalatra" % "scalatra-scalate" % "2.2.0",
"org.scalatra" % "scalatra-json" % "2.2.0",
"org.scalatra" % "scalatra-fileupload" % "2.2.0",
"org.scalatra" % "scalatra-swagger" % "2.2.0",
"org.scalatra" % "scalatra-swagger-ext" % "2.2.0",
"org.scalatra" % "scalatra-slf4j" % "2.2.0",
"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/"
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 {
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"

View File

@ -1,5 +1,6 @@
<?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"
version="3.0">
<listener>
@ -8,13 +9,9 @@
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/img/*</url-pattern>
<url-pattern>/*.html</url-pattern>
<url-pattern>/css/*</url-pattern>
<url-pattern>/js/*</url-pattern>
<url-pattern>/assets/*</url-pattern>
<url-pattern>/js/*.js</url-pattern>
<url-pattern>/images/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>org.scalatra.LifeCycle</param-name>
<param-value>com.wordnik.swagger.sample.Scalatra</param-value>
</context-param>
</web-app>