use of io.smallrye.openapi.api.OpenApiConfig in project wildfly by wildfly.
the class OpenAPIModelServiceConfigurator method get.
@Override
public OpenAPI get() {
OpenApiConfig config = new OpenApiConfigImpl(this.config);
IndexView indexView = new FilteredIndexView(this.index, config);
OpenAPIDocumentBuilder builder = new OpenAPIDocumentBuilder();
builder.config(config);
Map.Entry<VirtualFile, Format> entry = findStaticFile(this.root);
if (entry != null) {
VirtualFile file = entry.getKey();
Format format = entry.getValue();
try (OpenApiStaticFile staticFile = new OpenApiStaticFile(file.openStream(), format)) {
builder.staticFileModel(OpenApiProcessor.modelFromStaticFile(staticFile));
} catch (IOException e) {
throw MicroProfileOpenAPILogger.LOGGER.failedToLoadStaticFile(e, file.getPathNameRelativeTo(this.root), this.deploymentName);
}
}
builder.annotationsModel(OpenApiProcessor.modelFromAnnotations(config, AnnotationScanner.class.getClassLoader(), indexView));
builder.readerModel(OpenApiProcessor.modelFromReader(config, this.module.getClassLoader()));
builder.filter(OpenApiProcessor.getFilter(config, this.module.getClassLoader()));
OpenAPI model = builder.build();
// Generate default title and description based on web metadata
DescriptionGroupMetaData descriptionMetaData = this.metaData.getDescriptionGroup();
String displayName = (descriptionMetaData != null) ? descriptionMetaData.getDisplayName() : null;
String title = (displayName != null) ? displayName : this.deploymentName;
String description = (descriptionMetaData != null) ? descriptionMetaData.getDescription() : null;
Info info = model.getInfo();
// Override SmallRye's default title
if (info.getTitle().equals(DEFAULT_TITLE)) {
info.setTitle(title);
}
if (info.getDescription() == null) {
info.setDescription(description);
}
Host host = this.host.get();
List<UndertowListener> listeners = host.getServer().getListeners();
if (model.getServers() == null) {
// Generate Server entries if none exist
String contextPath = this.info.get().getContextPath();
if (this.config.getOptionalValue(RELATIVE_SERVER_URLS, Boolean.class).orElse(Boolean.TRUE).booleanValue()) {
model.setServers(Collections.singletonList(OASFactory.createServer().url(contextPath)));
} else {
int aliases = host.getAllAliases().size();
int size = 0;
for (UndertowListener listener : listeners) {
size += aliases + listener.getSocketBinding().getClientMappings().size();
}
List<Server> servers = new ArrayList<>(size);
for (UndertowListener listener : listeners) {
SocketBinding binding = listener.getSocketBinding();
Set<String> virtualHosts = new TreeSet<>(host.getAllAliases());
// The name of the host is not a real virtual host (e.g. default-host)
virtualHosts.remove(host.getName());
InetAddress address = binding.getAddress();
// Omit wildcard addresses
if (!address.isAnyLocalAddress()) {
virtualHosts.add(address.getCanonicalHostName());
}
for (String virtualHost : virtualHosts) {
Server server = createServer(listener.getProtocol(), virtualHost, binding.getPort(), contextPath);
if (server != null) {
servers.add(server);
}
}
for (ClientMapping mapping : binding.getClientMappings()) {
Server server = createServer(listener.getProtocol(), mapping.getDestinationAddress(), mapping.getDestinationPort(), contextPath);
if (server != null) {
servers.add(server);
}
}
}
model.setServers(servers);
}
}
if (listeners.stream().map(UndertowListener::getProtocol).noneMatch(REQUISITE_LISTENERS::contains)) {
LOGGER.requiredListenersNotFound(host.getServer().getName(), REQUISITE_LISTENERS);
}
return model;
}
Aggregations