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 1f25ee5 Context API refactoring.
1f25ee5 is described below
commit 1f25ee5295e0e06806a43ca4c74c4b9b1f17d507
Author: JamesBognar <[email protected]>
AuthorDate: Sun Aug 29 10:44:08 2021 -0400
Context API refactoring.
---
.../36.RestBuiltInParameters.html | 2 +-
.../java/org/apache/juneau/rest/RestContext.java | 75 ++-------------------
.../org/apache/juneau/rest/RestContextBuilder.java | 78 ++++++++++++++++------
.../org/apache/juneau/rest/annotation/Rest.java | 6 +-
.../juneau/rest/annotation/RestAnnotation.java | 18 ++---
.../rest/annotation/RestAnnotation_Test.java | 10 +--
.../rest/annotation/Rest_AllowBodyParam_Test.java | 10 +--
7 files changed, 85 insertions(+), 114 deletions(-)
diff --git
a/juneau-doc/docs/Topics/06.juneau-rest-server/36.RestBuiltInParameters.html
b/juneau-doc/docs/Topics/06.juneau-rest-server/36.RestBuiltInParameters.html
index dc2a2df..b8157cd 100644
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/36.RestBuiltInParameters.html
+++ b/juneau-doc/docs/Topics/06.juneau-rest-server/36.RestBuiltInParameters.html
@@ -63,7 +63,7 @@
<td class='code'>&body=X</td>
<td>
Pass in the HTTP body content on PUT and POST methods
as a UON-encoded GET parameter.
- <br>Can be disabled via {@link
oajr.annotation.Rest#disableAllowBodyParam() @Rest(disableAllowBodyParam)}
setting.
+ <br>Can be disabled via {@link
oajr.annotation.Rest#disableBodyParam() @Rest(disableBodyParam)} setting.
</td>
</tr>
<tr>
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 3e9df51..131df45 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
@@ -815,71 +815,6 @@ public class RestContext extends BeanContext {
public static final String REST_defaultResponseHeaders = PREFIX +
".defaultResponseHeaders.lo";
/**
- * Configuration property: Disable allow body URL parameter.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.rest.RestContext#REST_disableAllowBodyParam
REST_disableAllowBodyParam}
- * <li><b>Name:</b> <js>"RestContext.disableAllowBodyParam.b"</js>
- * <li><b>Data type:</b> <jk>boolean</jk>
- * <li><b>System property:</b>
<c>RestContext.disableAllowBodyParam</c>
- * <li><b>Environment variable:</b>
<c>RESTCONTEXT_DISABLEALLOWBODYPARAM</c>
- * <li><b>Default:</b> <jk>false</jk>
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link
org.apache.juneau.rest.annotation.Rest#disableAllowBodyParam()}
- * </ul>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.rest.RestContextBuilder#disableAllowBodyParam()}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * When enabled, the HTTP body content on PUT and POST requests can be
passed in as text using the <js>"body"</js>
- * URL parameter.
- * <br>
- * For example:
- * <p class='bcode w800'>
- * ?body=(name='John%20Smith',age=45)
- * </p>
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bcode w800'>
- * <jc>// Option #1 - Defined via annotation resolving to a config
file setting with default value.</jc>
- *
<ja>@Rest</ja>(disableAllowBodyParam=<js>"$C{REST/disableAllowBodyParam,true}"</js>)
- * <jk>public class</jk> MyResource {
- *
- * <jc>// Option #2 - Defined 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>.disableAllowBodyParam();
- *
- * <jc>// Same, but using property.</jc>
- *
<jv>builder</jv>.set(<jsf>REST_disableAllowBodyParam</jsf>);
- * }
- *
- * <jc>// Option #3 - Defined 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>.disableAllowBodyParam();
- * }
- * }
- * </p>
- *
- * <ul class='notes'>
- * <li>
- * <js>'body'</js> parameter name is case-insensitive.
- * <li>
- * Useful for debugging PUT and POST methods using only a
browser.
- * </ul>
- */
- public static final String REST_disableAllowBodyParam = PREFIX +
".disableAllowBodyParam.b";
-
- /**
* Configuration property: Compression encoders.
*
* <h5 class='section'>Property:</h5>
@@ -2357,10 +2292,10 @@ public class RestContext extends BeanContext {
uriResolution = builder.uriResolution;
uriRelativity = builder.uriRelativity;
- allowBodyParam = !
cp.getBoolean(REST_disableAllowBodyParam).orElse(false);
- allowedHeaderParams =
newCaseInsensitiveSet(Optional.of(builder.allowedHeaderParams).map(x ->
"NONE".equals(x) ? "" : x).orElse(""));
- allowedMethodParams =
newCaseInsensitiveSet(Optional.of(builder.allowedMethodParams).map(x ->
"NONE".equals(x) ? "" : x).orElse(""));
- allowedMethodHeaders =
newCaseInsensitiveSet(Optional.of(builder.allowedMethodHeaders).map(x ->
"NONE".equals(x) ? "" : x).orElse(""));
+ allowBodyParam = ! builder.disableBodyParam;
+ allowedHeaderParams =
newCaseInsensitiveSet(ofNullable(builder.allowedHeaderParams).map(x ->
"NONE".equals(x) ? "" : x).orElse(""));
+ allowedMethodParams =
newCaseInsensitiveSet(ofNullable(builder.allowedMethodParams).map(x ->
"NONE".equals(x) ? "" : x).orElse(""));
+ allowedMethodHeaders =
newCaseInsensitiveSet(ofNullable(builder.allowedMethodHeaders).map(x ->
"NONE".equals(x) ? "" : x).orElse(""));
renderResponseStackTraces =
cp.getBoolean(REST_renderResponseStackTraces).orElse(false);
clientVersionHeader = builder.clientVersionHeader;
defaultCharset = builder.defaultCharset;
@@ -4755,7 +4690,7 @@ public class RestContext extends BeanContext {
* Returns whether it's safe to pass the HTTP body as a <js>"body"</js>
GET parameter.
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_disableAllowBodyParam}
+ * <li class='jf'>{@link RestContextBuilder#disableBodyParam()}
* </ul>
*
* @return <jk>true</jk> if setting is enabled.
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 a4130e2..17ee05a 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
@@ -112,12 +112,20 @@ public class RestContextBuilder extends
BeanContextBuilder implements ServletCon
Config config;
VarResolverBuilder varResolverBuilder;
- String allowedHeaderParams, allowedMethodHeaders, allowedMethodParams,
clientVersionHeader, uriAuthority, uriContext, path;
- UriRelativity uriRelativity;
- UriResolution uriResolution;
- Charset defaultCharset;
- long maxInput;
+ String
+ allowedHeaderParams = env("RestContext.allowedHeaderParams",
"Accept,Content-Type"),
+ allowedMethodHeaders = env("RestContext.allowedMethodHeaders",
""),
+ allowedMethodParams = env("RestContext.allowedMethodParams",
"HEAD,OPTIONS"),
+ clientVersionHeader = env("RestContext.clientVersionHeader",
"Client-Version"),
+ uriAuthority = env("RestContext.uriAuthority", (String)null),
+ uriContext = env("RestContext.uriContext", (String)null),
+ path;
+ UriRelativity uriRelativity = env("RestContext.uriRelativity",
UriRelativity.RESOURCE);
+ UriResolution uriResolution = env("RestContext.uriResolution",
UriResolution.ROOT_RELATIVE);
+ Charset defaultCharset = env("RestContext.defaultCharset",
IOUtils.UTF8);
+ long maxInput = parseLongWithSuffix(env("RestContext.maxInput",
"100M"));
List<MediaType> consumes, produces;
+ Boolean disableBodyParam = env("RestContext.disableBodyParam", false);
Class<? extends RestChildren> childrenClass = RestChildren.class;
Class<? extends RestOpContext> opContextClass = RestOpContext.class;
Class<? extends RestOperations> operationsClass = RestOperations.class;
@@ -148,17 +156,6 @@ public class RestContextBuilder extends BeanContextBuilder
implements ServletCon
SerializedPojoProcessor.class
);
- allowedHeaderParams =
env("RestContext.allowedHeaderParams", "Accept,Content-Type");
- allowedMethodHeaders =
env("RestContext.allowedMethodHeaders", "");
- allowedMethodParams =
env("RestContext.allowedMethodParams", "HEAD,OPTIONS");
- clientVersionHeader =
env("RestContext.clientVersionHeader", "Client-Version");
- defaultCharset = env("RestContext.defaultCharset",
IOUtils.UTF8);
- maxInput =
StringUtils.parseLongWithSuffix(env("RestContext.maxInput", "100M"));
- uriAuthority = env("RestContext.uriAuthority",
(String)null);
- uriContext = env("RestContext.uriContext",
(String)null);
- uriRelativity = env("RestContext.uriRelativity",
UriRelativity.RESOURCE);
- uriResolution = env("RestContext.uriResolution",
UriResolution.ROOT_RELATIVE);
-
// Pass-through default values.
if (parentContext.isPresent()) {
RestContext pc = parentContext.get();
@@ -1278,7 +1275,7 @@ public class RestContextBuilder extends
BeanContextBuilder implements ServletCon
}
/**
- * <i><l>RestContext</l> configuration property: </i> Allow body
URL parameter.
+ * Disable body URL parameter.
*
* <p>
* When enabled, the HTTP body content on PUT and POST requests can be
passed in as text using the <js>"body"</js>
@@ -1289,15 +1286,54 @@ public class RestContextBuilder extends
BeanContextBuilder implements ServletCon
* ?body=(name='John%20Smith',age=45)
* </p>
*
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_disableAllowBodyParam}
+ * <h5 class='section'>Example:</h5>
+ * <p class='bcode w800'>
+ * <jc>// Option #1 - Defined via annotation resolving to a config
file setting with default value.</jc>
+ *
<ja>@Rest</ja>(disableBodyParam=<js>"$C{REST/disableBodyParam,true}"</js>)
+ * <jk>public class</jk> MyResource {
+ *
+ * <jc>// Option #2 - Defined 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>.disableBodyParam();
+ * }
+ *
+ * <jc>// Option #3 - Defined 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>.disableBodyParam();
+ * }
+ * }
+ * </p>
+ *
+ * <ul class='notes'>
+ * <li>
+ * <js>'body'</js> parameter name is case-insensitive.
+ * <li>
+ * Useful for debugging PUT and POST methods using only a
browser.
* </ul>
*
* @return This object (for method chaining).
*/
@FluentSetter
- public RestContextBuilder disableAllowBodyParam() {
- return set(REST_disableAllowBodyParam);
+ public RestContextBuilder disableBodyParam() {
+ return disableBodyParam(true);
+ }
+
+ /**
+ * Disable body URL parameter.
+ *
+ * <p>
+ * Same as {@link #disableBodyParam()} but allows you to set it as a
boolean value.
+ *
+ * @param value The new value for this setting.
+ * @return This object (for method chaining).
+ */
+ @FluentSetter
+ public RestContextBuilder disableBodyParam(boolean value) {
+ disableBodyParam = value;
+ return this;
}
/**
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 ff3bf3d..b3fe5cb 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
@@ -49,7 +49,7 @@ import org.apache.juneau.rest.vars.*;
public @interface Rest {
/**
- * Disable allow body URL parameter.
+ * Disable body URL parameter.
*
* <p>
* When enabled, the HTTP body content on PUT and POST requests can be
passed in as text using the <js>"body"</js>
@@ -67,10 +67,10 @@ public @interface Rest {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_disableAllowBodyParam}
+ * <li class='jm'>{@link RestContextBuilder#disableBodyParam()}
* </ul>
*/
- String disableAllowBodyParam() default "";
+ String disableBodyParam() default "";
/**
* Configuration property: Allowed header URL parameters.
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 2328c19..aeb6521 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
@@ -100,7 +100,7 @@ public class RestAnnotation {
Class<? extends DebugEnablement> debugEnablement =
DebugEnablement.Null.class;
Class<?>[] children={}, parsers={}, serializers={};
Swagger swagger = SwaggerAnnotation.DEFAULT;
- String disableAllowBodyParam="", allowedHeaderParams="",
allowedMethodHeaders="", allowedMethodParams="", clientVersionHeader="",
config="", debug="", debugOn="", defaultAccept="", defaultCharset="",
defaultContentType="", maxInput="", messages="", path="",
renderResponseStackTraces="", roleGuard="", rolesDeclared="", siteName="",
uriAuthority="", uriContext="", uriRelativity="", uriResolution="";
+ String disableBodyParam="", allowedHeaderParams="",
allowedMethodHeaders="", allowedMethodParams="", clientVersionHeader="",
config="", debug="", debugOn="", defaultAccept="", defaultCharset="",
defaultContentType="", maxInput="", messages="", path="",
renderResponseStackTraces="", roleGuard="", rolesDeclared="", siteName="",
uriAuthority="", uriContext="", uriRelativity="", uriResolution="";
String[] consumes={}, defaultRequestAttributes={},
defaultRequestHeaders={}, defaultResponseHeaders={}, description={},
produces={}, title={};
/**
@@ -120,13 +120,13 @@ public class RestAnnotation {
}
/**
- * Sets the {@link Rest#disableAllowBodyParam()} property on
this annotation.
+ * Sets the {@link Rest#disableBodyParam()} property on this
annotation.
*
* @param value The new value for this property.
* @return This object (for method chaining).
*/
- public Builder disableAllowBodyParam(String value) {
- this.disableAllowBodyParam = value;
+ public Builder disableBodyParam(String value) {
+ this.disableBodyParam = value;
return this;
}
@@ -713,12 +713,12 @@ public class RestAnnotation {
private final Class<? extends DebugEnablement> debugEnablement;
private final Class<?>[] children, parsers, serializers;
private final Swagger swagger;
- private final String disableAllowBodyParam,
allowedHeaderParams, allowedMethodHeaders, allowedMethodParams,
clientVersionHeader, config, debug, debugOn, defaultAccept, defaultCharset,
defaultContentType, maxInput, messages, path, renderResponseStackTraces,
roleGuard, rolesDeclared, siteName, uriAuthority, uriContext, uriRelativity,
uriResolution;
+ private final String disableBodyParam, allowedHeaderParams,
allowedMethodHeaders, allowedMethodParams, clientVersionHeader, config, debug,
debugOn, defaultAccept, defaultCharset, defaultContentType, maxInput, messages,
path, renderResponseStackTraces, roleGuard, rolesDeclared, siteName,
uriAuthority, uriContext, uriRelativity, uriResolution;
private final String[] consumes, description, produces,
defaultRequestAttributes, defaultRequestHeaders, defaultResponserHeaders, title;
Impl(Builder b) {
super(b);
- this.disableAllowBodyParam = b.disableAllowBodyParam;
+ this.disableBodyParam = b.disableBodyParam;
this.allowedHeaderParams = b.allowedHeaderParams;
this.allowedMethodHeaders = b.allowedMethodHeaders;
this.allowedMethodParams = b.allowedMethodParams;
@@ -772,8 +772,8 @@ public class RestAnnotation {
}
@Override /* Rest */
- public String disableAllowBodyParam() {
- return disableAllowBodyParam;
+ public String disableBodyParam() {
+ return disableBodyParam;
}
@Override /* Rest */
@@ -1070,7 +1070,7 @@ public class RestAnnotation {
value(a.restChildrenClass(),
RestChildren.Null.class).ifPresent(x -> b.restChildrenClass(x));
value(a.restOperationsClass(),
RestOperations.Null.class).ifPresent(x -> b.restOperationsClass(x));
b.setIf(a.debugEnablement() !=
DebugEnablement.Null.class, REST_debugEnablement, a.debugEnablement());
- b.setIfNotEmpty(REST_disableAllowBodyParam,
bool(a.disableAllowBodyParam()));
+
value(a.disableBodyParam()).map(Boolean::parseBoolean).ifPresent(x ->
b.disableBodyParam(x));
value(a.allowedHeaderParams()).ifPresent(x ->
b.allowedHeaderParams(x));
value(a.allowedMethodHeaders()).ifPresent(x ->
b.allowedMethodHeaders(x));
value(a.allowedMethodParams()).ifPresent(x ->
b.allowedMethodParams(x));
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestAnnotation_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestAnnotation_Test.java
index 8116afa..0ed1e2c 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestAnnotation_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestAnnotation_Test.java
@@ -37,7 +37,7 @@ public class RestAnnotation_Test {
//------------------------------------------------------------------------------------------------------------------
Rest a1 = RestAnnotation.create()
- .disableAllowBodyParam("disableAllowBodyParam")
+ .disableBodyParam("disableBodyParam")
.allowedHeaderParams("allowedHeaderParams")
.allowedMethodHeaders("allowedMethodHeaders")
.allowedMethodParams("allowedMethodParams")
@@ -92,7 +92,7 @@ public class RestAnnotation_Test {
.build();
Rest a2 = RestAnnotation.create()
- .disableAllowBodyParam("disableAllowBodyParam")
+ .disableBodyParam("disableBodyParam")
.allowedHeaderParams("allowedHeaderParams")
.allowedMethodHeaders("allowedMethodHeaders")
.allowedMethodParams("allowedMethodParams")
@@ -171,7 +171,7 @@ public class RestAnnotation_Test {
+
"defaultRequestHeaders:['defaultRequestHeaders'],"
+
"defaultResponseHeaders:['defaultResponseHeaders'],"
+ "description:['description'],"
- +
"disableAllowBodyParam:'disableAllowBodyParam',"
+ + "disableBodyParam:'disableBodyParam',"
+
"encoders:['org.apache.juneau.encoders.Encoder'],"
+
"fileFinder:'org.apache.juneau.cp.FileFinder',"
+ "guards:['org.apache.juneau.rest.RestGuard'],"
@@ -250,7 +250,7 @@ public class RestAnnotation_Test {
//------------------------------------------------------------------------------------------------------------------
@Rest(
- disableAllowBodyParam="disableAllowBodyParam",
+ disableBodyParam="disableBodyParam",
allowedHeaderParams="allowedHeaderParams",
allowedMethodHeaders="allowedMethodHeaders",
allowedMethodParams="allowedMethodParams",
@@ -307,7 +307,7 @@ public class RestAnnotation_Test {
Rest d1 = D1.class.getAnnotationsByType(Rest.class)[0];
@Rest(
- disableAllowBodyParam="disableAllowBodyParam",
+ disableBodyParam="disableBodyParam",
allowedHeaderParams="allowedHeaderParams",
allowedMethodHeaders="allowedMethodHeaders",
allowedMethodParams="allowedMethodParams",
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_AllowBodyParam_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_AllowBodyParam_Test.java
index 9ccdd52..c4cbaa8 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_AllowBodyParam_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_AllowBodyParam_Test.java
@@ -24,27 +24,27 @@ import org.junit.*;
public class Rest_AllowBodyParam_Test {
//------------------------------------------------------------------------------------------------------------------
- // @Rest(disableAllowBodyParam)
+ // @Rest(disableBodyParam)
//------------------------------------------------------------------------------------------------------------------
- @Rest(disableAllowBodyParam="false")
+ @Rest(disableBodyParam="false")
public static class A1 {
@RestOp
public OMap put(@Body OMap body) {
return body;
}
}
- @Rest(disableAllowBodyParam="true")
+ @Rest(disableBodyParam="true")
public static class A2 {
@RestOp
public OMap put(@Body OMap body) {
return body;
}
}
- @Rest(disableAllowBodyParam="true")
+ @Rest(disableBodyParam="true")
public static class A3 extends A1 {}
- @Rest(disableAllowBodyParam="false")
+ @Rest(disableBodyParam="false")
public static class A4 extends A2 {}