VirtualHost(String defaultHostname, String hostnamePattern,
@Nullable SslContext sslContext, Iterable<ServiceConfig> serviceConfigs,
MediaTypeSet producibleMediaTypes, RejectedPathMappingHandler rejectionHandler,
Function<VirtualHost, Logger> accessLoggerMapper) {
defaultHostname = normalizeDefaultHostname(defaultHostname);
hostnamePattern = normalizeHostnamePattern(hostnamePattern);
ensureHostnamePatternMatchesDefaultHostname(hostnamePattern, defaultHostname);
this.defaultHostname = defaultHostname;
this.hostnamePattern = hostnamePattern;
this.sslContext = validateSslContext(sslContext);
this.producibleMediaTypes = producibleMediaTypes;
requireNonNull(serviceConfigs, "serviceConfigs");
final List<ServiceConfig> servicesCopy = new ArrayList<>();
for (ServiceConfig c : serviceConfigs) {
c = c.build(this);
servicesCopy.add(c);
}
services = Collections.unmodifiableList(servicesCopy);
router = Routers.ofVirtualHost(this, services, rejectionHandler);
if (accessLoggerMapper != null) {
accessLogger = accessLoggerMapper.apply(this);
checkState(accessLogger != null,
"accessLoggerMapper.apply() has returned null for virtual host: %s.", hostnamePattern);
}
}