You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2019/03/16 14:26:11 UTC

[juneau] branch master updated: Add OPTIONS page to BasicRestConfig.

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 7e58556  Add OPTIONS page to BasicRestConfig.
7e58556 is described below

commit 7e58556ff8dbad09b4d1c5bc0c96b9bebbd224df
Author: JamesBognar <ja...@apache.org>
AuthorDate: Sat Mar 16 10:25:39 2019 -0400

    Add OPTIONS page to BasicRestConfig.
---
 .../org/apache/juneau/internal/ClassUtils.java     | 17 +++---
 .../juneau/examples/rest/HelloWorldResource.java   |  6 +++
 .../java/org/apache/juneau/rest/BasicRest.java     | 48 +----------------
 .../org/apache/juneau/rest/BasicRestConfig.java    | 62 +++++++++++++++++++++-
 .../org/apache/juneau/rest/BasicRestServlet.java   | 48 +----------------
 5 files changed, 75 insertions(+), 106 deletions(-)

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils.java
index 43a8369..dbda0b7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils.java
@@ -1359,21 +1359,18 @@ public final class ClassUtils {
 	 * 	Methods are ordered from child-to-parent order.
 	 */
 	public static List<Method> findMatchingMethods(Method m) {
-		return findMatchingMethods(new ArrayList<Method>(), m);
+		return findMatchingMethods(new ArrayList<Method>(), m, m.getDeclaringClass());
 	}
 
-	private static List<Method> findMatchingMethods(List<Method> l, Method m) {
-		l.add(m);
-		Class<?> c = m.getDeclaringClass();
+	private static List<Method> findMatchingMethods(List<Method> l, Method m, Class<?> c) {
+		for (Method m2 : c.getDeclaredMethods())
+			if (isSameMethod(m, m2))
+				l.add(m2);
 		Class<?> pc = c.getSuperclass();
 		if (pc != null)
-			for (Method m2 : pc.getDeclaredMethods())
-				if (isSameMethod(m, m2))
-					findMatchingMethods(l, m2);
+			findMatchingMethods(l, m, pc);
 		for (Class<?> ic : c.getInterfaces())
-			for (Method m2 : ic.getDeclaredMethods())
-				if (isSameMethod(m, m2))
-					findMatchingMethods(l, m2);
+			findMatchingMethods(l, m, ic);
 		return l;
 	}
 
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java
index 6be4b23..fc424b1 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java
@@ -14,6 +14,7 @@ package org.apache.juneau.examples.rest;
 
 import static org.apache.juneau.http.HttpMethodName.*;
 
+import org.apache.juneau.dto.swagger.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 
@@ -45,4 +46,9 @@ public class HelloWorldResource implements BasicRestConfig {
 	public String sayHello() {
 		return "Hello world!";
 	}
+
+	@Override
+	public Swagger getOptions(RestRequest req) {
+		return req.getSwagger();
+	}
 }
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRest.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRest.java
index 18130b4..7b28d07 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRest.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRest.java
@@ -12,13 +12,9 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest;
 
-import static org.apache.juneau.http.HttpMethodName.*;
-import static org.apache.juneau.jsonschema.JsonSchemaGenerator.*;
-
 import javax.servlet.http.*;
 
 import org.apache.juneau.dto.swagger.*;
-import org.apache.juneau.dto.swagger.ui.*;
 import org.apache.juneau.rest.annotation.*;
 
 /**
@@ -51,49 +47,7 @@ public abstract class BasicRest implements BasicRestConfig {
 	 * @param req The HTTP request.
 	 * @return A bean containing the contents for the OPTIONS page.
 	 */
-	@RestMethod(name=OPTIONS, path="/*",
-
-		summary="Swagger documentation",
-		description="Swagger documentation for this resource.",
-
-		htmldoc=@HtmlDoc(
-			// Override the nav links for the swagger page.
-			navlinks={
-				"back: servlet:/",
-				"json: servlet:/?method=OPTIONS&Accept=text/json&plainText=true"
-			},
-			// Never show aside contents of page inherited from class.
-			aside="NONE"
-		),
-
-		// POJO swaps to apply to all serializers/parsers on this method.
-		pojoSwaps={
-			// Use the SwaggerUI swap when rendering Swagger beans.
-			// This is a per-media-type swap that only applies to text/html requests.
-			SwaggerUI.class
-		},
-
-		// Properties to apply to all serializers/parsers and REST-specific API objects on this method.
-		properties={
-			// Add descriptions to the following types when not specified:
-			@Property(name=JSONSCHEMA_addDescriptionsTo, value="bean,collection,array,map,enum"),
-
-			// Add x-example to the following types:
-			@Property(name=JSONSCHEMA_addExamplesTo, value="bean,collection,array,map"),
-
-			// Don't generate schema information on the Swagger bean itself or HTML beans.
-			@Property(name=JSONSCHEMA_ignoreTypes, value="Swagger,org.apache.juneau.dto.html5.*")
-		},
-
-		// Shortcut for boolean properties.
-		flags={
-			// Use $ref references for bean definitions to reduce duplication in Swagger.
-			JSONSCHEMA_useBeanDefs,
-
-			// When parsing generated beans, ignore unknown properties that may only exist as getters and not setters.
-			BEAN_ignoreUnknownBeanProperties
-		}
-	)
+	@Override /* BasicRestConfig */
 	public Swagger getOptions(RestRequest req) {
 		// Localized Swagger for this resource is available through the RestRequest object.
 		return req.getSwagger();
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestConfig.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestConfig.java
index 45863cd..934db0b 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestConfig.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestConfig.java
@@ -12,8 +12,13 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest;
 
+import static org.apache.juneau.BeanContext.*;
+import static org.apache.juneau.http.HttpMethodName.*;
+import static org.apache.juneau.jsonschema.JsonSchemaGenerator.*;
 import static org.apache.juneau.serializer.Serializer.*;
 
+import org.apache.juneau.dto.swagger.*;
+import org.apache.juneau.dto.swagger.ui.*;
 import org.apache.juneau.html.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.msgpack.*;
@@ -84,7 +89,8 @@ import org.apache.juneau.xmlschema.XmlSchemaDocSerializer;
 
 		// Basic page navigation links.
 		navlinks={
-			"up: request:/.."
+			"up: request:/..",
+			"options: servlet:/?method=OPTIONS"
 		},
 
 		// Default stylesheet to use for the page.
@@ -112,4 +118,56 @@ import org.apache.juneau.xmlschema.XmlSchemaDocSerializer;
 	// By default, we define static files through the external configuration file.
 	staticFiles="$C{REST/staticFiles,htdocs:htdocs}"
 )
-public interface BasicRestConfig {}
+public interface BasicRestConfig {
+
+	/**
+	 * [OPTIONS /*] - Show resource options.
+	 *
+	 * @param req The HTTP request.
+	 * @return A bean containing the contents for the OPTIONS page.
+	 */
+	@RestMethod(name=OPTIONS, path="/*",
+
+		summary="Swagger documentation",
+		description="Swagger documentation for this resource.",
+
+		htmldoc=@HtmlDoc(
+			// Override the nav links for the swagger page.
+			navlinks={
+				"back: servlet:/",
+				"json: servlet:/?method=OPTIONS&Accept=text/json&plainText=true"
+			},
+			// Never show aside contents of page inherited from class.
+			aside="NONE"
+		),
+
+		// POJO swaps to apply to all serializers/parsers on this method.
+		pojoSwaps={
+			// Use the SwaggerUI swap when rendering Swagger beans.
+			// This is a per-media-type swap that only applies to text/html requests.
+			SwaggerUI.class
+		},
+
+		// Properties to apply to all serializers/parsers and REST-specific API objects on this method.
+		properties={
+			// Add descriptions to the following types when not specified:
+			@Property(name=JSONSCHEMA_addDescriptionsTo, value="bean,collection,array,map,enum"),
+
+			// Add x-example to the following types:
+			@Property(name=JSONSCHEMA_addExamplesTo, value="bean,collection,array,map"),
+
+			// Don't generate schema information on the Swagger bean itself or HTML beans.
+			@Property(name=JSONSCHEMA_ignoreTypes, value="Swagger,org.apache.juneau.dto.html5.*")
+		},
+
+		// Shortcut for boolean properties.
+		flags={
+			// Use $ref references for bean definitions to reduce duplication in Swagger.
+			JSONSCHEMA_useBeanDefs,
+
+			// When parsing generated beans, ignore unknown properties that may only exist as getters and not setters.
+			BEAN_ignoreUnknownBeanProperties
+		}
+	)
+	public Swagger getOptions(RestRequest req);
+}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestServlet.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestServlet.java
index d997d0b..fe3298d 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestServlet.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestServlet.java
@@ -12,11 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest;
 
-import static org.apache.juneau.http.HttpMethodName.*;
-import static org.apache.juneau.jsonschema.JsonSchemaGenerator.*;
-
 import org.apache.juneau.dto.swagger.*;
-import org.apache.juneau.dto.swagger.ui.*;
 import org.apache.juneau.html.*;
 import org.apache.juneau.jso.*;
 import org.apache.juneau.json.*;
@@ -185,49 +181,7 @@ public abstract class BasicRestServlet extends RestServlet implements BasicRestC
 	 * @param req The HTTP request.
 	 * @return A bean containing the contents for the OPTIONS page.
 	 */
-	@RestMethod(name=OPTIONS, path="/*",
-
-		summary="Swagger documentation",
-		description="Swagger documentation for this resource.",
-
-		htmldoc=@HtmlDoc(
-			// Override the nav links for the swagger page.
-			navlinks={
-				"back: servlet:/",
-				"json: servlet:/?method=OPTIONS&Accept=text/json&plainText=true"
-			},
-			// Never show aside contents of page inherited from class.
-			aside="NONE"
-		),
-
-		// POJO swaps to apply to all serializers/parsers on this method.
-		pojoSwaps={
-			// Use the SwaggerUI swap when rendering Swagger beans.
-			// This is a per-media-type swap that only applies to text/html requests.
-			SwaggerUI.class
-		},
-
-		// Properties to apply to all serializers/parsers and REST-specific API objects on this method.
-		properties={
-			// Add descriptions to the following types when not specified:
-			@Property(name=JSONSCHEMA_addDescriptionsTo, value="bean,collection,array,map,enum"),
-
-			// Add x-example to the following types:
-			@Property(name=JSONSCHEMA_addExamplesTo, value="bean,collection,array,map"),
-
-			// Don't generate schema information on the Swagger bean itself or HTML beans.
-			@Property(name=JSONSCHEMA_ignoreTypes, value="Swagger,org.apache.juneau.dto.html5.*")
-		},
-
-		// Shortcut for boolean properties.
-		flags={
-			// Use $ref references for bean definitions to reduce duplication in Swagger.
-			JSONSCHEMA_useBeanDefs,
-
-			// When parsing generated beans, ignore unknown properties that may only exist as getters and not setters.
-			BEAN_ignoreUnknownBeanProperties
-		}
-	)
+	@Override /* BasicRestConfig */
 	public Swagger getOptions(RestRequest req) {
 		// Localized Swagger for this resource is available through the RestRequest object.
 		return req.getSwagger();