juneau-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jamesbog...@apache.org
Subject [juneau] branch master updated: Swagger UI improvements.
Date Sun, 25 Mar 2018 16:03:08 GMT
This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 2170b08  Swagger UI improvements.
2170b08 is described below

commit 2170b08f677f5e1bbc1a52c6c50718868037a02f
Author: JamesBognar <jamesbognar@apache.org>
AuthorDate: Sun Mar 25 12:02:58 2018 -0400

    Swagger UI improvements.
---
 .../urlencoding/CommonParser_UrlEncodingTest.java  |    2 +-
 .../urlencoding/UrlEncodingSerializerTest.java     |    4 +-
 .../apache/juneau/dto/swagger/ui/SwaggerUI.java    |    1 +
 .../org/apache/juneau/dto/swagger/ui/SwaggerUI.css |    6 +
 .../juneau/serializer/SerializerSession.java       |    9 +
 .../urlencoding/UrlEncodingSerializerSession.java  |    5 +-
 .../juneau/examples/rest/petstore/Category.java    |    7 +
 .../apache/juneau/examples/rest/petstore/Pet.java  |   11 +-
 .../examples/rest/petstore/PetStoreResource.java   |    1 +
 .../apache/juneau/examples/rest/petstore/Tag.java  |    7 +
 .../rest/petstore/PetStoreResource_orig.json       | 1048 ++++++++++++++++++++
 .../apache/juneau/rest/BasicRestInfoProvider.java  |   10 +-
 12 files changed, 1101 insertions(+), 10 deletions(-)

diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java
b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java
index b68fb4a..12556a4 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java
@@ -72,7 +72,7 @@ public class CommonParser_UrlEncodingTest {
 		tl.add(new A3("name1","value1"));
 		b.list = tl;
 
-		in = UrlEncodingSerializer.create().addBeanTypeProperties(true).build().serialize(b);
+		in = UrlEncodingSerializer.create().addBeanTypeProperties(true).addRootType().build().serialize(b);
 		b = (A1)p.parse(in, Object.class);
 		assertEquals("value1", b.list.get(1).value);
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingSerializerTest.java
b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingSerializerTest.java
index dd0fc81..dd6407c 100755
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingSerializerTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingSerializerTest.java
@@ -24,8 +24,8 @@ import org.junit.*;
 
 public class UrlEncodingSerializerTest {
 
-	static UrlEncodingSerializer s = UrlEncodingSerializer.DEFAULT;
-	static UrlEncodingSerializer sr = UrlEncodingSerializer.DEFAULT_READABLE;
+	static UrlEncodingSerializer s = UrlEncodingSerializer.DEFAULT.builder().addRootType().build();
+	static UrlEncodingSerializer sr = UrlEncodingSerializer.DEFAULT_READABLE.builder().addRootType().build();
 
 
 	//====================================================================================================
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
index aeb965b..d720eea 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
@@ -124,6 +124,7 @@ public class SwaggerUI extends PojoSwap<Swagger,Div> {
 				
 				Td parameterKey = td(
 					div(piName)._class("name" + (required ? " required" : "")),
+					required ? div("required")._class("requiredlabel") : null,
 					div(pi.getType())._class("type"),
 					div('(' + pi.getIn() + ')')._class("in")
 				)._class("parameter-key");
diff --git a/juneau-core/juneau-dto/src/main/resources/org/apache/juneau/dto/swagger/ui/SwaggerUI.css
b/juneau-core/juneau-dto/src/main/resources/org/apache/juneau/dto/swagger/ui/SwaggerUI.css
index 9984f06..315fd34 100644
--- a/juneau-core/juneau-dto/src/main/resources/org/apache/juneau/dto/swagger/ui/SwaggerUI.css
+++ b/juneau-core/juneau-dto/src/main/resources/org/apache/juneau/dto/swagger/ui/SwaggerUI.css
@@ -193,6 +193,12 @@ td.parameter-value, td.response-value {
     font-weight: bold;
 }
 
+.parameter-key .requiredlabel {
+	font-size: 10px;
+    color: rgba(255,0,0,.6);    
+    font-weight: bold;
+}
+
 .parameter-key .type {
     font-size: 12px;
     padding: 5px 0;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
index e45eeb0..f3da967 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
@@ -345,6 +345,15 @@ public abstract class SerializerSession extends BeanSession {
 	}
 
 	/**
+	 * Returns the {@link Serializer#SERIALIZER_addRootType} setting value for this session.
+	 * 
+	 * @return The {@link Serializer#SERIALIZER_addRootType} setting value for this session.
+	 */
+	protected boolean isAddRootType() {
+		return addRootType;
+	}
+
+	/**
 	 * Returns the {@link Serializer#SERIALIZER_trimNullProperties} setting value for this session.
 	 * 
 	 * @return The {@link Serializer#SERIALIZER_trimNullProperties} setting value for this session.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
index 39b95a3..023b88b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
@@ -103,13 +103,14 @@ public class UrlEncodingSerializerSession extends UonSerializerSession
{
 		ClassMeta<?> aType;			// The actual type
 		ClassMeta<?> sType;			// The serialized type
 
-		aType = push("root", o, object());
+		ClassMeta<?> eType = getExpectedRootType(o);
+		aType = push("root", o, eType);
 		indent--;
 		if (aType == null)
 			aType = object();
 
 		sType = aType;
-		String typeName = getBeanTypeName(object(), aType, null);
+		String typeName = getBeanTypeName(eType, aType, null);
 
 		// Swap if necessary
 		PojoSwap swap = aType.getPojoSwap(this);
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/Category.java
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/Category.java
index 16184d0..4041d6b 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/Category.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/Category.java
@@ -36,4 +36,11 @@ public class Category {
 		this.name = name;
 		return this;
 	}
+	
+	@Example
+	public static Category example() {
+		return new Category()
+			.id(123)
+			.name("Dog");
+	}
 }
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/Pet.java
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/Pet.java
index f6b2381..a6331e0 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/Pet.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/Pet.java
@@ -32,7 +32,11 @@ public class Pet {
 	@Example
 	public static Pet example() {
 		return new Pet()
-			.id(123);
+			.id(123)
+			.category(Category.example())
+			.name("Doggie")
+			.tags(Tag.example())
+			.status(PetStatus.AVAILABLE);
 	}
 
 	public long getId() {
@@ -82,6 +86,11 @@ public class Pet {
 		return this;
 	}
 	
+	public Pet tags(Tag...tags) {
+		this.tags = Arrays.asList(tags);
+		return this;
+	}
+
 	public PetStatus getStatus() {
 		return status;
 	}
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/PetStoreResource.java
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/PetStoreResource.java
index d10c265..de07c4f 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/PetStoreResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/PetStoreResource.java
@@ -51,6 +51,7 @@ public class PetStoreResource extends BasicRestServletJena {
 	@RestMethod(
 		name="POST", 
 		path="/pet",
+		summary="Add a new pet to the store",
 		swagger={
 			"tags:['pet'],",
 			"parameters:[",
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/Tag.java
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/Tag.java
index fdd9dfc..8c580b1 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/Tag.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/Tag.java
@@ -36,4 +36,11 @@ public class Tag {
 		this.name = name;
 		return this;
 	}
+	
+	@Example
+	public static Tag example() {
+		return new Tag()
+			.id(123)
+			.name("MyTag");
+	}
 }
diff --git a/juneau-examples/juneau-examples-rest/src/main/resources/org/apache/juneau/examples/rest/petstore/PetStoreResource_orig.json
b/juneau-examples/juneau-examples-rest/src/main/resources/org/apache/juneau/examples/rest/petstore/PetStoreResource_orig.json
new file mode 100644
index 0000000..2b290a6
--- /dev/null
+++ b/juneau-examples/juneau-examples-rest/src/main/resources/org/apache/juneau/examples/rest/petstore/PetStoreResource_orig.json
@@ -0,0 +1,1048 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.
 The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file
except in compliance            *
+// * with the License.  You may obtain a copy of the License at                         
                                    *
+// *                                                                                    
                                    *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                        
                                    *
+// *                                                                                    
                                    *
+// * Unless required by applicable law or agreed to in writing, software distributed under
the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the        *
+// * specific language governing permissions and limitations under the License.         
                                    *
+// ***************************************************************************************************************************
+
+{
+	"swagger": "2.0",
+	"info": {
+		"description": "This is a sample server Petstore server.  You can find out more about Swagger
at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).
 For this sample, you can use the api key `special-key` to test the authorization filters.",
+		"version": "1.0.0",
+		"title": "Swagger Petstore",
+		"termsOfService": "http://swagger.io/terms/",
+		"contact": {
+			"email": "apiteam@swagger.io"
+		},
+		"license": {
+			"name": "Apache 2.0",
+			"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
+		}
+	},
+	"host": "petstore.swagger.io",
+	"basePath": "/v2",
+	"tags": [
+		{
+			"name": "pet",
+			"description": "Everything about your Pets",
+			"externalDocs": {
+				"description": "Find out more",
+				"url": "http://swagger.io"
+			}
+		},
+		{
+			"name": "store",
+			"description": "Access to Petstore orders"
+		},
+		{
+			"name": "user",
+			"description": "Operations about user",
+			"externalDocs": {
+				"description": "Find out more about our store",
+				"url": "http://swagger.io"
+			}
+		}
+	],
+	"schemes": [
+		"http"
+	],
+	"paths": {
+		"/pet": {
+			"post": {
+				"tags": [
+					"pet"
+				],
+				"summary": "Add a new pet to the store",
+				"description": "",
+				"operationId": "addPet",
+				"consumes": [
+					"application/json",
+					"application/xml"
+				],
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [
+					{
+						"in": "body",
+						"name": "body",
+						"description": "Pet object that needs to be added to the store",
+						"required": true,
+						"schema": {
+							"$ref": "#/definitions/Pet"
+						}
+					}
+				],
+				"responses": {
+					"405": {
+						"description": "Invalid input"
+					}
+				},
+				"security": [
+					{
+						"petstore_auth": [
+							"write:pets",
+							"read:pets"
+						]
+					}
+				]
+			},
+			"put": {
+				"tags": [
+					"pet"
+				],
+				"summary": "Update an existing pet",
+				"description": "",
+				"operationId": "updatePet",
+				"consumes": [
+					"application/json",
+					"application/xml"
+				],
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [
+					{
+						"in": "body",
+						"name": "body",
+						"description": "Pet object that needs to be added to the store",
+						"required": true,
+						"schema": {
+							"$ref": "#/definitions/Pet"
+						}
+					}
+				],
+				"responses": {
+					"400": {
+						"description": "Invalid ID supplied"
+					},
+					"404": {
+						"description": "Pet not found"
+					},
+					"405": {
+						"description": "Validation exception"
+					}
+				},
+				"security": [
+					{
+						"petstore_auth": [
+							"write:pets",
+							"read:pets"
+						]
+					}
+				]
+			}
+		},
+		"/pet/findByStatus": {
+			"get": {
+				"tags": [
+					"pet"
+				],
+				"summary": "Finds Pets by status",
+				"description": "Multiple status values can be provided with comma separated strings",
+				"operationId": "findPetsByStatus",
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [
+					{
+						"name": "status",
+						"in": "query",
+						"description": "Status values that need to be considered for filter",
+						"required": true,
+						"type": "array",
+						"items": {
+							"type": "string",
+							"enum": [
+								"available",
+								"pending",
+								"sold"
+							],
+							"default": "available"
+						},
+						"collectionFormat": "multi"
+					}
+				],
+				"responses": {
+					"200": {
+						"description": "successful operation",
+						"schema": {
+							"type": "array",
+							"items": {
+								"$ref": "#/definitions/Pet"
+							}
+						}
+					},
+					"400": {
+						"description": "Invalid status value"
+					}
+				},
+				"security": [
+					{
+						"petstore_auth": [
+							"write:pets",
+							"read:pets"
+						]
+					}
+				]
+			}
+		},
+		"/pet/findByTags": {
+			"get": {
+				"tags": [
+					"pet"
+				],
+				"summary": "Finds Pets by tags",
+				"description": "Muliple tags can be provided with comma separated strings. Use tag1,
tag2, tag3 for testing.",
+				"operationId": "findPetsByTags",
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [
+					{
+						"name": "tags",
+						"in": "query",
+						"description": "Tags to filter by",
+						"required": true,
+						"type": "array",
+						"items": {
+							"type": "string"
+						},
+						"collectionFormat": "multi"
+					}
+				],
+				"responses": {
+					"200": {
+						"description": "successful operation",
+						"schema": {
+							"type": "array",
+							"items": {
+								"$ref": "#/definitions/Pet"
+							}
+						}
+					},
+					"400": {
+						"description": "Invalid tag value"
+					}
+				},
+				"security": [
+					{
+						"petstore_auth": [
+							"write:pets",
+							"read:pets"
+						]
+					}
+				],
+				"deprecated": true
+			}
+		},
+		"/pet/{petId}": {
+			"get": {
+				"tags": [
+					"pet"
+				],
+				"summary": "Find pet by ID",
+				"description": "Returns a single pet",
+				"operationId": "getPetById",
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [
+					{
+						"name": "petId",
+						"in": "path",
+						"description": "ID of pet to return",
+						"required": true,
+						"type": "integer",
+						"format": "int64"
+					}
+				],
+				"responses": {
+					"200": {
+						"description": "successful operation",
+						"schema": {
+							"$ref": "#/definitions/Pet"
+						}
+					},
+					"400": {
+						"description": "Invalid ID supplied"
+					},
+					"404": {
+						"description": "Pet not found"
+					}
+				},
+				"security": [
+					{
+						"api_key": []
+					}
+				]
+			},
+			"post": {
+				"tags": [
+					"pet"
+				],
+				"summary": "Updates a pet in the store with form data",
+				"description": "",
+				"operationId": "updatePetWithForm",
+				"consumes": [
+					"application/x-www-form-urlencoded"
+				],
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [
+					{
+						"name": "petId",
+						"in": "path",
+						"description": "ID of pet that needs to be updated",
+						"required": true,
+						"type": "integer",
+						"format": "int64"
+					},
+					{
+						"name": "name",
+						"in": "formData",
+						"description": "Updated name of the pet",
+						"required": false,
+						"type": "string"
+					},
+					{
+						"name": "status",
+						"in": "formData",
+						"description": "Updated status of the pet",
+						"required": false,
+						"type": "string"
+					}
+				],
+				"responses": {
+					"405": {
+						"description": "Invalid input"
+					}
+				},
+				"security": [
+					{
+						"petstore_auth": [
+							"write:pets",
+							"read:pets"
+						]
+					}
+				]
+			},
+			"delete": {
+				"tags": [
+					"pet"
+				],
+				"summary": "Deletes a pet",
+				"description": "",
+				"operationId": "deletePet",
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [
+					{
+						"name": "api_key",
+						"in": "header",
+						"required": false,
+						"type": "string"
+					},
+					{
+						"name": "petId",
+						"in": "path",
+						"description": "Pet id to delete",
+						"required": true,
+						"type": "integer",
+						"format": "int64"
+					}
+				],
+				"responses": {
+					"400": {
+						"description": "Invalid ID supplied"
+					},
+					"404": {
+						"description": "Pet not found"
+					}
+				},
+				"security": [
+					{
+						"petstore_auth": [
+							"write:pets",
+							"read:pets"
+						]
+					}
+				]
+			}
+		},
+		"/pet/{petId}/uploadImage": {
+			"post": {
+				"tags": [
+					"pet"
+				],
+				"summary": "uploads an image",
+				"description": "",
+				"operationId": "uploadFile",
+				"consumes": [
+					"multipart/form-data"
+				],
+				"produces": [
+					"application/json"
+				],
+				"parameters": [
+					{
+						"name": "petId",
+						"in": "path",
+						"description": "ID of pet to update",
+						"required": true,
+						"type": "integer",
+						"format": "int64"
+					},
+					{
+						"name": "additionalMetadata",
+						"in": "formData",
+						"description": "Additional data to pass to server",
+						"required": false,
+						"type": "string"
+					},
+					{
+						"name": "file",
+						"in": "formData",
+						"description": "file to upload",
+						"required": false,
+						"type": "file"
+					}
+				],
+				"responses": {
+					"200": {
+						"description": "successful operation",
+						"schema": {
+							"$ref": "#/definitions/ApiResponse"
+						}
+					}
+				},
+				"security": [
+					{
+						"petstore_auth": [
+							"write:pets",
+							"read:pets"
+						]
+					}
+				]
+			}
+		},
+		"/store/inventory": {
+			"get": {
+				"tags": [
+					"store"
+				],
+				"summary": "Returns pet inventories by status",
+				"description": "Returns a map of status codes to quantities",
+				"operationId": "getInventory",
+				"produces": [
+					"application/json"
+				],
+				"parameters": [],
+				"responses": {
+					"200": {
+						"description": "successful operation",
+						"schema": {
+							"type": "object",
+							"additionalProperties": {
+								"type": "integer",
+								"format": "int32"
+							}
+						}
+					}
+				},
+				"security": [
+					{
+						"api_key": []
+					}
+				]
+			}
+		},
+		"/store/order": {
+			"post": {
+				"tags": [
+					"store"
+				],
+				"summary": "Place an order for a pet",
+				"description": "",
+				"operationId": "placeOrder",
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [
+					{
+						"in": "body",
+						"name": "body",
+						"description": "order placed for purchasing the pet",
+						"required": true,
+						"schema": {
+							"$ref": "#/definitions/Order"
+						}
+					}
+				],
+				"responses": {
+					"200": {
+						"description": "successful operation",
+						"schema": {
+							"$ref": "#/definitions/Order"
+						}
+					},
+					"400": {
+						"description": "Invalid Order"
+					}
+				}
+			}
+		},
+		"/store/order/{orderId}": {
+			"get": {
+				"tags": [
+					"store"
+				],
+				"summary": "Find purchase order by ID",
+				"description": "For valid response try integer IDs with value >= 1 and <= 10. Other
values will generated exceptions",
+				"operationId": "getOrderById",
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [
+					{
+						"name": "orderId",
+						"in": "path",
+						"description": "ID of pet that needs to be fetched",
+						"required": true,
+						"type": "integer",
+						"maximum": 10.0,
+						"minimum": 1.0,
+						"format": "int64"
+					}
+				],
+				"responses": {
+					"200": {
+						"description": "successful operation",
+						"schema": {
+							"$ref": "#/definitions/Order"
+						}
+					},
+					"400": {
+						"description": "Invalid ID supplied"
+					},
+					"404": {
+						"description": "Order not found"
+					}
+				}
+			},
+			"delete": {
+				"tags": [
+					"store"
+				],
+				"summary": "Delete purchase order by ID",
+				"description": "For valid response try integer IDs with positive integer value. Negative
or non-integer values will generate API errors",
+				"operationId": "deleteOrder",
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [
+					{
+						"name": "orderId",
+						"in": "path",
+						"description": "ID of the order that needs to be deleted",
+						"required": true,
+						"type": "integer",
+						"minimum": 1.0,
+						"format": "int64"
+					}
+				],
+				"responses": {
+					"400": {
+						"description": "Invalid ID supplied"
+					},
+					"404": {
+						"description": "Order not found"
+					}
+				}
+			}
+		},
+		"/user": {
+			"post": {
+				"tags": [
+					"user"
+				],
+				"summary": "Create user",
+				"description": "This can only be done by the logged in user.",
+				"operationId": "createUser",
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [
+					{
+						"in": "body",
+						"name": "body",
+						"description": "Created user object",
+						"required": true,
+						"schema": {
+							"$ref": "#/definitions/User"
+						}
+					}
+				],
+				"responses": {
+					"default": {
+						"description": "successful operation"
+					}
+				}
+			}
+		},
+		"/user/createWithArray": {
+			"post": {
+				"tags": [
+					"user"
+				],
+				"summary": "Creates list of users with given input array",
+				"description": "",
+				"operationId": "createUsersWithArrayInput",
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [
+					{
+						"in": "body",
+						"name": "body",
+						"description": "List of user object",
+						"required": true,
+						"schema": {
+							"type": "array",
+							"items": {
+								"$ref": "#/definitions/User"
+							}
+						}
+					}
+				],
+				"responses": {
+					"default": {
+						"description": "successful operation"
+					}
+				}
+			}
+		},
+		"/user/createWithList": {
+			"post": {
+				"tags": [
+					"user"
+				],
+				"summary": "Creates list of users with given input array",
+				"description": "",
+				"operationId": "createUsersWithListInput",
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [
+					{
+						"in": "body",
+						"name": "body",
+						"description": "List of user object",
+						"required": true,
+						"schema": {
+							"type": "array",
+							"items": {
+								"$ref": "#/definitions/User"
+							}
+						}
+					}
+				],
+				"responses": {
+					"default": {
+						"description": "successful operation"
+					}
+				}
+			}
+		},
+		"/user/login": {
+			"get": {
+				"tags": [
+					"user"
+				],
+				"summary": "Logs user into the system",
+				"description": "",
+				"operationId": "loginUser",
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [
+					{
+						"name": "username",
+						"in": "query",
+						"description": "The user name for login",
+						"required": true,
+						"type": "string"
+					},
+					{
+						"name": "password",
+						"in": "query",
+						"description": "The password for login in clear text",
+						"required": true,
+						"type": "string"
+					}
+				],
+				"responses": {
+					"200": {
+						"description": "successful operation",
+						"schema": {
+							"type": "string"
+						},
+						"headers": {
+							"X-Rate-Limit": {
+								"type": "integer",
+								"format": "int32",
+								"description": "calls per hour allowed by the user"
+							},
+							"X-Expires-After": {
+								"type": "string",
+								"format": "date-time",
+								"description": "date in UTC when token expires"
+							}
+						}
+					},
+					"400": {
+						"description": "Invalid username/password supplied"
+					}
+				}
+			}
+		},
+		"/user/logout": {
+			"get": {
+				"tags": [
+					"user"
+				],
+				"summary": "Logs out current logged in user session",
+				"description": "",
+				"operationId": "logoutUser",
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [],
+				"responses": {
+					"default": {
+						"description": "successful operation"
+					}
+				}
+			}
+		},
+		"/user/{username}": {
+			"get": {
+				"tags": [
+					"user"
+				],
+				"summary": "Get user by user name",
+				"description": "",
+				"operationId": "getUserByName",
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [
+					{
+						"name": "username",
+						"in": "path",
+						"description": "The name that needs to be fetched. Use user1 for testing. ",
+						"required": true,
+						"type": "string"
+					}
+				],
+				"responses": {
+					"200": {
+						"description": "successful operation",
+						"schema": {
+							"$ref": "#/definitions/User"
+						}
+					},
+					"400": {
+						"description": "Invalid username supplied"
+					},
+					"404": {
+						"description": "User not found"
+					}
+				}
+			},
+			"put": {
+				"tags": [
+					"user"
+				],
+				"summary": "Updated user",
+				"description": "This can only be done by the logged in user.",
+				"operationId": "updateUser",
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [
+					{
+						"name": "username",
+						"in": "path",
+						"description": "name that need to be updated",
+						"required": true,
+						"type": "string"
+					},
+					{
+						"in": "body",
+						"name": "body",
+						"description": "Updated user object",
+						"required": true,
+						"schema": {
+							"$ref": "#/definitions/User"
+						}
+					}
+				],
+				"responses": {
+					"400": {
+						"description": "Invalid user supplied"
+					},
+					"404": {
+						"description": "User not found"
+					}
+				}
+			},
+			"delete": {
+				"tags": [
+					"user"
+				],
+				"summary": "Delete user",
+				"description": "This can only be done by the logged in user.",
+				"operationId": "deleteUser",
+				"produces": [
+					"application/xml",
+					"application/json"
+				],
+				"parameters": [
+					{
+						"name": "username",
+						"in": "path",
+						"description": "The name that needs to be deleted",
+						"required": true,
+						"type": "string"
+					}
+				],
+				"responses": {
+					"400": {
+						"description": "Invalid username supplied"
+					},
+					"404": {
+						"description": "User not found"
+					}
+				}
+			}
+		}
+	},
+	"securityDefinitions": {
+		"petstore_auth": {
+			"type": "oauth2",
+			"authorizationUrl": "http://petstore.swagger.io/oauth/dialog",
+			"flow": "implicit",
+			"scopes": {
+				"write:pets": "modify pets in your account",
+				"read:pets": "read your pets"
+			}
+		},
+		"api_key": {
+			"type": "apiKey",
+			"name": "api_key",
+			"in": "header"
+		}
+	},
+	"definitions": {
+		"Order": {
+			"type": "object",
+			"properties": {
+				"id": {
+					"type": "integer",
+					"format": "int64"
+				},
+				"petId": {
+					"type": "integer",
+					"format": "int64"
+				},
+				"quantity": {
+					"type": "integer",
+					"format": "int32"
+				},
+				"shipDate": {
+					"type": "string",
+					"format": "date-time"
+				},
+				"status": {
+					"type": "string",
+					"description": "Order Status",
+					"enum": [
+						"placed",
+						"approved",
+						"delivered"
+					]
+				},
+				"complete": {
+					"type": "boolean",
+					"default": false
+				}
+			},
+			"xml": {
+				"name": "Order"
+			}
+		},
+		"User": {
+			"type": "object",
+			"properties": {
+				"id": {
+					"type": "integer",
+					"format": "int64"
+				},
+				"username": {
+					"type": "string"
+				},
+				"firstName": {
+					"type": "string"
+				},
+				"lastName": {
+					"type": "string"
+				},
+				"email": {
+					"type": "string"
+				},
+				"password": {
+					"type": "string"
+				},
+				"phone": {
+					"type": "string"
+				},
+				"userStatus": {
+					"type": "integer",
+					"format": "int32",
+					"description": "User Status"
+				}
+			},
+			"xml": {
+				"name": "User"
+			}
+		},
+		"Category": {
+			"type": "object",
+			"properties": {
+				"id": {
+					"type": "integer",
+					"format": "int64"
+				},
+				"name": {
+					"type": "string"
+				}
+			},
+			"xml": {
+				"name": "Category"
+			}
+		},
+		"Tag": {
+			"type": "object",
+			"properties": {
+				"id": {
+					"type": "integer",
+					"format": "int64"
+				},
+				"name": {
+					"type": "string"
+				}
+			},
+			"xml": {
+				"name": "Tag"
+			}
+		},
+		"Pet": {
+			"type": "object",
+			"required": [
+				"name",
+				"photoUrls"
+			],
+			"properties": {
+				"id": {
+					"type": "integer",
+					"format": "int64"
+				},
+				"category": {
+					"$ref": "#/definitions/Category"
+				},
+				"name": {
+					"type": "string",
+					"example": "doggie"
+				},
+				"photoUrls": {
+					"type": "array",
+					"xml": {
+						"name": "photoUrl",
+						"wrapped": true
+					},
+					"items": {
+						"type": "string"
+					}
+				},
+				"tags": {
+					"type": "array",
+					"xml": {
+						"name": "tag",
+						"wrapped": true
+					},
+					"items": {
+						"$ref": "#/definitions/Tag"
+					}
+				},
+				"status": {
+					"type": "string",
+					"description": "pet status in the store",
+					"enum": [
+						"available",
+						"pending",
+						"sold"
+					]
+				}
+			},
+			"xml": {
+				"name": "Pet"
+			}
+		},
+		"ApiResponse": {
+			"type": "object",
+			"properties": {
+				"code": {
+					"type": "integer",
+					"format": "int32"
+				},
+				"type": {
+					"type": "string"
+				},
+				"message": {
+					"type": "string"
+				}
+			}
+		}
+	},
+	"externalDocs": {
+		"description": "Find out more about Swagger",
+		"url": "http://swagger.io"
+	}
+}
\ No newline at end of file
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
index 67da8eb..c729a8f 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
@@ -251,6 +251,12 @@ public class BasicRestInfoProvider implements RestInfoProvider {
 
 			op.putIfNotExists("operationId", mn);
 			
+			s = rm.summary();
+			if (s.isEmpty())
+				s = mb.findFirstString(locale, mn + ".summary");
+			if (s != null)
+				op.put("summary", vr.resolve(s));
+
 			s = rm.description();
 			if (s.isEmpty())
 				s = mb.findFirstString(locale, mn + ".description");
@@ -277,10 +283,6 @@ public class BasicRestInfoProvider implements RestInfoProvider {
 			
 			op.put("tags", tags);
 			
-			s = mb.findFirstString(locale, mn + ".summary");
-			if (s != null)
-				op.put("summary", vr.resolve(s));
-
 			s = mb.findFirstString(locale, mn + ".externalDocs");
 			if (s != null) {
 				ObjectMap eom = jp.parse(vr.resolve(s), ObjectMap.class);

-- 
To stop receiving notification emails like this one, please contact
jamesbognar@apache.org.

Mime
View raw message