in juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java [5451:5558]
public RestContext(Builder builder) throws Exception {
super(builder);
startTime = Instant.now();
REGISTRY.put(builder.resourceClass, this);
BasicHttpException _initException = null;
try {
this.builder = builder;
resourceClass = builder.resourceClass;
resource = builder.resource;
parentContext = builder.parentContext;
rootBeanStore = builder.rootBeanStore();
defaultClasses = builder.defaultClasses();
defaultSettings = builder.defaultSettings();
BeanStore bs = beanStore = builder.beanStore();
beanStore
.addBean(BeanStore.class, beanStore)
.addBean(RestContext.class, this)
.addBean(Object.class, resource.get())
.addBean(DefaultSettingsMap.class, defaultSettings)
.addBean(Builder.class, builder)
.addBean(AnnotationWorkList.class, builder.getApplied());
path = builder.path != null ? builder.path : "";
fullPath = (parentContext == null ? "" : (parentContext.fullPath + '/')) + path;
String p = path;
if (! p.endsWith("/*"))
p += "/*";
pathMatcher = UrlPathMatcher.of(p);
allowContentParam = ! builder.disableContentParam;
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(""));
clientVersionHeader = builder.clientVersionHeader;
defaultCharset = builder.defaultCharset;
maxInput = builder.maxInput;
renderResponseStackTraces = builder.renderResponseStackTraces;
uriContext = builder.uriContext;
uriAuthority = builder.uriAuthority;
uriResolution = builder.uriResolution;
uriRelativity = builder.uriRelativity;
beanContext = bs.add(BeanContext.class, builder.beanContext().build());
encoders = bs.add(EncoderSet.class, builder.encoders().build());
serializers = bs.add(SerializerSet.class, builder.serializers().build());
parsers = bs.add(ParserSet.class, builder.parsers().build());
logger = bs.add(Logger.class, builder.logger());
thrownStore = bs.add(ThrownStore.class, builder.thrownStore().build());
methodExecStore = bs.add(MethodExecStore.class, builder.methodExecStore().thrownStoreOnce(thrownStore).build());
messages = bs.add(Messages.class, builder.messages().build());
varResolver = bs.add(VarResolver.class, builder.varResolver().bean(Messages.class, messages).build());
config = bs.add(Config.class, builder.config().resolving(varResolver.createSession()));
responseProcessors = bs.add(ResponseProcessor[].class, builder.responseProcessors().build().toArray());
callLogger = bs.add(CallLogger.class, builder.callLogger().orElse(null));
partSerializer = bs.add(HttpPartSerializer.class, builder.partSerializer().create());
partParser = bs.add(HttpPartParser.class, builder.partParser().create());
jsonSchemaGenerator = bs.add(JsonSchemaGenerator.class, builder.jsonSchemaGenerator().build());
staticFiles = bs.add(StaticFiles.class, builder.staticFiles().orElse(null));
bs.add(FileFinder.class, staticFiles);
defaultRequestHeaders = bs.add(HeaderList.class, builder.defaultRequestHeaders(), "defaultRequestHeaders");
defaultResponseHeaders = bs.add(HeaderList.class, builder.defaultResponseHeaders(), "defaultResponseHeaders");
defaultRequestAttributes = bs.add(NamedAttributeMap.class, builder.defaultRequestAttributes(), "defaultRequestAttributes");
restOpArgs = builder.restOpArgs().build().asArray();
debugEnablement = bs.add(DebugEnablement.class, builder.debugEnablement().orElse(null));
startCallMethods = builder.startCallMethods().stream().map(this::toMethodInvoker).toArray(MethodInvoker[]::new);
endCallMethods = builder.endCallMethods().stream().map(this::toMethodInvoker).toArray(MethodInvoker[]::new);
postInitMethods = builder.postInitMethods().stream().map(this::toMethodInvoker).toArray(MethodInvoker[]::new);
postInitChildFirstMethods = builder.postInitChildFirstMethods().stream().map(this::toMethodInvoker).toArray(MethodInvoker[]::new);
destroyMethods = builder.destroyMethods().stream().map(this::toMethodInvoker).toArray(MethodInvoker[]::new);
preCallMethods = builder.preCallMethods();
postCallMethods = builder.postCallMethods();
restOperations = builder.restOperations(this).build();
restChildren = builder.restChildren(this).build();
swaggerProvider = bs.add(SwaggerProvider.class, builder.swaggerProvider().orElse(null));
List<RestOpContext> opContexts = restOperations.getOpContexts();
produces = builder.produces().orElseGet(
()->{
Set<MediaType> s = opContexts.isEmpty() ? emptySet() : setFrom(opContexts.get(0).getSerializers().getSupportedMediaTypes());
opContexts.forEach(x -> s.retainAll(x.getSerializers().getSupportedMediaTypes()));
return unmodifiable(listFrom(s));
}
);
consumes = builder.consumes().orElseGet(
()->{
Set<MediaType> s = opContexts.isEmpty() ? emptySet() : setFrom(opContexts.get(0).getParsers().getSupportedMediaTypes());
opContexts.forEach(x -> s.retainAll(x.getParsers().getSupportedMediaTypes()));
return unmodifiable(listFrom(s));
}
);
} catch (BasicHttpException e) {
_initException = e;
throw e;
} catch (Exception e) {
_initException = new InternalServerError(e);
throw e;
} finally {
initException = _initException;
}
}