diff --git a/bin/android-java-petstore.sh b/bin/android-java-petstore.sh index 881f55c835e..9382c2bbf7d 100755 --- a/bin/android-java-petstore.sh +++ b/bin/android-java-petstore.sh @@ -1,7 +1,6 @@ #!/bin/sh SCRIPT="$0" -SCALA_RUNNER_VERSION=$(scala ./bin/Version.scala) while [ -h "$SCRIPT" ] ; do ls=`ls -ld "$SCRIPT"` @@ -19,6 +18,7 @@ if [ ! -d "${APP_DIR}" ]; then fi cd $APP_DIR +SCALA_RUNNER_VERSION=$(scala ./bin/Version.scala) # if you've executed sbt assembly previously it will use that instead. @@ -26,7 +26,7 @@ export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/ ags="$@ samples/client/petstore/android-java/AndroidJavaPetstoreCodegen.scala http://petstore.swagger.wordnik.com/api/api-docs special-key" if [ -f $APP_DIR/target/scala-$SCALA_RUNNER_VERSION/swagger-codegen.jar ]; then - scala -cp target/scala-$SCALA_RUNNER_VERSION/swagger-codegen.jar $ags + scala -cp $APP_DIR/target/scala-$SCALA_RUNNER_VERSION/swagger-codegen.jar $ags else echo "Please set scalaVersion := \"$SCALA_RUNNER_VERSION\" in build.sbt and run ./sbt assembly" fi diff --git a/bin/java-petstore.sh b/bin/java-petstore.sh index 6edd5590bce..acee3ea7885 100755 --- a/bin/java-petstore.sh +++ b/bin/java-petstore.sh @@ -1,7 +1,6 @@ #!/bin/sh SCRIPT="$0" -SCALA_RUNNER_VERSION=$(scala ./bin/Version.scala) while [ -h "$SCRIPT" ] ; do ls=`ls -ld "$SCRIPT"` @@ -19,6 +18,7 @@ if [ ! -d "${APP_DIR}" ]; then fi cd $APP_DIR +SCALA_RUNNER_VERSION=$(scala ./bin/Version.scala) # if you've executed sbt assembly previously it will use that instead. @@ -26,7 +26,7 @@ export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/ ags="$@ samples/client/petstore/java/JavaPetstoreCodegen.scala http://petstore.swagger.wordnik.com/api/api-docs special-key" if [ -f $APP_DIR/target/scala-$SCALA_RUNNER_VERSION/swagger-codegen.jar ]; then - scala -cp target/scala-$SCALA_RUNNER_VERSION/swagger-codegen.jar $ags + scala -cp $APP_DIR/target/scala-$SCALA_RUNNER_VERSION/swagger-codegen.jar $ags else echo "Please set scalaVersion := \"$SCALA_RUNNER_VERSION\" in build.sbt and run ./sbt assembly" fi diff --git a/samples/client/petstore/android-java/src/main/java/com/wordnik/petstore/api/PetApi.java b/samples/client/petstore/android-java/src/main/java/com/wordnik/petstore/api/PetApi.java index 6aba213e762..2ee047357a3 100644 --- a/samples/client/petstore/android-java/src/main/java/com/wordnik/petstore/api/PetApi.java +++ b/samples/client/petstore/android-java/src/main/java/com/wordnik/petstore/api/PetApi.java @@ -26,6 +26,8 @@ public class PetApi { return basePath; } + //error info- code: 400 reason: "Invalid ID supplied" model: + //error info- code: 404 reason: "Pet not found" model: public Pet getPetById (Long petId) throws ApiException { // verify required params are set if(petId == null ) { @@ -57,6 +59,7 @@ public class PetApi { } } } + //error info- code: 400 reason: "Invalid pet value" model: public void deletePet (String petId) throws ApiException { // verify required params are set if(petId == null ) { @@ -88,6 +91,7 @@ public class PetApi { } } } + //error info- code: 400 reason: "Invalid tag value" model: public List partialUpdate (String petId, Pet body) throws ApiException { // verify required params are set if(petId == null || body == null ) { @@ -119,6 +123,7 @@ public class PetApi { } } } + //error info- code: 405 reason: "Invalid input" model: public void updatePetWithForm (String petId, String name, String status) throws ApiException { // verify required params are set if(petId == null ) { @@ -177,6 +182,7 @@ public class PetApi { } } } + //error info- code: 405 reason: "Invalid input" model: public void addPet (Pet body) throws ApiException { // verify required params are set if(body == null ) { @@ -208,6 +214,9 @@ public class PetApi { } } } + //error info- code: 400 reason: "Invalid ID supplied" model: + //error info- code: 404 reason: "Pet not found" model: + //error info- code: 405 reason: "Validation exception" model: public void updatePet (Pet body) throws ApiException { // verify required params are set if(body == null ) { @@ -239,6 +248,7 @@ public class PetApi { } } } + //error info- code: 400 reason: "Invalid status value" model: public List findPetsByStatus (String status) throws ApiException { // verify required params are set if(status == null ) { @@ -272,6 +282,7 @@ public class PetApi { } } } + //error info- code: 400 reason: "Invalid tag value" model: public List findPetsByTags (String tags) throws ApiException { // verify required params are set if(tags == null ) { diff --git a/samples/client/petstore/android-java/src/main/java/com/wordnik/petstore/api/StoreApi.java b/samples/client/petstore/android-java/src/main/java/com/wordnik/petstore/api/StoreApi.java index de44244f9b0..17501e11427 100644 --- a/samples/client/petstore/android-java/src/main/java/com/wordnik/petstore/api/StoreApi.java +++ b/samples/client/petstore/android-java/src/main/java/com/wordnik/petstore/api/StoreApi.java @@ -26,6 +26,8 @@ public class StoreApi { return basePath; } + //error info- code: 400 reason: "Invalid ID supplied" model: + //error info- code: 404 reason: "Order not found" model: public Order getOrderById (String orderId) throws ApiException { // verify required params are set if(orderId == null ) { @@ -57,6 +59,8 @@ public class StoreApi { } } } + //error info- code: 400 reason: "Invalid ID supplied" model: + //error info- code: 404 reason: "Order not found" model: public void deleteOrder (String orderId) throws ApiException { // verify required params are set if(orderId == null ) { @@ -88,6 +92,7 @@ public class StoreApi { } } } + //error info- code: 400 reason: "Invalid order" model: public void placeOrder (Order body) throws ApiException { // verify required params are set if(body == null ) { diff --git a/samples/client/petstore/android-java/src/main/java/com/wordnik/petstore/api/UserApi.java b/samples/client/petstore/android-java/src/main/java/com/wordnik/petstore/api/UserApi.java index 098497a7007..d2ab87c37d9 100644 --- a/samples/client/petstore/android-java/src/main/java/com/wordnik/petstore/api/UserApi.java +++ b/samples/client/petstore/android-java/src/main/java/com/wordnik/petstore/api/UserApi.java @@ -26,6 +26,8 @@ public class UserApi { return basePath; } + //error info- code: 400 reason: "Invalid username supplied" model: + //error info- code: 404 reason: "User not found" model: public void updateUser (String username, User body) throws ApiException { // verify required params are set if(username == null || body == null ) { @@ -57,6 +59,8 @@ public class UserApi { } } } + //error info- code: 400 reason: "Invalid username supplied" model: + //error info- code: 404 reason: "User not found" model: public void deleteUser (String username) throws ApiException { // verify required params are set if(username == null ) { @@ -88,6 +92,8 @@ public class UserApi { } } } + //error info- code: 400 reason: "Invalid username supplied" model: + //error info- code: 404 reason: "User not found" model: public User getUserByName (String username) throws ApiException { // verify required params are set if(username == null ) { @@ -119,6 +125,7 @@ public class UserApi { } } } + //error info- code: 400 reason: "Invalid username and password combination" model: public String loginUser (String username, String password) throws ApiException { // verify required params are set if(username == null || password == null ) { diff --git a/samples/client/petstore/java/src/main/java/com/wordnik/petstore/api/PetApi.java b/samples/client/petstore/java/src/main/java/com/wordnik/petstore/api/PetApi.java index e0787f74767..c1e8248b99b 100644 --- a/samples/client/petstore/java/src/main/java/com/wordnik/petstore/api/PetApi.java +++ b/samples/client/petstore/java/src/main/java/com/wordnik/petstore/api/PetApi.java @@ -23,6 +23,8 @@ public class PetApi { return basePath; } + //error info- code: 400 reason: "Invalid ID supplied" model: + //error info- code: 404 reason: "Pet not found" model: public Pet getPetById (Long petId) throws ApiException { // verify required params are set if(petId == null ) { @@ -58,6 +60,7 @@ public class PetApi { } } } + //error info- code: 400 reason: "Invalid pet value" model: public void deletePet (String petId) throws ApiException { // verify required params are set if(petId == null ) { @@ -93,6 +96,7 @@ public class PetApi { } } } + //error info- code: 400 reason: "Invalid tag value" model: public List partialUpdate (String petId, Pet body) throws ApiException { // verify required params are set if(petId == null || body == null ) { @@ -128,6 +132,7 @@ public class PetApi { } } } + //error info- code: 405 reason: "Invalid input" model: public void updatePetWithForm (String petId, String name, String status) throws ApiException { // verify required params are set if(petId == null ) { @@ -197,6 +202,7 @@ public class PetApi { } } } + //error info- code: 405 reason: "Invalid input" model: public void addPet (Pet body) throws ApiException { // verify required params are set if(body == null ) { @@ -232,6 +238,9 @@ public class PetApi { } } } + //error info- code: 400 reason: "Invalid ID supplied" model: + //error info- code: 404 reason: "Pet not found" model: + //error info- code: 405 reason: "Validation exception" model: public void updatePet (Pet body) throws ApiException { // verify required params are set if(body == null ) { @@ -267,6 +276,7 @@ public class PetApi { } } } + //error info- code: 400 reason: "Invalid status value" model: public List findPetsByStatus (String status) throws ApiException { // verify required params are set if(status == null ) { @@ -304,6 +314,7 @@ public class PetApi { } } } + //error info- code: 400 reason: "Invalid tag value" model: public List findPetsByTags (String tags) throws ApiException { // verify required params are set if(tags == null ) { diff --git a/samples/client/petstore/java/src/main/java/com/wordnik/petstore/api/StoreApi.java b/samples/client/petstore/java/src/main/java/com/wordnik/petstore/api/StoreApi.java index 614700d9cdc..3a23b489acd 100644 --- a/samples/client/petstore/java/src/main/java/com/wordnik/petstore/api/StoreApi.java +++ b/samples/client/petstore/java/src/main/java/com/wordnik/petstore/api/StoreApi.java @@ -23,6 +23,8 @@ public class StoreApi { return basePath; } + //error info- code: 400 reason: "Invalid ID supplied" model: + //error info- code: 404 reason: "Order not found" model: public Order getOrderById (String orderId) throws ApiException { // verify required params are set if(orderId == null ) { @@ -58,6 +60,8 @@ public class StoreApi { } } } + //error info- code: 400 reason: "Invalid ID supplied" model: + //error info- code: 404 reason: "Order not found" model: public void deleteOrder (String orderId) throws ApiException { // verify required params are set if(orderId == null ) { @@ -93,6 +97,7 @@ public class StoreApi { } } } + //error info- code: 400 reason: "Invalid order" model: public void placeOrder (Order body) throws ApiException { // verify required params are set if(body == null ) { diff --git a/samples/client/petstore/java/src/main/java/com/wordnik/petstore/api/UserApi.java b/samples/client/petstore/java/src/main/java/com/wordnik/petstore/api/UserApi.java index 06cf8d73d9d..066b62434df 100644 --- a/samples/client/petstore/java/src/main/java/com/wordnik/petstore/api/UserApi.java +++ b/samples/client/petstore/java/src/main/java/com/wordnik/petstore/api/UserApi.java @@ -23,6 +23,8 @@ public class UserApi { return basePath; } + //error info- code: 400 reason: "Invalid username supplied" model: + //error info- code: 404 reason: "User not found" model: public void updateUser (String username, User body) throws ApiException { // verify required params are set if(username == null || body == null ) { @@ -58,6 +60,8 @@ public class UserApi { } } } + //error info- code: 400 reason: "Invalid username supplied" model: + //error info- code: 404 reason: "User not found" model: public void deleteUser (String username) throws ApiException { // verify required params are set if(username == null ) { @@ -93,6 +97,8 @@ public class UserApi { } } } + //error info- code: 400 reason: "Invalid username supplied" model: + //error info- code: 404 reason: "User not found" model: public User getUserByName (String username) throws ApiException { // verify required params are set if(username == null ) { @@ -128,6 +134,7 @@ public class UserApi { } } } + //error info- code: 400 reason: "Invalid username and password combination" model: public String loginUser (String username, String password) throws ApiException { // verify required params are set if(username == null || password == null ) { diff --git a/src/main/resources/Java/api.mustache b/src/main/resources/Java/api.mustache index d94d0b2a4ed..65c0324feaa 100644 --- a/src/main/resources/Java/api.mustache +++ b/src/main/resources/Java/api.mustache @@ -27,6 +27,10 @@ public class {{classname}} { } {{#operation}} + {{#errorList}} //error info- code: {{code}} reason: "{{reason}}" model: {{#responseModel}}{{responseModel}} + {{/responseModel}}{{^responseModel}} + {{/responseModel}} + {{/errorList}} public {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}void {{/returnType}} {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) throws ApiException { {{#requiredParamCount}} // verify required params are set diff --git a/src/main/resources/android-java/api.mustache b/src/main/resources/android-java/api.mustache index 7426e724da9..90eac11961d 100644 --- a/src/main/resources/android-java/api.mustache +++ b/src/main/resources/android-java/api.mustache @@ -30,6 +30,10 @@ public class {{classname}} { } {{#operation}} + {{#errorList}} //error info- code: {{code}} reason: "{{reason}}" model: {{#responseModel}}{{responseModel}} + {{/responseModel}}{{^responseModel}} + {{/responseModel}} + {{/errorList}} public {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}void {{/returnType}} {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) throws ApiException { {{#requiredParamCount}} // verify required params are set diff --git a/src/main/scala/com/wordnik/swagger/codegen/Codegen.scala b/src/main/scala/com/wordnik/swagger/codegen/Codegen.scala index ac71ef78645..ec0d0116b8a 100644 --- a/src/main/scala/com/wordnik/swagger/codegen/Codegen.scala +++ b/src/main/scala/com/wordnik/swagger/codegen/Codegen.scala @@ -227,10 +227,12 @@ class Codegen(config: CodegenConfig) { var bodyParamRequired: Option[String] = Some("true") if (operation.responseMessages != null) { - operation.responseMessages.foreach(param => { + operation.responseMessages.foreach(param => { val params = new HashMap[String, AnyRef] params += "code" -> param.code.toString() params += "reason" -> param.message + if (!param.responseModel.isEmpty) + params += "responseModel" -> param.responseModel params += "hasMore" -> "true" errorList += params }) diff --git a/src/main/scala/com/wordnik/swagger/codegen/model/SwaggerModelSerializer.scala b/src/main/scala/com/wordnik/swagger/codegen/model/SwaggerModelSerializer.scala index 88c1d8f01e8..2e5bffd9f02 100644 --- a/src/main/scala/com/wordnik/swagger/codegen/model/SwaggerModelSerializer.scala +++ b/src/main/scala/com/wordnik/swagger/codegen/model/SwaggerModelSerializer.scala @@ -220,14 +220,28 @@ object SwaggerSerializers { class ResponseMessageSerializer extends CustomSerializer[ResponseMessage](implicit formats => ({ case json => + val responseClass = (json \ "responseModel") match { + case e: JObject => { + val inner = { + (e \ "items" \"type").extractOrElse({ + (e \ "items" \ "$ref").extract[String] + }) + } + Option("%s[%s]".format((e \ "type").extract[String], inner)) + } + case _ => (json \ "responseModel").extractOpt[String] + } + ResponseMessage( (json \ "code").extractOrElse(0), - (json \ "message").extractOrElse("") + (json \ "message").extractOrElse(""), + (json \ "responseModel").extractOpt[String] ) }, { case x: ResponseMessage => ("code" -> x.code) ~ - ("message" -> x.message) + ("message" -> x.message) ~ + ("responseModel" -> x.responseModel) } )) diff --git a/src/main/scala/com/wordnik/swagger/codegen/util/CoreUtils.scala b/src/main/scala/com/wordnik/swagger/codegen/util/CoreUtils.scala index cd93e44dc67..7a47d4b0a38 100644 --- a/src/main/scala/com/wordnik/swagger/codegen/util/CoreUtils.scala +++ b/src/main/scala/com/wordnik/swagger/codegen/util/CoreUtils.scala @@ -35,7 +35,7 @@ object CoreUtils { def extractModelNames(op: Operation): Set[String] = { // // POST, PUT, DELETE body - val modelNames = Set(op.responseClass) ++ op.parameters.filter(_.paramType == "body").map(_.dataType) + val modelNames = Set(op.responseClass) ++ op.parameters.filter(_.paramType == "body").map(_.dataType) ++ op.responseMessages.filter(!_.responseModel.isEmpty).map(_.responseModel.get) modelNames map extractBasePartFromType }