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 57d11eb Context API refactoring.
57d11eb is described below
commit 57d11ebd612a2dc93dbb05c649a4eac2a25a838e
Author: JamesBognar <[email protected]>
AuthorDate: Sun Sep 19 18:28:49 2021 -0400
Context API refactoring.
---
.../java/org/apache/juneau/rest/RestOpContext.java | 38 +---------------
.../apache/juneau/rest/RestOpContextBuilder.java | 52 ++++++++++++++++++++--
2 files changed, 49 insertions(+), 41 deletions(-)
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
index afe723a..612cf85 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
@@ -151,6 +151,7 @@ public class RestOpContext extends Context implements
Comparable<RestOpContext>
parsers = bs.add(ParserGroup.class,
builder.getParsers().orElse(context.getParsers()));
partSerializer = bs.add(HttpPartSerializer.class,
builder.getPartSerializer().orElse(context.getPartSerializer()));
partParser = bs.add(HttpPartParser.class,
builder.getPartParser().orElse(context.getPartParser()));
+ jsonSchemaGenerator = bs.add(JsonSchemaGenerator.class,
builder.getJsonSchemaGenerator().orElse(context.getJsonSchemaGenerator()));
converters = bs.add(RestConverter[].class,
builder.converters().build().asArray());
guards = bs.add(RestGuard[].class,
builder.getGuards().asArray());
@@ -161,9 +162,6 @@ public class RestOpContext extends Context implements
Comparable<RestOpContext>
pathMatchers = bs.add(UrlPathMatcher[].class,
builder.getPathMatchers().asArray());
bs.addBean(UrlPathMatcher.class, pathMatchers.length >
0 ? pathMatchers[0] : null);
- jsonSchemaGenerator = createJsonSchemaGenerator(r,
builder, bs);
- bs.addBean(JsonSchemaGenerator.class,
jsonSchemaGenerator);
-
supportedAcceptTypes =
unmodifiableList(ofNullable(builder.produces).orElse(serializers.getSupportedMediaTypes()));
supportedContentTypes =
unmodifiableList(ofNullable(builder.consumes).orElse(parsers.getSupportedMediaTypes()));
@@ -213,40 +211,6 @@ public class RestOpContext extends Context implements
Comparable<RestOpContext>
}
/**
- * Instantiates the JSON-schema generator for this method.
- *
- * @param resource The REST resource object.
- * @param builder The builder for this object.
- * @param beanStore The bean store to use for retrieving and creating
beans.
- * @return The JSON-schema generator for this method.
- * @throws Exception If schema generator could not be instantiated.
- */
- protected JsonSchemaGenerator createJsonSchemaGenerator(Object
resource, RestOpContextBuilder builder, BeanStore beanStore) throws Exception {
-
- JsonSchemaGenerator x = null;
-
- if (resource instanceof JsonSchemaGenerator)
- x = (JsonSchemaGenerator)resource;
-
- if (x == null)
- x =
beanStore.getBean(JsonSchemaGenerator.class).orElse(null);
-
- if (x == null)
- x =
JsonSchemaGenerator.create().apply(builder.getApplied()).build();
-
- x = BeanStore
- .of(beanStore, resource)
- .addBean(JsonSchemaGenerator.class, x)
- .createMethodFinder(JsonSchemaGenerator.class, resource)
- .find("createJsonSchemaGenerator", Method.class)
- .thenFind("createJsonSchemaGenerator")
- .withDefault(x)
- .run();
-
- return x;
- }
-
- /**
* Instantiates the default request headers for this method.
*
* @param resource The REST resource object.
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContextBuilder.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContextBuilder.java
index b5d01b6..4d67c3d 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContextBuilder.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContextBuilder.java
@@ -32,6 +32,7 @@ import org.apache.juneau.http.remote.*;
import org.apache.juneau.http.response.*;
import org.apache.juneau.httppart.*;
import org.apache.juneau.internal.*;
+import org.apache.juneau.jsonschema.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.reflect.*;
import org.apache.juneau.rest.annotation.*;
@@ -66,6 +67,7 @@ public class RestOpContextBuilder extends ContextBuilder {
private HttpPartSerializer.Creator partSerializer;
private HttpPartParser.Creator partParser;
private RestMatcherList.Builder matchers;
+ private JsonSchemaGeneratorBuilder jsonSchemaGenerator;
PartList.Builder defaultFormData, defaultQueryData;
NamedAttributeList defaultRequestAttributes;
@@ -139,6 +141,8 @@ public class RestOpContextBuilder extends ContextBuilder {
partSerializer().apply(al);
if (context.builder.partParser().canApply(al))
partParser().apply(al);
+ if (context.builder.jsonSchemaGenerator().canApply(al))
+ jsonSchemaGenerator().apply(al);
} catch (Exception e) {
throw toHttpException(e, InternalServerError.class);
@@ -431,6 +435,46 @@ public class RestOpContextBuilder extends ContextBuilder {
}
//-----------------------------------------------------------------------------------------------------------------
+ // jsonSchemaGenerator
+
//-----------------------------------------------------------------------------------------------------------------
+
+ /**
+ * Returns the builder for the {@link JsonSchemaGenerator} object in
the REST context.
+ *
+ * @return The builder for the {@link JsonSchemaGenerator} object in
the REST context.
+ */
+ public final JsonSchemaGeneratorBuilder jsonSchemaGenerator() {
+ if (jsonSchemaGenerator == null)
+ jsonSchemaGenerator =
createJsonSchemaGenerator(beanStore(), parent, resource());
+ return jsonSchemaGenerator;
+ }
+
+ /**
+ * Constructs the JSON schema generator builder for this REST method.
+ *
+ * @param beanStore
+ * The factory used for creating beans and retrieving injected
beans.
+ * @param parent
+ * The builder for the REST resource class.
+ * @param resource
+ * The REST servlet/bean instance that this context is defined
against.
+ * @return The part serializer builder for this REST resource.
+ */
+ protected JsonSchemaGeneratorBuilder
createJsonSchemaGenerator(BeanStore beanStore, RestContextBuilder parent,
Supplier<?> resource) {
+
+ // Default value.
+ Value<JsonSchemaGeneratorBuilder> v = Value.of(
+ parent.jsonSchemaGenerator().copy()
+ );
+
+ return v.get();
+ }
+
+ final Optional<JsonSchemaGenerator> getJsonSchemaGenerator() {
+ return jsonSchemaGenerator == null ? empty() :
of(jsonSchemaGenerator.build());
+ }
+
+
//-----------------------------------------------------------------------------------------------------------------
// converters
//-----------------------------------------------------------------------------------------------------------------
@@ -852,6 +896,10 @@ public class RestOpContextBuilder extends ContextBuilder {
return this;
}
+
//----------------------------------------------------------------------------------------------------
+ // Properties
+
//----------------------------------------------------------------------------------------------------
+
/**
* Specifies a {@link BeanStore} to use when resolving constructor
arguments.
*
@@ -863,10 +911,6 @@ public class RestOpContextBuilder extends ContextBuilder {
return this;
}
-
//----------------------------------------------------------------------------------------------------
- // Properties
-
//----------------------------------------------------------------------------------------------------
-
/**
* Client version pattern matcher.
*