This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch jbFixRestNpe
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/jbFixRestNpe by this push:
new a3095b623 Rest bean refactoring.
a3095b623 is described below
commit a3095b62319c40b2b482569bbf6dc8973ced0883
Author: JamesBognar <[email protected]>
AuthorDate: Sun Jul 10 13:00:06 2022 -0400
Rest bean refactoring.
---
.../java/org/apache/juneau/rest/RestContext.java | 116 +++++----------------
.../juneau/rest/swagger/BasicSwaggerProvider.java | 16 +++
2 files changed, 44 insertions(+), 88 deletions(-)
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 3cf0a94d8..0e6fdc2ad 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
@@ -243,7 +243,7 @@ public class RestContext extends Context {
private MethodList startCallMethods, endCallMethods,
postInitMethods, postInitChildFirstMethods, destroyMethods, preCallMethods,
postCallMethods;
private RestOperations.Builder restOperations;
private RestChildren.Builder restChildren;
- private SwaggerProvider.Builder swaggerProvider;
+ private BeanCreator<SwaggerProvider> swaggerProvider;
private BeanContext.Builder beanContext;
private EncoderSet.Builder encoders;
private SerializerSet.Builder serializers;
@@ -4069,31 +4069,31 @@ public class RestContext extends Context {
*
* @return The swagger provider sub-builder.
*/
- public SwaggerProvider.Builder swaggerProvider() {
+ public BeanCreator<SwaggerProvider> swaggerProvider() {
if (swaggerProvider == null)
- swaggerProvider =
createSwaggerProvider(beanStore(), resource());
+ swaggerProvider = createSwaggerProvider();
return swaggerProvider;
}
/**
- * Applies an operation to the swagger provider sub-builder.
- *
- * <p>
- * Typically used to allow you to execute operations without
breaking the fluent flow of the context builder.
+ * Specifies the call logger class to use for this REST context.
*
- * <h5 class='section'>Example:</h5>
- * <p class='bjava'>
- * RestContext <jv>context</jv> = RestContext
- * .<jsm>create</jsm>(<jv>resourceClass</jv>,
<jv>parentContext</jv>, <jv>servletConfig</jv>)
- * .swaggerProvider(<jv>x</jv> ->
<jv>x</jv>.fileFinder(<jv>aDifferentFileFinder</jv>))
- * .build();
- * </p>
+ * @param value The new value for this setting.
+ * @return This object.
+ */
+ public Builder swaggerProvider(Class<? extends SwaggerProvider>
value) {
+ swaggerProvider().type(value);
+ return this;
+ }
+
+ /**
+ * Specifies the call logger class to use for this REST context.
*
- * @param operation The operation to apply.
+ * @param value The new value for this setting.
* @return This object.
*/
- public Builder
swaggerProvider(Consumer<SwaggerProvider.Builder> operation) {
- operation.accept(swaggerProvider());
+ public Builder swaggerProvider(SwaggerProvider value) {
+ swaggerProvider().impl(value);
return this;
}
@@ -4125,48 +4125,28 @@ public class RestContext extends Context {
* <li class='jm'>{@link
RestContext.Builder#swaggerProvider(SwaggerProvider)}
* </ul>
*
- * @param beanStore
- * The factory used for creating beans and retrieving
injected beans.
- * @param resource
- * The REST servlet/bean instance that this context is
defined against.
* @return A new swagger provider sub-builder.
*/
- protected SwaggerProvider.Builder
createSwaggerProvider(BeanStore beanStore, Supplier<?> resource) {
+ protected BeanCreator<SwaggerProvider> createSwaggerProvider() {
- // Default value.
- Value<SwaggerProvider.Builder> v = Value.of(
- SwaggerProvider
- .create(beanStore)
-
.varResolver(()->beanStore.getBean(VarResolver.class).orElseThrow(()->new
RuntimeException("VarResolver bean not found.")))
-
.fileFinder(()->beanStore.getBean(FileFinder.class).orElseThrow(()->new
RuntimeException("FileFinder bean not found.")))
-
.messages(()->beanStore.getBean(Messages.class).orElseThrow(()->new
RuntimeException("Messages bean not found.")))
-
.jsonSchemaGenerator(()->beanStore.getBean(JsonSchemaGenerator.class).orElseThrow(()->new
RuntimeException("JsonSchemaGenerator bean not found.")))
- );
+ BeanCreator<SwaggerProvider> creator =
beanStore.createBean(SwaggerProvider.class).type(BasicSwaggerProvider.class);
+
+ // Specify the bean type if its set as a default.
+ defaultClasses()
+ .get(SwaggerProvider.class)
+ .ifPresent(x -> creator.type(x));
- // Replace with builder from bean store.
rootBeanStore
.getBean(SwaggerProvider.class)
- .ifPresent(x -> v.get().impl(x));
-
- // Replace with this bean.
- resourceAs(SwaggerProvider.class)
- .ifPresent(x -> v.get().impl(x));
-
- // Replace with builder from: public [static]
SwaggerProvider.Builder createSwaggerProvider(<args>)
- beanStore
-
.createMethodFinder(SwaggerProvider.Builder.class)
- .addBean(SwaggerProvider.Builder.class, v.get())
- .find("createSwaggerProvider")
- .run(x -> v.set(x));
+ .ifPresent(x -> creator.impl(x));
// Replace with bean from: public [static]
SwaggerProvider createSwaggerProvider(<args>)
beanStore
.createMethodFinder(SwaggerProvider.class)
- .addBean(SwaggerProvider.Builder.class, v.get())
.find("createSwaggerProvider")
- .run(x -> v.get().impl(x));
+ .run(x -> creator.impl(x));
- return v.get();
+ return creator;
}
//-----------------------------------------------------------------------------------------------------------------
@@ -5493,46 +5473,6 @@ public class RestContext extends Context {
return optional(consumes);
}
- /**
- * Swagger provider.
- *
- * <p>
- * Class used to retrieve swagger information about a resource.
- *
- * <p>
- * This setting is inherited from the parent context if not
specified.
- * <br>The default is {@link BasicSwaggerProvider}.
- *
- * <ul class='seealso'>
- * <li class='ja'>{@link Rest#swaggerProvider}
- * </ul>
- *
- * @param value
- * The new value for this setting.
- * @return This object.
- */
- @FluentSetter
- public Builder swaggerProvider(Class<? extends SwaggerProvider>
value) {
- swaggerProvider().type(value);
- return this;
- }
-
- /**
- * Swagger provider.
- *
- * <p>
- * Same as {@link #swaggerProvider(Class)} except input is a
pre-constructed instance.
- *
- * @param value
- * The new value for this setting.
- * @return This object.
- */
- @FluentSetter
- public Builder swaggerProvider(SwaggerProvider value) {
- swaggerProvider().impl(value);
- return this;
- }
-
// <FluentSetters>
@Override /* GENERATED - org.apache.juneau.Context.Builder */
@@ -5796,7 +5736,7 @@ public class RestContext extends Context {
postCallMethods = builder.postCallMethods();
restOperations = builder.restOperations(this).build();
restChildren = builder.restChildren(this).build();
- swaggerProvider = builder.swaggerProvider().build();
+ swaggerProvider = bs.add(SwaggerProvider.class,
builder.swaggerProvider().orElse(null));
List<RestOpContext> opContexts =
restOperations.getOpContexts();
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProvider.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProvider.java
index 2e90ab2ad..898d9f2eb 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProvider.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProvider.java
@@ -37,6 +37,22 @@ public class BasicSwaggerProvider implements SwaggerProvider
{
private final FileFinder fileFinder;
private final BeanStore beanStore;
+ /**
+ * Constructor.
+ *
+ * @param beanStore The bean store containing injectable beans for this
logger.
+ */
+ public BasicSwaggerProvider(BeanStore beanStore) {
+ this(
+ SwaggerProvider
+ .create(beanStore)
+
.varResolver(()->beanStore.getBean(VarResolver.class).get())
+
.fileFinder(()->beanStore.getBean(FileFinder.class).get())
+
.messages(()->beanStore.getBean(Messages.class).get())
+
.jsonSchemaGenerator(()->beanStore.getBean(JsonSchemaGenerator.class).get())
+ );
+ }
+
/**
* Constructor.
*