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 a83785d Context API refactoring.
a83785d is described below
commit a83785d972dac282d1a13d6aa65b1bbcbd82debe
Author: JamesBognar <[email protected]>
AuthorDate: Sun Aug 29 15:44:52 2021 -0400
Context API refactoring.
---
.../java/org/apache/juneau/rest/RestContext.java | 100 ++-------------------
.../org/apache/juneau/rest/RestContextBuilder.java | 71 +++++++++++++--
.../org/apache/juneau/rest/annotation/Rest.java | 3 +-
.../juneau/rest/annotation/RestAnnotation.java | 2 +-
.../juneau/rest/logging/BasicRestLogger.java | 3 +-
.../org/apache/juneau/rest/logging/RestLogger.java | 3 +-
.../juneau/rest/logging/RestLoggerRuleBuilder.java | 3 +-
7 files changed, 78 insertions(+), 107 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 f8e6685..8d2f9bc 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
@@ -150,91 +150,6 @@ public class RestContext extends BeanContext {
public static final String REST_beanStore = PREFIX + ".beanStore.o";
/**
- * Configuration property: REST call logger.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.rest.RestContext#REST_callLogger REST_callLogger}
- * <li><b>Name:</b> <js>"RestContext.callLogger.o"</js>
- * <li><b>Data type:</b>
- * <ul>
- * <li>{@link
org.apache.juneau.rest.logging.RestLogger}
- * <li><c>Class<{@link
org.apache.juneau.rest.logging.RestLogger}></c>
- * </ul>
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link
org.apache.juneau.rest.annotation.Rest#callLogger()}
- * </ul>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.rest.RestContextBuilder#callLogger(Class)}
- * <li class='jm'>{@link
org.apache.juneau.rest.RestContextBuilder#callLogger(RestLogger)}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * Specifies the logger to use for logging of HTTP requests and
responses.
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bcode w800'>
- * <jc>// Our customized logger.</jc>
- * <jk>public class</jk> MyLogger <jk>extends</jk> BasicRestLogger
{
- *
- * <ja>@Override</ja>
- * <jk>protected void</jk> log(Level
<jv>level</jv>, String <jv>msg</jv>, Throwable <jv>e</jv>) {
- * <jc>// Handle logging ourselves.</jc>
- * }
- * }
- *
- * <jc>// Option #1 - Registered via annotation resolving to a
config file setting with default value.</jc>
- * <ja>@Rest</ja>(callLogger=MyLogger.<jk>class</jk>)
- * <jk>public class</jk> MyResource {
- *
- * <jc>// Option #2 - Registered via builder passed in
through resource constructor.</jc>
- * <jk>public</jk> MyResource(RestContextBuilder
<jv>builder</jv>) <jk>throws</jk> Exception {
- *
- * <jc>// Using method on builder.</jc>
- *
<jv>builder</jv>.callLogger(MyLogger.<jk>class</jk>);
- *
- * <jc>// Same, but using property.</jc>
- *
<jv>builder</jv>.set(<jsf>REST_callLogger</jsf>, MyLogger.<jk>class</jk>);
- * }
- *
- * <jc>// Option #3 - Registered via builder passed in
through init method.</jc>
- * <ja>@RestHook</ja>(<jsf>INIT</jsf>)
- * <jk>public void</jk> init(RestContextBuilder
<jv>builder</jv>) <jk>throws</jk> Exception {
- *
<jv>builder</jv>.callLogger(MyLogger.<jk>class</jk>);
- * }
- * }
- * </p>
- *
- * <ul class='notes'>
- * <li>
- * The default call logger if not specified is {@link
BasicRestLogger} unless overwritten by {@link
RestContextBuilder#callLoggerDefault(RestLogger)}.
- * <li>
- * The resource class itself will be used if it implements
the {@link RestLogger} interface and not
- * explicitly overridden via this annotation.
- * <li>
- * When defined as a class, 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>
- *
- * <ul class='seealso'>
- * <li class='link'>{@doc RestLoggingAndDebugging}
- * </ul>
- */
- public static final String REST_callLogger = PREFIX + ".callLogger.o";
-
- /**
* Configuration property: Class-level response converters.
*
* <h5 class='section'>Property:</h5>
@@ -2274,7 +2189,7 @@ public class RestContext extends BeanContext {
* Instantiates based on the following logic:
* <ul>
* <li>Returns the resource class itself is an instance of
RestLogger.
- * <li>Looks for {@link #REST_callLogger} value set via any of the
following:
+ * <li>Looks for REST call logger set via any of the following:
* <ul>
* <li>{@link
RestContextBuilder#callLogger(Class)}/{@link
RestContextBuilder#callLogger(RestLogger)}
* <li>{@link Rest#callLogger()}.
@@ -2293,7 +2208,8 @@ public class RestContext extends BeanContext {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link #REST_callLogger}
+ * <li class='jm'>{@link RestContextBuilder#callLogger(Class)}
+ * <li class='jm'>{@link RestContextBuilder#callLogger(RestLogger)}
* </ul>
*
* @param resource
@@ -2316,13 +2232,11 @@ public class RestContext extends BeanContext {
RestLogger x = null;
- ContextProperties properties = builder.getContextProperties();
-
if (resource instanceof RestLogger)
x = (RestLogger)resource;
if (x == null)
- x = properties.getIfType(REST_callLogger,
RestLogger.class).orElse(null);
+ x = builder.callLogger;
if (x == null)
x = beanStore.getBean(RestLogger.class).orElse(null);
@@ -2368,8 +2282,7 @@ public class RestContext extends BeanContext {
*/
protected RestLoggerBuilder createCallLoggerBuilder(Object resource,
RestContextBuilder builder, BeanStore beanStore, Logger logger, ThrownStore
thrownStore) throws Exception {
- ContextProperties properties = builder.getContextProperties();
- Class<? extends RestLogger> c =
properties.getIfClass(REST_callLogger, RestLogger.class).orElse(null);
+ Class<? extends RestLogger> c = builder.callLoggerClass;
if (c == null)
c = builder.callLoggerDefaultClass;
@@ -4105,7 +4018,8 @@ public class RestContext extends BeanContext {
* Returns the call logger to use for this resource.
*
* <ul class='seealso'>
- * <li class='jf'>{@link #REST_callLogger}
+ * <li class='jm'>{@link RestContextBuilder#callLogger(Class)}
+ * <li class='jm'>{@link RestContextBuilder#callLogger(RestLogger)}
* </ul>
*
* @return
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 b267816..d8893db 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
@@ -135,6 +135,9 @@ public class RestContextBuilder extends BeanContextBuilder
implements ServletCon
RestLogger callLoggerDefault;
Class<? extends RestLogger> callLoggerDefaultClass;
+ RestLogger callLogger;
+ Class<? extends RestLogger> callLoggerClass;
+
@SuppressWarnings("unchecked")
ResponseProcessorList.Builder responseProcessors =
ResponseProcessorList.create().append(
ReaderProcessor.class,
@@ -697,14 +700,62 @@ public class RestContextBuilder extends
BeanContextBuilder implements ServletCon
}
/**
- * <i><l>RestContext</l> configuration property: </i> REST call
logger.
+ * REST call logger.
*
* <p>
* Specifies the logger to use for logging of HTTP requests and
responses.
*
+ * <h5 class='section'>Example:</h5>
+ * <p class='bcode w800'>
+ * <jc>// Our customized logger.</jc>
+ * <jk>public class</jk> MyLogger <jk>extends</jk> BasicRestLogger
{
+ *
+ * <ja>@Override</ja>
+ * <jk>protected void</jk> log(Level
<jv>level</jv>, String <jv>msg</jv>, Throwable <jv>e</jv>) {
+ * <jc>// Handle logging ourselves.</jc>
+ * }
+ * }
+ *
+ * <jc>// Option #1 - Registered via annotation resolving to a
config file setting with default value.</jc>
+ * <ja>@Rest</ja>(callLogger=MyLogger.<jk>class</jk>)
+ * <jk>public class</jk> MyResource {
+ *
+ * <jc>// Option #2 - Registered via builder passed in
through resource constructor.</jc>
+ * <jk>public</jk> MyResource(RestContextBuilder
<jv>builder</jv>) <jk>throws</jk> Exception {
+ *
+ * <jc>// Using method on builder.</jc>
+ *
<jv>builder</jv>.callLogger(MyLogger.<jk>class</jk>);
+ * }
+ *
+ * <jc>// Option #3 - Registered via builder passed in
through init method.</jc>
+ * <ja>@RestHook</ja>(<jsf>INIT</jsf>)
+ * <jk>public void</jk> init(RestContextBuilder
<jv>builder</jv>) <jk>throws</jk> Exception {
+ *
<jv>builder</jv>.callLogger(MyLogger.<jk>class</jk>);
+ * }
+ * }
+ * </p>
+ *
+ * <ul class='notes'>
+ * <li>
+ * The default call logger if not specified is {@link
BasicRestLogger} unless overwritten by {@link
RestContextBuilder#callLoggerDefault(RestLogger)}.
+ * <li>
+ * The resource class itself will be used if it implements
the {@link RestLogger} interface and not
+ * explicitly overridden via this annotation.
+ * <li>
+ * When defined as a class, 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>
+ *
* <ul class='seealso'>
* <li class='link'>{@doc RestLoggingAndDebugging}
- * <li class='jf'>{@link RestContext#REST_callLogger}
+ * <li class='ja'>{@link Rest#callLogger()}
* </ul>
*
* @param value
@@ -714,18 +765,19 @@ public class RestContextBuilder extends
BeanContextBuilder implements ServletCon
*/
@FluentSetter
public RestContextBuilder callLogger(Class<? extends RestLogger> value)
{
- return set(REST_callLogger, value);
+ callLoggerClass = value;
+ return this;
}
/**
- * <i><l>RestContext</l> configuration property: </i> REST call
logger.
+ * REST call logger.
*
* <p>
- * Specifies the logger to use for logging of HTTP requests and
responses.
+ * Same as {@link #callLogger(Class)} but specifies an
already-instantiated call logger.
*
* <ul class='seealso'>
* <li class='link'>{@doc RestLoggingAndDebugging}
- * <li class='jf'>{@link RestContext#REST_callLogger}
+ * <li class='ja'>{@link Rest#callLogger()}
* </ul>
*
* @param value
@@ -735,7 +787,8 @@ public class RestContextBuilder extends BeanContextBuilder
implements ServletCon
*/
@FluentSetter
public RestContextBuilder callLogger(RestLogger value) {
- return set(REST_callLogger, value);
+ callLogger = value;
+ return this;
}
/**
@@ -743,7 +796,7 @@ public class RestContextBuilder extends BeanContextBuilder
implements ServletCon
*
* <p>
* The default logger to use if one is not specified.
- *
+ *
* <p>
* This logger is inherited by child resources if not specified on
those resources.
*
@@ -766,7 +819,7 @@ public class RestContextBuilder extends BeanContextBuilder
implements ServletCon
*
* <p>
* This logger is inherited by child resources if not specified on
those resources.
- *
+ *
* @param value
* The new value for this setting.
* <br>The default is {@link BasicRestLogger}.
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 9de435a..70c2b0b 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
@@ -176,7 +176,8 @@ public @interface Rest {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_callLogger}
+ * <li class='jm'>{@link RestContextBuilder#callLogger(Class)}
+ * <li class='jm'>{@link RestContextBuilder#callLogger(RestLogger)}
* <li class='link'>{@doc RestLoggingAndDebugging}
* </ul>
*/
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 559649e..3f64b66 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
@@ -1064,7 +1064,7 @@ public class RestAnnotation {
value(a.path()).ifPresent(x -> b.path(x));
value(a.clientVersionHeader()).ifPresent(x ->
b.clientVersionHeader(x));
b.setIf(a.beanStore() != BeanStore.Null.class,
REST_beanStore, a.beanStore());
- b.setIf(a.callLogger() != RestLogger.Null.class,
REST_callLogger, a.callLogger());
+ value(a.callLogger()).ifPresent(x -> b.callLogger(x));
value(a.swaggerProvider()).ifPresent(x ->
b.swaggerProvider(x));
value(a.restOpContextClass()).ifPresent(x ->
b.restOpContextClass(x));
value(a.restChildrenClass()).ifPresent(x ->
b.restChildrenClass(x));
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/BasicRestLogger.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/BasicRestLogger.java
index 9509ad6..d4ed768 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/BasicRestLogger.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/BasicRestLogger.java
@@ -82,7 +82,8 @@ import org.apache.juneau.rest.util.*;
* </p>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_callLogger}
+ * <li class='jm'>{@link RestContextBuilder#callLogger(Class)}
+ * <li class='jm'>{@link RestContextBuilder#callLogger(RestLogger)}
* <li class='jm'>{@link RestContextBuilder#callLoggerDefault(Class)}
* <li class='jm'>{@link RestContextBuilder#callLoggerDefault(RestLogger)}
* <li class='jf'>{@link RestContext#REST_debug}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/RestLogger.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/RestLogger.java
index cf0d668..f3fb5d8 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/RestLogger.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/RestLogger.java
@@ -37,7 +37,8 @@ import org.apache.juneau.rest.annotation.*;
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_callLogger}
+ * <li class='jm'>{@link RestContextBuilder#callLogger(Class)}
+ * <li class='jm'>{@link RestContextBuilder#callLogger(RestLogger)}
* <li class='jm'>{@link RestContextBuilder#callLoggerDefault(Class)}
* <li class='jm'>{@link RestContextBuilder#callLoggerDefault(RestLogger)}
* <li class='jf'>{@link RestContext#REST_debug}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/RestLoggerRuleBuilder.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/RestLoggerRuleBuilder.java
index 8fb4b79..57e752c 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/RestLoggerRuleBuilder.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/RestLoggerRuleBuilder.java
@@ -27,7 +27,8 @@ import org.apache.juneau.rest.*;
* See the {@link BasicRestLogger} for usage.
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_callLogger}
+ * <li class='jm'>{@link RestContextBuilder#callLogger(Class)}
+ * <li class='jm'>{@link RestContextBuilder#callLogger(RestLogger)}
* <li class='link'>{@doc RestLoggingAndDebugging}
* </ul>
*/