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 a76b82e REST refactoring.
a76b82e is described below
commit a76b82ef4f8c20c7e2cfb6e40b1f28343b6b2728
Author: JamesBognar <[email protected]>
AuthorDate: Mon Feb 1 10:07:46 2021 -0500
REST refactoring.
---
.../java/org/apache/juneau/rest/Swagger_Test.java | 4 --
.../rest/annotation/RestAnnotation_Test.java | 10 ++---
.../juneau/rest/annotation/Swagger_Body_Test.java | 1 -
...ggerProvider.java => BasicSwaggerProvider.java} | 36 ++++------------
...ssion.java => BasicSwaggerProviderSession.java} | 4 +-
.../java/org/apache/juneau/rest/RestContext.java | 13 ++++--
.../org/apache/juneau/rest/RestContextBuilder.java | 4 +-
.../org/apache/juneau/rest/SwaggerProvider.java | 48 +++-------------------
.../apache/juneau/rest/SwaggerProviderBuilder.java | 6 ++-
.../org/apache/juneau/rest/annotation/Rest.java | 21 +---------
.../juneau/rest/annotation/RestAnnotation.java | 2 +-
11 files changed, 39 insertions(+), 110 deletions(-)
diff --git
a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/Swagger_Test.java
b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/Swagger_Test.java
index 7e10cad..21f9bef 100644
---
a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/Swagger_Test.java
+++
b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/Swagger_Test.java
@@ -23,7 +23,6 @@ import java.util.*;
import org.apache.juneau.json.*;
import org.apache.juneau.jsonschema.annotation.*;
import org.apache.juneau.jsonschema.annotation.Tag;
-import org.apache.juneau.marshall.*;
import org.apache.juneau.xml.*;
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
@@ -1614,7 +1613,6 @@ public class Swagger_Test {
@Test
public void l02_query_example_swaggerOnClass() throws Exception {
- System.err.println(getSwagger(new L2()));
assertEquals("{id:2}", getSwagger(new
L2()).getPaths().get("/path/{foo}/query").get("get").getParameter("query",
"foo").getExample());
assertEquals("{id:2}", getSwaggerWithFile(new
L2()).getPaths().get("/path/{foo}/query").get("get").getParameter("query",
"foo").getExample());
}
@@ -2348,8 +2346,6 @@ public class Swagger_Test {
Operation o = s.getOperation("/", "get");
ParameterInfo pi = o.getParameter("body", null);
- SimpleJson.DEFAULT_READABLE.println(s);
-
assertEquals("{\n\tf1: 1,\n\tf2: 2\n}",
pi.getExamples().get("application/json+simple"));
ResponseInfo ri = o.getResponse("200");
assertEquals("{\n\tf1: 1,\n\tf2: 2\n}",
ri.getExamples().get("application/json+simple"));
diff --git
a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestAnnotation_Test.java
b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestAnnotation_Test.java
index 4aff0f9..3574d9d 100644
---
a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestAnnotation_Test.java
+++
b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/RestAnnotation_Test.java
@@ -82,7 +82,7 @@ public class RestAnnotation_Test {
.siteName("siteName")
.staticFiles(StaticFiles.class)
.swagger(SwaggerAnnotation.DEFAULT)
- .swaggerProvider(SwaggerProvider.class)
+ .swaggerProvider(BasicSwaggerProvider.class)
.title("title")
.uriAuthority("uriAuthority")
.uriContext("uriContext")
@@ -136,7 +136,7 @@ public class RestAnnotation_Test {
.siteName("siteName")
.staticFiles(StaticFiles.class)
.swagger(SwaggerAnnotation.DEFAULT)
- .swaggerProvider(SwaggerProvider.class)
+ .swaggerProvider(BasicSwaggerProvider.class)
.title("title")
.uriAuthority("uriAuthority")
.uriContext("uriContext")
@@ -193,7 +193,7 @@ public class RestAnnotation_Test {
+ "siteName:'siteName',"
+
"staticFiles:'org.apache.juneau.rest.StaticFiles',"
+
"swagger:{contact:{email:'',name:'',url:'',value:[]},description:[],externalDocs:{description:[],url:'',value:[]},license:{name:'',url:'',value:[]},tags:[],termsOfService:[],title:[],value:[],version:''},"
- +
"swaggerProvider:'org.apache.juneau.rest.SwaggerProvider',"
+ +
"swaggerProvider:'org.apache.juneau.rest.BasicSwaggerProvider',"
+ "title:['title'],"
+ "uriAuthority:'uriAuthority',"
+ "uriContext:'uriContext',"
@@ -292,7 +292,7 @@ public class RestAnnotation_Test {
siteName="siteName",
staticFiles=StaticFiles.class,
swagger=@Swagger,
- swaggerProvider=SwaggerProvider.class,
+ swaggerProvider=BasicSwaggerProvider.class,
title="title",
uriAuthority="uriAuthority",
uriContext="uriContext",
@@ -348,7 +348,7 @@ public class RestAnnotation_Test {
siteName="siteName",
staticFiles=StaticFiles.class,
swagger=@Swagger,
- swaggerProvider=SwaggerProvider.class,
+ swaggerProvider=BasicSwaggerProvider.class,
title="title",
uriAuthority="uriAuthority",
uriContext="uriContext",
diff --git
a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Body_Test.java
b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Body_Test.java
index 64e1d43..40825c1 100644
---
a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Body_Test.java
+++
b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Body_Test.java
@@ -83,7 +83,6 @@ public class Swagger_Body_Test {
@Test
public void a01_fromPojo() throws Exception {
org.apache.juneau.dto.swagger.Swagger s = getSwagger(A.class);
- System.err.println(s);
ParameterInfo x;
x = s.getParameterInfo("/a","get","body",null);
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProvider.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProvider.java
similarity index 78%
copy from
juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProvider.java
copy to
juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProvider.java
index 793deaf..9e410cd 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProvider.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProvider.java
@@ -22,32 +22,11 @@ import org.apache.juneau.rest.annotation.*;
import org.apache.juneau.svl.*;
/**
- * Interface for retrieving Swagger on a REST resource.
+ * Basic implementation of a {@link SwaggerProvider}.
+ *
+ * TODO
*/
-public class SwaggerProvider {
-
- /**
- * Represents no SwaggerProvider.
- *
- * <p>
- * Used on annotation to indicate that the value should be inherited
from the parent class, and
- * ultimately {@link SwaggerProvider} if not specified at any level.
- */
- public class Null extends SwaggerProvider {
- @SuppressWarnings("javadoc")
- public Null(SwaggerProviderBuilder builder) {
- super(builder);
- }
- }
-
- /**
- * Creator.
- *
- * @return A new builder for this object.
- */
- public static SwaggerProviderBuilder create() {
- return new SwaggerProviderBuilder();
- }
+public class BasicSwaggerProvider implements SwaggerProvider {
private final VarResolver vr;
private final JsonSchemaGenerator js;
@@ -59,7 +38,7 @@ public class SwaggerProvider {
*
* @param builder The builder containing the settings for this Swagger
provider.
*/
- public SwaggerProvider(SwaggerProviderBuilder builder) {
+ public BasicSwaggerProvider(SwaggerProviderBuilder builder) {
BeanFactory bf = builder.beanFactory;
this.vr = firstNonNull(builder.varResolver,
bf.getBean(VarResolver.class).orElse(VarResolver.DEFAULT));
this.js = firstNonNull(builder.jsonSchemaGenerator,
bf.getBean(JsonSchemaGenerator.class).orElse(JsonSchemaGenerator.DEFAULT));
@@ -68,7 +47,7 @@ public class SwaggerProvider {
}
/**
- * Returns the Swagger associated with the specified {@link
Rest}-annotated class.
+ * Returns the Swagger associated with the specified context of a
{@link Rest}-annotated class.
*
* <p>
* Subclasses can override this to provide their own method for
generating Swagger.
@@ -78,13 +57,14 @@ public class SwaggerProvider {
* @return A new {@link Swagger} object.
* @throws Exception If an error occurred producing the Swagger.
*/
+ @Override /* SwaggerProvider */
public Swagger getSwagger(RestContext context, Locale locale) throws
Exception {
Class<?> c = context.getResourceClass();
FileFinder ff = fileFinder != null ? fileFinder :
FileFinder.create().cp(c,null,false).build();
Messages mb = messages != null ? messages.forLocale(locale) :
Messages.create(c).build().forLocale(locale);
VarResolverSession vrs =
vr.createSession().bean(Messages.class, mb);
- SwaggerProviderSession session = new
SwaggerProviderSession(context, locale, ff, messages, vrs, js.createSession());
+ BasicSwaggerProviderSession session = new
BasicSwaggerProviderSession(context, locale, ff, messages, vrs,
js.createSession());
return session.getSwagger();
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProviderSession.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProviderSession.java
similarity index 99%
rename from
juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProviderSession.java
rename to
juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProviderSession.java
index 438722d..8262337 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProviderSession.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProviderSession.java
@@ -45,7 +45,7 @@ import org.apache.juneau.svl.*;
/**
* A single session of generating a Swagger document.
*/
-public class SwaggerProviderSession {
+public class BasicSwaggerProviderSession {
private final RestContext context;
private final Class<?> c;
@@ -68,7 +68,7 @@ public class SwaggerProviderSession {
* @param vr The variable resolver to use for resolving variables in
the swagger.
* @param js The JSON-schema generator to use for stuff like examples.
*/
- public SwaggerProviderSession(RestContext context, Locale locale,
FileFinder ff, Messages messages, VarResolverSession vr,
JsonSchemaGeneratorSession js) {
+ public BasicSwaggerProviderSession(RestContext context, Locale locale,
FileFinder ff, Messages messages, VarResolverSession vr,
JsonSchemaGeneratorSession js) {
this.context = context;
this.c = context.getResourceClass();
this.rci = ClassInfo.of(c);
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index d84375b..47d70d2 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -3009,7 +3009,7 @@ public class RestContext extends BeanContext {
* <li><b>ID:</b> {@link
org.apache.juneau.rest.RestContext#REST_swaggerProvider REST_swaggerProvider}
* <li><b>Name:</b> <js>"RestContext.swaggerProvider.o"</js>
* <li><b>Data type:</b> {@link
org.apache.juneau.rest.SwaggerProvider}
- * <li><b>Default:</b> {@link
org.apache.juneau.rest.SwaggerProvider}
+ * <li><b>Default:</b> {@link
org.apache.juneau.rest.BasicSwaggerProvider}
* <li><b>Session property:</b> <jk>false</jk>
* <li><b>Annotations:</b>
* <ul>
@@ -4506,7 +4506,7 @@ public class RestContext extends BeanContext {
* <li>Any {@doc RestInjection injected beans}.
* </ul>
* <li>Resolves it via the bean factory registered in this context.
- * <li>Instantiates a default {@link SwaggerProvider}.
+ * <li>Instantiates a default {@link BasicSwaggerProvider}.
* </ul>
*
* <ul class='seealso'>
@@ -4519,7 +4519,14 @@ public class RestContext extends BeanContext {
* @throws Exception If info provider could not be instantiated.
*/
protected SwaggerProvider createSwaggerProvider(Object resource,
BeanFactory beanFactory) throws Exception {
- SwaggerProvider x =
beanFactory.getBean(SwaggerProvider.class).orElse(null);
+
+ SwaggerProvider x = null;
+
+ if (resource instanceof SwaggerProvider)
+ x = (SwaggerProvider)resource;
+
+ if (x == null)
+ x =
beanFactory.getBean(SwaggerProvider.class).orElse(null);
Object o = getProperty(REST_swaggerProvider);
if (o instanceof SwaggerProvider)
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
index 5266c57..8f72c68 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
@@ -2050,7 +2050,7 @@ public class RestContextBuilder extends
BeanContextBuilder implements ServletCon
*
* @param value
* The new value for this setting.
- * <br>The default is {@link SwaggerProvider}.
+ * <br>The default is {@link BasicSwaggerProvider}.
* @return This object (for method chaining).
*/
@FluentSetter
@@ -2070,7 +2070,7 @@ public class RestContextBuilder extends
BeanContextBuilder implements ServletCon
*
* @param value
* The new value for this setting.
- * <br>The default is {@link SwaggerProvider}.
+ * <br>The default is {@link BasicSwaggerProvider}.
* @return This object (for method chaining).
*/
@FluentSetter
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProvider.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProvider.java
index 793deaf..51140b9 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProvider.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProvider.java
@@ -12,33 +12,24 @@
//
***************************************************************************************************************************
package org.apache.juneau.rest;
-import static org.apache.juneau.internal.ObjectUtils.*;
import java.util.*;
-import org.apache.juneau.cp.*;
import org.apache.juneau.dto.swagger.Swagger;
-import org.apache.juneau.jsonschema.*;
import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.svl.*;
/**
* Interface for retrieving Swagger on a REST resource.
*/
-public class SwaggerProvider {
+public interface SwaggerProvider {
/**
* Represents no SwaggerProvider.
*
* <p>
* Used on annotation to indicate that the value should be inherited
from the parent class, and
- * ultimately {@link SwaggerProvider} if not specified at any level.
+ * ultimately {@link BasicSwaggerProvider} if not specified at any
level.
*/
- public class Null extends SwaggerProvider {
- @SuppressWarnings("javadoc")
- public Null(SwaggerProviderBuilder builder) {
- super(builder);
- }
- }
+ public abstract class Null implements SwaggerProvider {};
/**
* Creator.
@@ -49,43 +40,14 @@ public class SwaggerProvider {
return new SwaggerProviderBuilder();
}
- private final VarResolver vr;
- private final JsonSchemaGenerator js;
- private final Messages messages;
- private final FileFinder fileFinder;
-
- /**
- * Constructor.
- *
- * @param builder The builder containing the settings for this Swagger
provider.
- */
- public SwaggerProvider(SwaggerProviderBuilder builder) {
- BeanFactory bf = builder.beanFactory;
- this.vr = firstNonNull(builder.varResolver,
bf.getBean(VarResolver.class).orElse(VarResolver.DEFAULT));
- this.js = firstNonNull(builder.jsonSchemaGenerator,
bf.getBean(JsonSchemaGenerator.class).orElse(JsonSchemaGenerator.DEFAULT));
- this.messages = builder.messages;
- this.fileFinder = builder.fileFinder;
- }
-
/**
* Returns the Swagger associated with the specified {@link
Rest}-annotated class.
*
- * <p>
- * Subclasses can override this to provide their own method for
generating Swagger.
- *
* @param context The context of the {@link Rest}-annotated class.
* @param locale The request locale.
- * @return A new {@link Swagger} object.
+ * @return A new {@link Swagger} DTO object.
* @throws Exception If an error occurred producing the Swagger.
*/
- public Swagger getSwagger(RestContext context, Locale locale) throws
Exception {
+ public Swagger getSwagger(RestContext context, Locale locale) throws
Exception;
- Class<?> c = context.getResourceClass();
- FileFinder ff = fileFinder != null ? fileFinder :
FileFinder.create().cp(c,null,false).build();
- Messages mb = messages != null ? messages.forLocale(locale) :
Messages.create(c).build().forLocale(locale);
- VarResolverSession vrs =
vr.createSession().bean(Messages.class, mb);
- SwaggerProviderSession session = new
SwaggerProviderSession(context, locale, ff, messages, vrs, js.createSession());
-
- return session.getSwagger();
- }
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProviderBuilder.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProviderBuilder.java
index f8d89f6..7c48002 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProviderBuilder.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProviderBuilder.java
@@ -35,12 +35,16 @@ public class SwaggerProviderBuilder {
/**
* Creates a new {@link SwaggerProvider} object from this builder.
+ *
+ * <p>
+ * Instantiates an instance of the {@link #implClass(Class)
implementation class} or
+ * else {@link BasicSwaggerProvider} if implementation class was not
specified.
*
* @return A new {@link SwaggerProvider} object.
*/
public SwaggerProvider build() {
try {
- Class<? extends SwaggerProvider> ic = implClass == null
? SwaggerProvider.class : implClass;
+ Class<? extends SwaggerProvider> ic = (implClass ==
null || implClass == SwaggerProvider.class) ? BasicSwaggerProvider.class :
implClass;
return
BeanFactory.of(beanFactory).addBean(SwaggerProviderBuilder.class,
this).createBean(ic);
} catch (Exception e) {
throw toHttpException(e, InternalServerError.class);
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
index b942c4a..bc33d22 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
@@ -1138,26 +1138,7 @@ public @interface Rest {
/**
* Configuration property: Swagger provider.
*
- * <p>
- * Class used to retrieve swagger information about a resource.
- *
- * <ul class='notes'>
- * <li>
- * The default info provider if not specified is {@link
SwaggerProvider}.
- * <li>
- * The resource class itself will be used if it implements
the {@link SwaggerProvider} interface and not
- * explicitly overridden via this annotation.
- * <li>
- * The implementation must have one of the following
constructors:
- * <ul>
- * <li><code><jk>public</jk> T(RestContext)</code>
- * <li><code><jk>public</jk> T()</code>
- * <li><code><jk>public static</jk> T
<jsm>create</jsm>(RestContext)</code>
- * <li><code><jk>public static</jk> T
<jsm>create</jsm>()</code>
- * </ul>
- * <li>
- * Inner classes of the REST resource class are allowed.
- * </ul>
+ * TODO
*
* <ul class='seealso'>
* <li class='jf'>{@link RestContext#REST_swaggerProvider}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
index 475248a..89944c4 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
@@ -93,7 +93,7 @@ public class RestAnnotation {
Class<? extends RestContext> contextClass =
RestContext.Null.class;
Class<? extends RestConverter>[] converters = new Class[0];
Class<? extends RestGuard>[] guards = new Class[0];
- Class<? extends SwaggerProvider>
swaggerProvider=SwaggerProvider.Null.class;
+ Class<? extends SwaggerProvider> swaggerProvider =
SwaggerProvider.Null.class;
Class<? extends RestOperationParam>[] restOperationParams = new
Class[0];
Class<? extends BeanFactory> beanFactory =
BeanFactory.Null.class;
Class<? extends RestOperationContext> restOperationContextClass
= RestOperationContext.Null.class;