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 33779c5 REST refactoring.
33779c5 is described below
commit 33779c545059f85d691a77548bfffd203ca12e55
Author: JamesBognar <[email protected]>
AuthorDate: Tue Feb 9 09:17:56 2021 -0500
REST refactoring.
---
.../java/org/apache/juneau/http/HeaderList.java | 27 ++
.../org/apache/juneau/http/NamedAttributeList.java | 16 +-
.../juneau/rest/BasicSwaggerProviderSession.java | 6 +-
.../org/apache/juneau/rest/RequestAttributes.java | 4 +-
.../org/apache/juneau/rest/RequestFormData.java | 2 +-
.../org/apache/juneau/rest/RequestHeaders.java | 2 +-
.../java/org/apache/juneau/rest/RequestQuery.java | 2 +-
.../main/java/org/apache/juneau/rest/RestCall.java | 4 +-
.../java/org/apache/juneau/rest/RestChildren.java | 2 +-
.../java/org/apache/juneau/rest/RestContext.java | 79 ++--
.../org/apache/juneau/rest/RestContextBuilder.java | 6 +-
.../apache/juneau/rest/RestOperationContext.java | 449 +++++++++++----------
.../juneau/rest/RestOperationContextBuilder.java | 2 +-
.../java/org/apache/juneau/rest/RestRequest.java | 39 +-
.../java/org/apache/juneau/rest/RestResponse.java | 18 +-
.../java/org/apache/juneau/rest/RestServlet.java | 2 +-
.../juneau/rest/RrpcRestOperationContext.java | 4 +-
17 files changed, 385 insertions(+), 279 deletions(-)
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderList.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderList.java
index 68a07f2..d74b387 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderList.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderList.java
@@ -74,6 +74,33 @@ public class HeaderList extends AList<Header> {
}
/**
+ * Appends or replaces the header values in this list.
+ *
+ * <p>
+ * If the header already exists in this list, it will be replaced with
the new value.
+ * Otherwise it will be appended to the end of this list.
+ *
+ * @param values The values to append or replace in this list.
+ * @return This object (for method chaining).
+ */
+ public HeaderList appendUnique(Collection<Header> values) {
+ for (Header h : values) {
+ boolean replaced = false;
+ for (ListIterator<Header> li = listIterator();
li.hasNext();) {
+ Header h2 = li.next();
+ if (h2.getName().equalsIgnoreCase(h.getName()))
{
+ li.set(h);
+ replaced = true;
+ break;
+ }
+ }
+ if (! replaced)
+ add(h);
+ }
+ return this;
+ }
+
+ /**
* Returns the contents of this list as a {@link Header} array.
*
* @return The contents of this list as a {@link Header} array.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NamedAttributeList.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NamedAttributeList.java
index e548652..9426125 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NamedAttributeList.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NamedAttributeList.java
@@ -55,7 +55,7 @@ public class NamedAttributeList extends AList<NamedAttribute>
{
* @param values The values to append or replace in this list.
* @return This object (for method chaining).
*/
- public NamedAttributeList appendUnique(NamedAttribute...values) {
+ public NamedAttributeList appendUnique(List<NamedAttribute> values) {
for (NamedAttribute h : values) {
boolean replaced = false;
for (ListIterator<NamedAttribute> li = listIterator();
li.hasNext();) {
@@ -73,6 +73,20 @@ public class NamedAttributeList extends
AList<NamedAttribute> {
}
/**
+ * Appends or replaces the named attribute values in this list.
+ *
+ * <p>
+ * If the named attribute already exists in this list, it will be
replaced with the new value.
+ * Otherwise it will be appended to the end of this list.
+ *
+ * @param values The values to append or replace in this list.
+ * @return This object (for method chaining).
+ */
+ public NamedAttributeList appendUnique(NamedAttribute...values) {
+ return appendUnique(Arrays.asList(values));
+ }
+
+ /**
* Returns the contents of this list as a {@link NamedAttribute} array.
*
* @return The contents of this list as a {@link NamedAttribute} array.
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProviderSession.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProviderSession.java
index 8262337..04fb4f9 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProviderSession.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicSwaggerProviderSession.java
@@ -210,7 +210,7 @@ public class BasicSwaggerProviderSession {
BeanSession bs = sm.createBeanSession();
- Method m = sm.method;
+ Method m = sm.getJavaMethod();
MethodInfo mi = MethodInfo.of(m);
RestOp rm = mi.getLastAnnotation(RestOp.class);
String mn = m.getName();
@@ -504,13 +504,13 @@ public class BasicSwaggerProviderSession {
op.put("responses", new TreeMap<>(responses));
if (! op.containsKey("consumes")) {
- List<MediaType> mConsumes =
sm.supportedContentTypes;
+ List<MediaType> mConsumes =
sm.getSupportedContentTypes();
if (! mConsumes.equals(consumes))
op.put("consumes", mConsumes);
}
if (! op.containsKey("produces")) {
- List<MediaType> mProduces =
sm.supportedAcceptTypes;
+ List<MediaType> mProduces =
sm.getSupportedAcceptTypes();
if (! mProduces.equals(produces))
op.put("produces", mProduces);
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestAttributes.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestAttributes.java
index 0e5f862..2421b7e 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestAttributes.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestAttributes.java
@@ -48,11 +48,11 @@ public class RequestAttributes extends OMap {
/**
* Adds values to these attributes if they're not already set.
- *
+ *
* @param pairs The attributes to add.
* @return This object (for method chaining).
*/
- public RequestAttributes addDefault(NamedAttribute...pairs) {
+ public RequestAttributes addDefault(List<NamedAttribute> pairs) {
for (NamedAttribute p : pairs) {
String key = p.getName();
Object value = p.getValue();
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormData.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormData.java
index c92a9ee..cc8e107 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormData.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormData.java
@@ -99,7 +99,7 @@ public class RequestFormData extends
LinkedHashMap<String,String[]> {
* <br>Can be <jk>null</jk>.
* @return This object (for method chaining).
*/
- public RequestFormData addDefault(NameValuePair...pairs) {
+ public RequestFormData addDefault(Collection<NameValuePair> pairs) {
for (NameValuePair p : pairs) {
String key = p.getName();
Object value = p.getValue();
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeaders.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeaders.java
index 979122b..0d46806 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeaders.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeaders.java
@@ -99,7 +99,7 @@ public class RequestHeaders extends TreeMap<String,String[]> {
* <br>Can be <jk>null</jk>.
* @return This object (for method chaining).
*/
- public RequestHeaders addDefault(Header...pairs) {
+ public RequestHeaders addDefault(List<Header> pairs) {
for (Header p : pairs) {
String key = p.getName();
Object value = p.getValue();
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQuery.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQuery.java
index 1f55775..18adc18 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQuery.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQuery.java
@@ -103,7 +103,7 @@ public final class RequestQuery extends
LinkedHashMap<String,String[]> {
* <br>Can be <jk>null</jk>.
* @return This object (for method chaining).
*/
- public RequestQuery addDefault(NameValuePair...pairs) {
+ public RequestQuery addDefault(Collection<NameValuePair> pairs) {
for (NameValuePair p : pairs) {
String key = p.getName();
Object value = p.getValue();
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestCall.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestCall.java
index e787bdb..019a03e 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestCall.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestCall.java
@@ -60,7 +60,7 @@ public class RestCall {
public RestCall(Object resource, RestContext context,
HttpServletRequest req, HttpServletResponse res) {
this.context = context;
this.resource = resource;
- beanFactory = BeanFactory.of(context.rootBeanFactory, resource);
+ beanFactory = BeanFactory.of(context.getRootBeanFactory(),
resource);
beanFactory.addBean(RestContext.class, context);
request(req).response(res);
}
@@ -322,7 +322,7 @@ public class RestCall {
* @return The java method of this call, or <jk>null</jk> if it hasn't
been determined yet.
*/
public Method getJavaMethod() {
- return opContext == null ? null : opContext.method;
+ return opContext == null ? null : opContext.getJavaMethod();
}
/**
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildren.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildren.java
index ca054de..d8987e0 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildren.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildren.java
@@ -65,7 +65,7 @@ public class RestChildren {
String pi = call.getPathInfoUndecoded();
if ((! children.isEmpty()) && pi != null && ! pi.equals("/")) {
for (RestContext rc : children.values()) {
- UrlPathMatcher upp = rc.pathMatcher;
+ UrlPathMatcher upp = rc.getPathMatcher();
UrlPathMatch uppm =
upp.match(call.getUrlPath());
if (uppm != null) {
return
Optional.of(RestChildMatch.create(uppm, rc));
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 50c7526..dd70620 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
@@ -20,7 +20,6 @@ import static org.apache.juneau.rest.HttpRuntimeException.*;
import static org.apache.juneau.rest.logging.RestLoggingDetail.*;
import static java.util.Collections.*;
import static java.util.logging.Level.*;
-import static java.util.Arrays.*;
import java.io.*;
import java.lang.reflect.*;
@@ -3347,7 +3346,7 @@ public class RestContext extends BeanContext {
private final Supplier<?> resource;
private final Class<?> resourceClass;
- final RestContextBuilder builder;
+ private final RestContextBuilder builder;
private final boolean
allowBodyParam,
renderResponseStackTraces;
@@ -3355,8 +3354,8 @@ public class RestContext extends BeanContext {
clientVersionHeader,
uriAuthority,
uriContext;
- final String path, fullPath;
- final UrlPathMatcher pathMatcher;
+ private final String path, fullPath;
+ private final UrlPathMatcher pathMatcher;
private final Set<String> allowedMethodParams, allowedHeaderParams,
allowedMethodHeaders;
@@ -3369,9 +3368,9 @@ public class RestContext extends BeanContext {
private final List<MediaType>
consumes,
produces;
- final org.apache.http.Header[] defaultRequestHeaders,
defaultResponseHeaders;
- final NamedAttribute[] defaultRequestAttributes;
- private final ResponseHandler[] responseHandlers;
+ private final List<org.apache.http.Header> defaultRequestHeaders,
defaultResponseHeaders;
+ private final List<NamedAttribute> defaultRequestAttributes;
+ private final List<ResponseHandler> responseHandlers;
private final Messages messages;
private final Config config;
private final VarResolver varResolver;
@@ -3381,7 +3380,7 @@ public class RestContext extends BeanContext {
private final SwaggerProvider swaggerProvider;
private final HttpException initException;
private final RestContext parentContext;
- final BeanFactory rootBeanFactory;
+ private final BeanFactory rootBeanFactory;
private final BeanFactory beanFactory;
private final UriResolution uriResolution;
private final UriRelativity uriRelativity;
@@ -3494,8 +3493,7 @@ public class RestContext extends BeanContext {
config = builder.config.resolving(vr.createSession());
bf.addBean(Config.class, config);
- responseHandlers = createResponseHandlers(r, cp,
bf).asArray();
- bf.addBean(ResponseHandler[].class, responseHandlers);
+ responseHandlers =
unmodifiableList(createResponseHandlers(r, cp, bf));
callLogger = createCallLogger(r, cp, bf, l, ts);
bf.addBean(RestLogger.class, callLogger);
@@ -3521,9 +3519,9 @@ public class RestContext extends BeanContext {
staticFiles = createStaticFiles(r, cp, bf);
bf.addBean(StaticFiles.class, staticFiles);
- defaultRequestHeaders = createDefaultRequestHeaders(r,
cp, bf).asArray();
- defaultResponseHeaders =
createDefaultResponseHeaders(r, cp, bf).asArray();
- defaultRequestAttributes =
createDefaultRequestAttributes(r, cp, bf).asArray();
+ defaultRequestHeaders =
unmodifiableList(createDefaultRequestHeaders(r, cp, bf));
+ defaultResponseHeaders =
unmodifiableList(createDefaultResponseHeaders(r, cp, bf));
+ defaultRequestAttributes =
unmodifiableList(createDefaultRequestAttributes(r, cp, bf));
opParams = createRestOperationParams(r, cp,
bf).asArray();
hookMethodParams = createHookMethodParams(r, cp,
bf).asArray();
@@ -3542,8 +3540,8 @@ public class RestContext extends BeanContext {
debugEnablement = createDebugEnablement(r, cp, bf);
- consumes = cp.getList(REST_consumes,
MediaType.class).orElse(parsers.getSupportedMediaTypes());
- produces = cp.getList(REST_produces,
MediaType.class).orElse(serializers.getSupportedMediaTypes());
+ consumes = unmodifiableList(cp.getList(REST_consumes,
MediaType.class).orElse(parsers.getSupportedMediaTypes()));
+ produces = unmodifiableList(cp.getList(REST_produces,
MediaType.class).orElse(serializers.getSupportedMediaTypes()));
fullPath = (builder.parentContext == null ? "" :
(builder.parentContext.fullPath + '/')) + builder.getPath();
path = builder.getPath();
@@ -6127,7 +6125,7 @@ public class RestContext extends BeanContext {
*
* @return
* The header names allowed to be passed as URL parameters.
- * <br>The set is case-insensitive ordered.
+ * <br>The set is case-insensitive ordered and unmodifiable.
*/
public Set<String> getAllowedHeaderParams() {
return allowedHeaderParams;
@@ -6142,7 +6140,7 @@ public class RestContext extends BeanContext {
*
* @return
* The method names allowed to be passed as <c>X-Method</c>
headers.
- * <br>The set is case-insensitive ordered.
+ * <br>The set is case-insensitive ordered and unmodifiable.
*/
public Set<String> getAllowedMethodHeaders() {
return allowedMethodHeaders;
@@ -6157,7 +6155,7 @@ public class RestContext extends BeanContext {
*
* @return
* The method names allowed to be passed as <c>method</c> URL
parameters.
- * <br>The set is case-insensitive ordered.
+ * <br>The set is case-insensitive ordered and unmodifiable.
*/
public Set<String> getAllowedMethodParams() {
return allowedMethodParams;
@@ -6280,7 +6278,7 @@ public class RestContext extends BeanContext {
* </ul>
*
* @return
- * The supported <c>Accept</c> header values for this resource.
+ * An unmodifiable list of supported <c>Accept</c> header values
for this resource.
* <br>Never <jk>null</jk>.
*/
public List<MediaType> getProduces() {
@@ -6296,7 +6294,7 @@ public class RestContext extends BeanContext {
* </ul>
*
* @return
- * The supported <c>Content-Type</c> header values for this
resource.
+ * An unmodifiable list of supported <c>Content-Type</c> header
values for this resource.
* <br>Never <jk>null</jk>.
*/
public List<MediaType> getConsumes() {
@@ -6311,11 +6309,11 @@ public class RestContext extends BeanContext {
* </ul>
*
* @return
- * The default request headers for this resource.
+ * The default request headers for this resource in an
unmodifiable list.
* <br>Never <jk>null</jk>.
*/
public List<org.apache.http.Header> getDefaultRequestHeaders() {
- return unmodifiableList(asList(defaultRequestHeaders));
+ return defaultRequestHeaders;
}
/**
@@ -6326,11 +6324,11 @@ public class RestContext extends BeanContext {
* </ul>
*
* @return
- * The default request headers for this resource.
+ * The default request headers for this resource in an
unmodifiable list.
* <br>Never <jk>null</jk>.
*/
public List<NamedAttribute> getDefaultRequestAttributes() {
- return unmodifiableList(asList(defaultRequestAttributes));
+ return defaultRequestAttributes;
}
/**
@@ -6341,11 +6339,11 @@ public class RestContext extends BeanContext {
* </ul>
*
* @return
- * The default response headers for this resource.
+ * The default response headers for this resource in an
unmodifiable list.
* <br>Never <jk>null</jk>.
*/
public List<org.apache.http.Header> getDefaultResponseHeaders() {
- return unmodifiableList(asList(defaultResponseHeaders));
+ return defaultResponseHeaders;
}
/**
@@ -6359,7 +6357,7 @@ public class RestContext extends BeanContext {
* The response handlers associated with this resource.
* <br>Never <jk>null</jk>.
*/
- protected ResponseHandler[] getResponseHandlers() {
+ protected List<ResponseHandler> getResponseHandlers() {
return responseHandlers;
}
@@ -6475,6 +6473,33 @@ public class RestContext extends BeanContext {
}
/**
+ * Returns the builder that created this context.
+ *
+ * @return The builder that created this context.
+ */
+ public ServletConfig getBuilder() {
+ return builder;
+ }
+
+ /**
+ * Returns the path matcher for this context.
+ *
+ * @return The path matcher for this context.
+ */
+ public UrlPathMatcher getPathMatcher() {
+ return pathMatcher;
+ }
+
+ /**
+ * Returns the root bean factory for this context.
+ *
+ * @return The root bean factory for this context.
+ */
+ public BeanFactory getRootBeanFactory() {
+ return rootBeanFactory;
+ }
+
+ /**
* Returns the swagger for the REST resource.
*
* @param locale The locale of the swagger to 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 128ef3e..df0e49a 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
@@ -213,13 +213,13 @@ public class RestContextBuilder extends
BeanContextBuilder implements ServletCon
if (resource.isPresent()) {
Object r = resource.get();
x = BeanFactory
- .of(parentContext.isPresent() ?
parentContext.get().rootBeanFactory : null, r)
+ .of(parentContext.isPresent() ?
parentContext.get().getRootBeanFactory() : null, r)
.beanCreateMethodFinder(BeanFactory.class,
resource)
.find("createBeanFactory")
.run();
}
if (x == null && parentContext.isPresent()) {
- x = parentContext.get().rootBeanFactory;
+ x = parentContext.get().getRootBeanFactory();
}
return BeanFactory.of(x, resource.orElse(null));
}
@@ -2656,7 +2656,7 @@ public class RestContextBuilder extends
BeanContextBuilder implements ServletCon
@Override /* ServletConfig */
public ServletContext getServletContext() {
- return inner != null ? inner.getServletContext() :
parentContext != null ? parentContext.builder.getServletContext() : null;
+ return inner != null ? inner.getServletContext() :
parentContext != null ? parentContext.getBuilder().getServletContext() : null;
}
@Override /* ServletConfig */
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContext.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContext.java
index 5d9c206..5987389 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContext.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContext.java
@@ -20,12 +20,12 @@ import static org.apache.juneau.httppart.HttpPartType.*;
import static org.apache.juneau.rest.RestContext.*;
import static org.apache.juneau.rest.util.RestUtils.*;
import static org.apache.juneau.rest.HttpRuntimeException.*;
+import static java.util.Collections.*;
import java.lang.annotation.*;
import java.lang.reflect.Method;
import java.util.*;
import java.util.concurrent.*;
-import java.util.concurrent.atomic.*;
import java.util.function.*;
import javax.servlet.*;
@@ -55,7 +55,6 @@ import org.apache.juneau.rest.guards.*;
import org.apache.juneau.rest.logging.*;
import org.apache.juneau.rest.util.*;
import org.apache.juneau.serializer.*;
-import org.apache.juneau.svl.*;
import org.apache.juneau.utils.*;
/**
@@ -674,40 +673,37 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
private final String httpMethod;
private final UrlPathMatcher[] pathMatchers;
- final RestOperationParam[] opParams;
+ private final RestOperationParam[] opParams;
private final RestGuard[] guards;
private final RestMatcher[] optionalMatchers;
private final RestMatcher[] requiredMatchers;
private final RestConverter[] converters;
private final Integer priority;
private final RestContext context;
- final Method method;
- final MethodInvoker methodInvoker;
- final MethodInfo mi;
- final SerializerGroup serializers;
- final ParserGroup parsers;
- final EncoderGroup encoders;
- final HttpPartSerializer partSerializer;
- final HttpPartParser partParser;
- final JsonSchemaGenerator jsonSchemaGenerator;
- final org.apache.http.Header[] defaultRequestHeaders,
defaultResponseHeaders;
- final NameValuePair[] defaultRequestQuery, defaultRequestFormData;
- final NamedAttribute[] defaultRequestAttributes;
- final String defaultCharset;
- final long maxInput;
- final List<MediaType>
+ private final Method method;
+ private final MethodInvoker methodInvoker;
+ private final MethodInfo mi;
+ private final SerializerGroup serializers;
+ private final ParserGroup parsers;
+ private final EncoderGroup encoders;
+ private final HttpPartSerializer partSerializer;
+ private final HttpPartParser partParser;
+ private final JsonSchemaGenerator jsonSchemaGenerator;
+ private final List<org.apache.http.Header> defaultRequestHeaders,
defaultResponseHeaders;
+ private final List<NameValuePair> defaultRequestQuery,
defaultRequestFormData;
+ private final List<NamedAttribute> defaultRequestAttributes;
+ private final String defaultCharset;
+ private final long maxInput;
+ private final List<MediaType>
supportedAcceptTypes,
supportedContentTypes;
- final RestLogger callLogger;
+ private final RestLogger callLogger;
- final Map<Class<?>,ResponseBeanMeta> responseBeanMetas = new
ConcurrentHashMap<>();
- final Map<Class<?>,ResponsePartMeta> headerPartMetas = new
ConcurrentHashMap<>();
- final Map<Class<?>,ResponsePartMeta> bodyPartMetas = new
ConcurrentHashMap<>();
- final ResponseBeanMeta responseMeta;
-
- final Map<Integer,AtomicInteger> statusCodes = new
ConcurrentHashMap<>();
-
- final int hierarchyDepth;
+ private final Map<Class<?>,ResponseBeanMeta> responseBeanMetas = new
ConcurrentHashMap<>();
+ private final Map<Class<?>,ResponsePartMeta> headerPartMetas = new
ConcurrentHashMap<>();
+ private final Map<Class<?>,ResponsePartMeta> bodyPartMetas = new
ConcurrentHashMap<>();
+ private final ResponseBeanMeta responseMeta;
+ private final int hierarchyDepth;
/**
* Creator.
@@ -739,22 +735,22 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
mi = MethodInfo.of(method).accessible();
Object r = context.getResource();
- BeanFactory bf =
BeanFactory.of(context.rootBeanFactory, r)
+ BeanFactory bf =
BeanFactory.of(context.getRootBeanFactory(), r)
.addBean(RestOperationContext.class, this)
.addBean(Method.class, method)
.addBean(ContextProperties.class, cp);
bf.addBean(BeanFactory.class, bf);
- serializers = createSerializers(r, bf, cp);
+ serializers = createSerializers(r, cp, bf);
bf.addBean(SerializerGroup.class, serializers);
- parsers = createParsers(r, bf, cp);
+ parsers = createParsers(r, cp, bf);
bf.addBean(ParserGroup.class, parsers);
- partSerializer = createPartSerializer(r, bf, cp);
+ partSerializer = createPartSerializer(r, cp, bf);
bf.addBean(HttpPartSerializer.class, partSerializer);
- partParser = createPartParser(r, bf, cp);
+ partParser = createPartParser(r, cp, bf);
bf.addBean(HttpPartParser.class, partParser);
converters = createConverters(r, cp, bf).asArray();
@@ -774,17 +770,17 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
encoders = createEncoders(r, cp, bf);
bf.addBean(EncoderGroup.class, encoders);
- jsonSchemaGenerator = createJsonSchemaGenerator(r, bf,
cp);
+ jsonSchemaGenerator = createJsonSchemaGenerator(r, cp,
bf);
bf.addBean(JsonSchemaGenerator.class,
jsonSchemaGenerator);
- supportedAcceptTypes = cp.getList(REST_produces,
MediaType.class).orElse(serializers.getSupportedMediaTypes());
- supportedContentTypes = cp.getList(REST_consumes,
MediaType.class).orElse(parsers.getSupportedMediaTypes());
+ supportedAcceptTypes =
unmodifiableList(cp.getList(REST_produces,
MediaType.class).orElse(serializers.getSupportedMediaTypes()));
+ supportedContentTypes =
unmodifiableList(cp.getList(REST_consumes,
MediaType.class).orElse(parsers.getSupportedMediaTypes()));
- defaultRequestHeaders = createDefaultRequestHeaders(r,
cp, bf, method, context).asArray();
- defaultResponseHeaders =
createDefaultResponseHeaders(r, cp, bf, method, context).asArray();
- defaultRequestQuery = createDefaultRequestQuery(r, cp,
bf, method).asArray();
- defaultRequestFormData =
createDefaultRequestFormData(r, cp, bf, method).asArray();
- defaultRequestAttributes =
createDefaultRequestAttributes(r, cp, bf, method, context).asArray();
+ defaultRequestHeaders =
unmodifiableList(createDefaultRequestHeaders(r, cp, bf, method, context));
+ defaultResponseHeaders =
unmodifiableList(createDefaultResponseHeaders(r, cp, bf, method, context));
+ defaultRequestQuery =
unmodifiableList(createDefaultRequestQuery(r, cp, bf, method));
+ defaultRequestFormData =
unmodifiableList(createDefaultRequestFormData(r, cp, bf, method));
+ defaultRequestAttributes =
unmodifiableList(createDefaultRequestAttributes(r, cp, bf, method, context));
int _hierarchyDepth = 0;
Class<?> sc =
method.getDeclaringClass().getSuperclass();
@@ -801,7 +797,7 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
_httpMethod = "*";
httpMethod = _httpMethod.toUpperCase(Locale.ENGLISH);
- defaultCharset = cp.get(REST_defaultCharset,
String.class).orElse("utf-8");
+ defaultCharset =
cp.getString(REST_defaultCharset).orElse("utf-8");
maxInput =
StringUtils.parseLongWithSuffix(cp.get(REST_maxInput,
String.class).orElse("100M"));
@@ -819,29 +815,6 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
}
}
- private String joinnlFirstNonEmptyArray(String[]...s) {
- for (String[] ss : s)
- if (ss.length > 0)
- return joinnl(ss);
- return null;
- }
-
- ResponseBeanMeta getResponseBeanMeta(Object o) {
- if (o == null)
- return null;
- Class<?> c = o.getClass();
- ResponseBeanMeta rbm = responseBeanMetas.get(c);
- if (rbm == null) {
- rbm = ResponseBeanMeta.create(c,
serializers.getContextProperties());
- if (rbm == null)
- rbm = ResponseBeanMeta.NULL;
- responseBeanMetas.put(c, rbm);
- }
- if (rbm == ResponseBeanMeta.NULL)
- return null;
- return rbm;
- }
-
/**
* Instantiates the result converters for this REST resource method.
*
@@ -1092,13 +1065,13 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
* </ul>
*
* @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
* @param properties The property store of this method.
+ * @param beanFactory The bean factory to use for retrieving and
creating beans.
* @return The serializers for this REST resource.
* @throws Exception If serializers could not be instantiated.
* @seealso #REST_serializers
*/
- protected SerializerGroup createSerializers(Object resource,
BeanFactory beanFactory, ContextProperties properties) throws Exception {
+ protected SerializerGroup createSerializers(Object resource,
ContextProperties properties, BeanFactory beanFactory) throws Exception {
SerializerGroup g =
beanFactory.getBean(SerializerGroup.class).orElse(null);
@@ -1153,13 +1126,13 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
* </ul>
*
* @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
* @param properties The property store of this method.
+ * @param beanFactory The bean factory to use for retrieving and
creating beans.
* @return The parsers for this REST resource.
* @throws Exception If parsers could not be instantiated.
* @seealso #REST_parsers
*/
- protected ParserGroup createParsers(Object resource, BeanFactory
beanFactory, ContextProperties properties) throws Exception {
+ protected ParserGroup createParsers(Object resource, ContextProperties
properties, BeanFactory beanFactory) throws Exception {
ParserGroup g =
beanFactory.getBean(ParserGroup.class).orElse(null);
@@ -1215,13 +1188,13 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
* </ul>
*
* @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
* @param properties The property store of this method.
+ * @param beanFactory The bean factory to use for retrieving and
creating beans.
* @return The HTTP part serializer for this REST resource.
* @throws Exception If serializer could not be instantiated.
* @seealso #REST_partSerializer
*/
- protected HttpPartSerializer createPartSerializer(Object resource,
BeanFactory beanFactory, ContextProperties properties) throws Exception {
+ protected HttpPartSerializer createPartSerializer(Object resource,
ContextProperties properties, BeanFactory beanFactory) throws Exception {
HttpPartSerializer x = null;
@@ -1273,13 +1246,13 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
* </ul>
*
* @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
* @param properties The property store of this method.
+ * @param beanFactory The bean factory to use for retrieving and
creating beans.
* @return The HTTP part parser for this REST resource.
* @throws Exception If parser could not be instantiated.
* @seealso #REST_partParser
*/
- protected HttpPartParser createPartParser(Object resource, BeanFactory
beanFactory, ContextProperties properties) throws Exception {
+ protected HttpPartParser createPartParser(Object resource,
ContextProperties properties, BeanFactory beanFactory) throws Exception {
HttpPartParser x = null;
@@ -1350,12 +1323,12 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
* Instantiates the JSON-schema generator for this method.
*
* @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
* @param properties The property store of this method.
+ * @param beanFactory The bean factory 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, BeanFactory beanFactory, ContextProperties properties) throws
Exception {
+ protected JsonSchemaGenerator createJsonSchemaGenerator(Object
resource, ContextProperties properties, BeanFactory beanFactory) throws
Exception {
JsonSchemaGenerator x = null;
@@ -1395,7 +1368,7 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
HeaderList x = HeaderList.create();
- x.appendUnique(context.defaultRequestHeaders);
+ x.appendUnique(context.getDefaultRequestHeaders());
x.appendUnique(properties.getInstanceArray(RESTOP_defaultRequestHeaders,
org.apache.http.Header.class, beanFactory).orElse(new
org.apache.http.Header[0]));
@@ -1441,7 +1414,7 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
HeaderList x = HeaderList.create();
- x.appendUnique(context.defaultResponseHeaders);
+ x.appendUnique(context.getDefaultResponseHeaders());
x.appendUnique(properties.getInstanceArray(RESTOP_defaultResponseHeaders,
org.apache.http.Header.class, beanFactory).orElse(new
org.apache.http.Header[0]));
@@ -1470,7 +1443,7 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
protected NamedAttributeList createDefaultRequestAttributes(Object
resource, ContextProperties properties, BeanFactory beanFactory, Method method,
RestContext context) throws Exception {
NamedAttributeList x = NamedAttributeList.create();
- x.appendUnique(context.defaultRequestAttributes);
+ x.appendUnique(context.getDefaultRequestAttributes());
x.appendUnique(properties.getInstanceArray(RESTOP_defaultRequestAttributes,
NamedAttribute.class, beanFactory).orElse(new NamedAttribute[0]));
@@ -1573,6 +1546,22 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
return x;
}
+ ResponseBeanMeta getResponseBeanMeta(Object o) {
+ if (o == null)
+ return null;
+ Class<?> c = o.getClass();
+ ResponseBeanMeta rbm = responseBeanMetas.get(c);
+ if (rbm == null) {
+ rbm = ResponseBeanMeta.create(c,
serializers.getContextProperties());
+ if (rbm == null)
+ rbm = ResponseBeanMeta.NULL;
+ responseBeanMetas.put(c, rbm);
+ }
+ if (rbm == ResponseBeanMeta.NULL)
+ return null;
+ return rbm;
+ }
+
ResponsePartMeta getResponseHeaderMeta(Object o) {
if (o == null)
return null;
@@ -1616,43 +1605,175 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
}
/**
- * Returns <jk>true</jk> if this Java method has any guards or matchers.
- */
- boolean hasGuardsOrMatchers() {
- return (guards.length != 0 || requiredMatchers.length != 0 ||
optionalMatchers.length != 0);
- }
-
- /**
* Returns the HTTP method name (e.g. <js>"GET"</js>).
+ *
+ * @return The HTTP method name.
*/
- String getHttpMethod() {
+ public String getHttpMethod() {
return httpMethod;
}
/**
* Returns the path pattern for this method.
+ *
+ * @return The path pattern.
*/
- String getPathPattern() {
+ public String getPathPattern() {
return pathMatchers[0].toString();
}
+
/**
- * Returns <jk>true</jk> if the specified request object can call this
method.
+ * Bean property getter: <property>serializers</property>.
+ *
+ * @return The value of the <property>serializers</property> property
on this bean, or <jk>null</jk> if it is not set.
*/
- boolean isRequestAllowed(RestRequest req) {
- for (RestGuard guard : guards) {
- req.setJavaMethod(method);
- if (! guard.isRequestAllowed(req))
- return false;
- }
- return true;
+ public SerializerGroup getSerializers() {
+ return serializers;
}
- boolean matches(UrlPath urlPath) {
- for (UrlPathMatcher p : pathMatchers)
- if (p.match(urlPath) != null)
- return true;
- return false;
+ /**
+ * Bean property getter: <property>parsers</property>.
+ *
+ * @return The value of the <property>parsers</property> property on
this bean, or <jk>null</jk> if it is not set.
+ */
+ public ParserGroup getParsers() {
+ return parsers;
+ }
+
+ /**
+ * Bean property getter: <property>encoders</property>.
+ *
+ * @return The value of the <property>encoders</property> property on
this bean, or <jk>null</jk> if it is not set.
+ */
+ public EncoderGroup getEncoders() {
+ return encoders;
+ }
+
+ /**
+ * Bean property getter: <property>partSerializer</property>.
+ *
+ * @return The value of the <property>partSerializer</property>
property on this bean, or <jk>null</jk> if it is not set.
+ */
+ public HttpPartSerializer getPartSerializer() {
+ return partSerializer;
+ }
+
+ /**
+ * Bean property getter: <property>partParser</property>.
+ *
+ * @return The value of the <property>partParser</property> property on
this bean, or <jk>null</jk> if it is not set.
+ */
+ public HttpPartParser getPartParser() {
+ return partParser;
+ }
+
+ /**
+ * Returns the JSON-Schema generator applicable to this Java method.
+ *
+ * @return The JSON-Schema generator applicable to this Java method.
+ */
+ public JsonSchemaGenerator getJsonSchemaGenerator() {
+ return jsonSchemaGenerator;
+ }
+
+ /**
+ * Returns the underlying Java method that this context belongs to.
+ *
+ * @return The underlying Java method that this context belongs to.
+ */
+ public Method getJavaMethod() {
+ return method;
+ }
+
+ /**
+ * Returns the default request headers.
+ *
+ * @return The default request headers. Never <jk>null</jk>.
+ */
+ public List<org.apache.http.Header> getDefaultRequestHeaders() {
+ return defaultRequestHeaders;
+ }
+
+ /**
+ * Returns the default response headers.
+ *
+ * @return The default response headers. Never <jk>null</jk>.
+ */
+ public List<org.apache.http.Header> getDefaultResponseHeaders() {
+ return defaultResponseHeaders;
+ }
+
+ /**
+ * Returns the default request query parameters.
+ *
+ * @return The default request query parameters. Never <jk>null</jk>.
+ */
+ public List<NameValuePair> getDefaultRequestQuery() {
+ return defaultRequestQuery;
+ }
+
+ /**
+ * Returns the default form data parameters.
+ *
+ * @return The default form data parameters. Never <jk>null</jk>.
+ */
+ public List<NameValuePair> getDefaultRequestFormData() {
+ return defaultRequestFormData;
+ }
+
+ /**
+ * Returns the default request attributes.
+ *
+ * @return The default request attributes. Never <jk>null</jk>.
+ */
+ public List<NamedAttribute> getDefaultRequestAttributes() {
+ return defaultRequestAttributes;
+ }
+
+ /**
+ * Returns the default charset.
+ *
+ * @return The default charset. Never <jk>null</jk>.
+ */
+ public String getDefaultCharset() {
+ return defaultCharset;
+ }
+
+ /**
+ * Returns the max number of bytes to process in the input body.
+ *
+ * @return The max number of bytes to process in the input body.
+ */
+ public long getMaxInput() {
+ return maxInput;
+ }
+
+ /**
+ * Returns the list of supported content types.
+ *
+ * @return An unmodifiable list.
+ */
+ public List<MediaType> getSupportedContentTypes() {
+ return supportedContentTypes;
+ }
+
+ /**
+ * Returns a list of supported accept types.
+ *
+ * @return An unmodifiable list.
+ */
+ public List<MediaType> getSupportedAcceptTypes() {
+ return supportedAcceptTypes;
+ }
+
+ /**
+ * Returns the response bean meta if this method returns a {@link
Response}-annotated bean.
+ *
+ * @return The response bean meta or <jk>null</jk> if it's not a {@link
Response}-annotated bean.
+ */
+ public ResponseBeanMeta getResponseMeta() {
+ return responseMeta;
}
/**
@@ -1712,14 +1833,6 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
}
}
- private UrlPathMatch matchPattern(RestCall call) {
- UrlPathMatch pm = null;
- for (UrlPathMatcher pp : pathMatchers)
- if (pm == null)
- pm = pp.match(call.getUrlPath());
- return pm;
- }
-
/**
* Workhorse method.
*
@@ -1871,88 +1984,6 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
return 0;
}
- /**
- * Bean property getter: <property>serializers</property>.
- *
- * @return The value of the <property>serializers</property> property
on this bean, or <jk>null</jk> if it is not set.
- */
- public SerializerGroup getSerializers() {
- return serializers;
- }
-
- /**
- * Bean property getter: <property>parsers</property>.
- *
- * @return The value of the <property>parsers</property> property on
this bean, or <jk>null</jk> if it is not set.
- */
- public ParserGroup getParsers() {
- return parsers;
- }
-
- /**
- * Bean property getter: <property>partSerializer</property>.
- *
- * @return The value of the <property>partSerializer</property>
property on this bean, or <jk>null</jk> if it is not set.
- */
- public HttpPartSerializer getPartSerializer() {
- return partSerializer;
- }
-
- /**
- * Bean property getter: <property>partParser</property>.
- *
- * @return The value of the <property>partParser</property> property on
this bean, or <jk>null</jk> if it is not set.
- */
- public HttpPartParser getPartParser() {
- return partParser;
- }
-
- /**
- * Returns the JSON-Schema generator applicable to this Java method.
- *
- * @return The JSON-Schema generator applicable to this Java method.
- */
- public JsonSchemaGenerator getJsonSchemaGenerator() {
- return jsonSchemaGenerator;
- }
-
- /**
- * Returns the underlying Java method that this context belongs to.
- *
- * @return The underlying Java method that this context belongs to.
- */
- public Method getJavaMethod() {
- return method;
- }
-
- Optional<List<MediaType>> supportedAcceptTypes() {
- return Optional.of(supportedAcceptTypes);
- }
-
- Optional<List<MediaType>> supportedContentTypes() {
- return Optional.of(supportedContentTypes);
- }
-
- Optional<ContextProperties> contextProperties() {
- return Optional.of(getContextProperties());
- }
-
- Optional<String> defaultCharset() {
- return Optional.of(defaultCharset);
- }
-
- Optional<NameValuePair[]> defaultRequestFormData() {
- return Optional.of(defaultRequestFormData);
- }
-
- Optional<SerializerGroup> serializers() {
- return Optional.of(serializers);
- }
-
- Optional<ParserGroup> parsers() {
- return Optional.of(parsers);
- }
-
@Override /* Object */
public boolean equals(Object o) {
return (o instanceof RestOperationContext) && eq(this,
(RestOperationContext)o, (x,y)->x.method.equals(y.method));
@@ -1964,22 +1995,6 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
}
//-----------------------------------------------------------------------------------------------------------------
- // Utility methods.
-
//-----------------------------------------------------------------------------------------------------------------
-
- static String[] resolveVars(VarResolver vr, String[] in) {
- String[] out = new String[in.length];
- for (int i = 0; i < in.length; i++)
- out[i] = vr.resolve(in[i]);
- return out;
- }
-
- static HttpPartSerializer createPartSerializer(Class<? extends
HttpPartSerializer> c, ContextProperties cp, HttpPartSerializer _default) {
- HttpPartSerializer hps = castOrCreate(HttpPartSerializer.class,
c, true, cp);
- return hps == null ? _default : hps;
- }
-
-
//-----------------------------------------------------------------------------------------------------------------
// Other methods.
//-----------------------------------------------------------------------------------------------------------------
@@ -1998,4 +2013,28 @@ public class RestOperationContext extends BeanContext
implements Comparable<Rest
.a("priority", priority)
);
}
+
+
//-----------------------------------------------------------------------------------------------------------------
+ // Helper methods.
+
//-----------------------------------------------------------------------------------------------------------------
+
+ private static HttpPartSerializer createPartSerializer(Class<? extends
HttpPartSerializer> c, ContextProperties cp, HttpPartSerializer _default) {
+ HttpPartSerializer hps = castOrCreate(HttpPartSerializer.class,
c, true, cp);
+ return hps == null ? _default : hps;
+ }
+
+ private String joinnlFirstNonEmptyArray(String[]...s) {
+ for (String[] ss : s)
+ if (ss.length > 0)
+ return joinnl(ss);
+ return null;
+ }
+
+ private UrlPathMatch matchPattern(RestCall call) {
+ UrlPathMatch pm = null;
+ for (UrlPathMatcher pp : pathMatchers)
+ if (pm == null)
+ pm = pp.match(call.getUrlPath());
+ return pm;
+ }
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContextBuilder.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContextBuilder.java
index 841c8db..f604d40 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContextBuilder.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperationContextBuilder.java
@@ -70,7 +70,7 @@ public class RestOperationContextBuilder extends
BeanContextBuilder {
this.restContext = context;
this.restMethod = method;
- this.beanFactory = context.rootBeanFactory;
+ this.beanFactory = context.getRootBeanFactory();
String sig = method.getDeclaringClass().getName() + '.' +
method.getName();
MethodInfo mi = MethodInfo.of(context.getResourceClass(),
method);
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
index c4d016c..d66a0ae 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -197,28 +197,28 @@ public final class RestRequest extends
HttpServletRequestWrapper {
*/
final void init(RestOperationContext roc) throws IOException {
this.opContext = Optional.of(roc);
- this.javaMethod = roc.method;
+ this.javaMethod = roc.getJavaMethod();
this.beanSession = roc.createSession();
- this.partParserSession =
roc.partParser.createPartSession(getParserSessionArgs());
- this.partSerializerSession =
roc.partSerializer.createPartSession(getSerializerSessionArgs());
+ this.partParserSession =
roc.getPartParser().createPartSession(getParserSessionArgs());
+ this.partSerializerSession =
roc.getPartSerializer().createPartSession(getSerializerSessionArgs());
this.pathParams
.parser(partParserSession);
this.queryParams
- .addDefault(roc.defaultRequestQuery)
+ .addDefault(roc.getDefaultRequestQuery())
.parser(partParserSession);
this.headers
- .addDefault(roc.defaultRequestHeaders)
- .addDefault(context.defaultRequestHeaders)
+ .addDefault(roc.getDefaultRequestHeaders())
+ .addDefault(context.getDefaultRequestHeaders())
.parser(partParserSession);
this.attrs = new RequestAttributes(this);
this.attrs
- .addDefault(roc.defaultRequestAttributes)
- .addDefault(context.defaultRequestAttributes);
+ .addDefault(roc.getDefaultRequestAttributes())
+ .addDefault(context.getDefaultRequestAttributes());
this.body
- .encoders(roc.encoders)
- .parsers(roc.parsers)
+ .encoders(roc.getEncoders())
+ .parsers(roc.getParsers())
.headers(headers)
- .maxInput(roc.maxInput);
+ .maxInput(roc.getMaxInput());
if (isDebug()) {
inner = CachingHttpServletRequest.wrap(inner);
@@ -311,7 +311,7 @@ public final class RestRequest extends
HttpServletRequestWrapper {
* @return The set of media types registered in the serializer group of
this request.
*/
public List<MediaType> getProduces() {
- return
opContext.flatMap(RestOperationContext::supportedAcceptTypes).orElse(emptyList());
+ return opContext.isPresent() ?
opContext.get().getSupportedAcceptTypes() : emptyList();
}
/**
@@ -320,7 +320,7 @@ public final class RestRequest extends
HttpServletRequestWrapper {
* @return The set of media types registered in the parser group of
this request.
*/
public List<MediaType> getConsumes() {
- return
opContext.flatMap(RestOperationContext::supportedContentTypes).orElse(emptyList());
+ return opContext.isPresent() ?
opContext.get().getSupportedContentTypes() : emptyList();
}
/**
@@ -334,7 +334,7 @@ public final class RestRequest extends
HttpServletRequestWrapper {
* <br>Never <jk>null</jk>.
*/
public ContextProperties getContextProperties() {
- return
opContext.flatMap(RestOperationContext::contextProperties).orElse(ContextProperties.DEFAULT);
+ return opContext.isPresent() ?
opContext.get().getContextProperties() : ContextProperties.DEFAULT;
}
/**
@@ -360,8 +360,8 @@ public final class RestRequest extends
HttpServletRequestWrapper {
if (i > 0)
charset = h.substring(i+9).trim();
}
- if (charset == null)
- charset =
opContext.flatMap(RestOperationContext::defaultCharset).orElse(null);
+ if (charset == null && opContext.isPresent())
+ charset = opContext.get().getDefaultCharset();
if (charset == null)
charset = "UTF-8";
if (! Charset.isSupported(charset))
@@ -610,7 +610,8 @@ public final class RestRequest extends
HttpServletRequestWrapper {
}
}
}
-
formData.addDefault(opContext.flatMap(RestOperationContext::defaultRequestFormData).orElse(new
NameValuePair[0]));
+ if (opContext.isPresent())
+
formData.addDefault(opContext.get().getDefaultRequestFormData());
return formData;
} catch (Exception e) {
throw new InternalServerError(e);
@@ -925,7 +926,7 @@ public final class RestRequest extends
HttpServletRequestWrapper {
* @return The serializers associated with this request.
*/
public SerializerGroup getSerializers() {
- return
opContext.flatMap(RestOperationContext::serializers).orElse(SerializerGroup.EMPTY);
+ return opContext.isPresent() ? opContext.get().getSerializers()
: SerializerGroup.EMPTY;
}
/**
@@ -938,7 +939,7 @@ public final class RestRequest extends
HttpServletRequestWrapper {
* @return The parsers associated with this request.
*/
public ParserGroup getParsers() {
- return
opContext.flatMap(RestOperationContext::parsers).orElse(ParserGroup.EMPTY);
+ return opContext.isPresent() ? opContext.get().getParsers() :
ParserGroup.EMPTY;
}
/**
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
index 6e8a35f..ec39800 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
@@ -106,11 +106,11 @@ public final class RestResponse extends
HttpServletResponseWrapper {
String h = request.getHeader("accept-charset");
String charset = null;
if (h == null)
- charset = roc.defaultCharset;
+ charset = roc.getDefaultCharset();
else for (StringRange r : StringRanges.of(h).getRanges()) {
if (r.getQValue() > 0) {
if (r.getName().equals("*"))
- charset = roc.defaultCharset;
+ charset = roc.getDefaultCharset();
else if (Charset.isSupported(r.getName()))
charset = r.getName();
if (charset != null)
@@ -118,16 +118,16 @@ public final class RestResponse extends
HttpServletResponseWrapper {
}
}
- for (Header e : request.getContext().defaultResponseHeaders)
+ for (Header e :
request.getContext().getDefaultResponseHeaders())
setHeaderSafe(e.getName(), stringify(e.getValue()));
- for (Header e : roc.defaultResponseHeaders)
+ for (Header e : roc.getDefaultResponseHeaders())
setHeaderSafe(e.getName(), stringify(e.getValue()));
if (charset == null)
throw new NotAcceptable("No supported charsets in
header ''Accept-Charset'': ''{0}''", request.getHeader("Accept-Charset"));
super.setCharacterEncoding(charset);
- this.responseMeta = roc.responseMeta;
+ this.responseMeta = roc.getResponseMeta();
}
/**
@@ -140,7 +140,7 @@ public final class RestResponse extends
HttpServletResponseWrapper {
* @return The serializer group for the response.
*/
public SerializerGroup getSerializers() {
- return opContext == null ? SerializerGroup.EMPTY :
opContext.serializers;
+ return opContext == null ? SerializerGroup.EMPTY :
opContext.getSerializers();
}
/**
@@ -149,7 +149,7 @@ public final class RestResponse extends
HttpServletResponseWrapper {
* @return The set of media types registered in the parser group of
this request.
*/
public List<MediaType> getSupportedMediaTypes() {
- return opContext == null ? Collections.<MediaType>emptyList() :
opContext.supportedAcceptTypes;
+ return opContext == null ? Collections.<MediaType>emptyList() :
opContext.getSupportedAcceptTypes();
}
/**
@@ -159,7 +159,7 @@ public final class RestResponse extends
HttpServletResponseWrapper {
* @return The set of media types registered in the parser group of
this request.
*/
public List<String> getSupportedEncodings() {
- return opContext == null ? Collections.<String>emptyList() :
opContext.encoders.getSupportedEncodings();
+ return opContext == null ? Collections.<String>emptyList() :
opContext.getEncoders().getSupportedEncodings();
}
/**
@@ -285,7 +285,7 @@ public final class RestResponse extends
HttpServletResponseWrapper {
public FinishableServletOutputStream getNegotiatedOutputStream() throws
NotAcceptable, IOException {
if (os == null) {
Encoder encoder = null;
- EncoderGroup encoders = opContext == null ?
EncoderGroup.DEFAULT : opContext.encoders;
+ EncoderGroup encoders = opContext == null ?
EncoderGroup.DEFAULT : opContext.getEncoders();
String ae = request.getHeader("Accept-Encoding");
if (! (ae == null || ae.isEmpty())) {
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
index 27c44bf..c3771a5 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
@@ -88,7 +88,7 @@ public abstract class RestServlet extends HttpServlet {
*/
protected void setContext(RestContext context) throws ServletException {
if (this.context.get() == null) {
- super.init(context.builder);
+ super.init(context.getBuilder());
this.context.set(context);
}
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RrpcRestOperationContext.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RrpcRestOperationContext.java
index c7431db..82cdf13 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RrpcRestOperationContext.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RrpcRestOperationContext.java
@@ -41,10 +41,10 @@ public class RrpcRestOperationContext extends
RestOperationContext {
public RrpcRestOperationContext(RestOperationContextBuilder builder)
throws ServletException {
super(builder);
- ClassMeta<?> interfaceClass =
getClassMeta(mi.inner().getGenericReturnType());
+ ClassMeta<?> interfaceClass =
getClassMeta(getJavaMethod().getGenericReturnType());
meta = new RrpcInterfaceMeta(interfaceClass.getInnerClass(),
null);
if (meta.getMethodsByPath().isEmpty())
- throw new InternalServerError("Method {0} returns an
interface {1} that doesn't define any remote methods.", mi.getSignature(),
interfaceClass.getFullName());
+ throw new InternalServerError("Method {0} returns an
interface {1} that doesn't define any remote methods.",
getJavaMethod().getName(), interfaceClass.getFullName());
}