/** * Binds the specified {@link Service} at the specified {@link PathMapping}. */ public B service(PathMapping pathMapping, Service<HttpRequest, HttpResponse> service) { services.add(new ServiceConfig(pathMapping, service, null)); return self(); }
/** * Binds the specified {@link Service} at the specified {@link PathMapping}. * * @deprecated Use a logging framework integration such as {@code RequestContextExportingAppender} in * {@code armeria-logback}. */ @Deprecated public B service(PathMapping pathMapping, Service<HttpRequest, HttpResponse> service, String loggerName) { services.add(new ServiceConfig(pathMapping, service, loggerName)); return self(); }
ServiceConfig build(VirtualHost virtualHost) { requireNonNull(virtualHost, "virtualHost"); return new ServiceConfig(virtualHost, pathMapping(), service()); }
private VirtualHost normalizeDefaultVirtualHost(VirtualHost h, @Nullable SslContext defaultSslContext) { final SslContext sslCtx = h.sslContext() != null ? h.sslContext() : defaultSslContext; return new VirtualHost( h.defaultHostname(), "*", sslCtx, h.serviceConfigs().stream().map( e -> new ServiceConfig(e.pathMapping(), e.service(), e.loggerName().orElse(null))) .collect(Collectors.toList()), h.producibleMediaTypes(), rejectedPathMappingHandler, host -> h.accessLogger()); }
VirtualHost decorate(@Nullable Function<Service<HttpRequest, HttpResponse>, Service<HttpRequest, HttpResponse>> decorator) { if (decorator == null) { return this; } final List<ServiceConfig> services = this.services.stream().map(cfg -> { final PathMapping pathMapping = cfg.pathMapping(); final Service<HttpRequest, HttpResponse> service = decorator.apply(cfg.service()); final String loggerName = cfg.loggerName().orElse(null); return new ServiceConfig(pathMapping, service, loggerName); }).collect(Collectors.toList()); return new VirtualHost(defaultHostname(), hostnamePattern(), sslContext(), services, producibleMediaTypes()); }
@Test public void servicesTest() { final ServiceConfig helloService = new ServiceConfig( new VirtualHostBuilder().build(), PathMapping.ofExact("/hello"), THttpService.of(mock(AsyncIface.class))); final ServiceConfig fooService = new ServiceConfig( new VirtualHostBuilder().build(), PathMapping.ofExact("/foo"),
new GrpcServiceBuilder().addService(mock(TestServiceImplBase.class)).build(); prefixlessService.pathMappings().forEach( mapping -> serviceCfgs.add(new ServiceConfig(vhost, mapping, prefixlessService))); serviceCfgs.add(new ServiceConfig( new VirtualHostBuilder().build(), PathMapping.ofPrefix("/test"), serviceCfgs.add(new ServiceConfig( new VirtualHostBuilder().build(), PathMapping.ofPrefix("/reconnect"),