All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openapi4j.core.model.v3.OAI3Context Maven / Gradle / Ivy

package org.openapi4j.core.model.v3;

import com.fasterxml.jackson.databind.JsonNode;
import org.openapi4j.core.exception.ResolutionException;
import org.openapi4j.core.model.AuthOption;
import org.openapi4j.core.model.OAIContext;
import org.openapi4j.core.model.reference.ReferenceRegistry;
import org.openapi4j.core.model.reference.ReferenceResolver;

import java.net.URL;
import java.util.List;

import static org.openapi4j.core.model.v3.OAI3SchemaKeywords.$REF;

/**
 * Open API v3 context.
 * 

* This class handles references and base URL. */ public class OAI3Context implements OAIContext { private static final String OPERATION_REF = "operationRef"; private final ReferenceRegistry referenceRegistry; private final URL baseUrl; private final List authOptions; private final JsonNode baseDocument; /** * Creates a context from the given url. * * @param baseUrl The given url. * @throws ResolutionException In case of missing or wrong reference during discovery process. */ public OAI3Context(URL baseUrl) throws ResolutionException { this(baseUrl, null, null); } /** * Creates a context from the given url. * * @param baseUrl The given url. * @param authOptions The authentication values. * @throws ResolutionException In case of missing or wrong reference during discovery process. */ public OAI3Context(URL baseUrl, List authOptions) throws ResolutionException { this(baseUrl, authOptions, null); } /** * Creates a context from the given url. * * @param baseUrl The given url. * @param baseDocument The tree node representing the Open API schema. * @throws ResolutionException In case of missing or wrong reference during discovery process. */ public OAI3Context(URL baseUrl, JsonNode baseDocument) throws ResolutionException { this(baseUrl, null, baseDocument); } /** * Creates a context from the given url. * * @param baseUrl The given url. * @param authOptions The authentication values. * @param baseDocument The tree node representing the Open API schema. * @throws ResolutionException In case of missing or wrong reference during discovery process. */ public OAI3Context(URL baseUrl, List authOptions, JsonNode baseDocument) throws ResolutionException { this.baseUrl = baseUrl; referenceRegistry = new ReferenceRegistry(baseUrl); this.authOptions = authOptions; this.baseDocument = resolveReferences(baseDocument); } /** * {@inheritDoc} */ @Override public ReferenceRegistry getReferenceRegistry() { return referenceRegistry; } /** * {@inheritDoc} */ @Override public JsonNode getBaseDocument() { return baseDocument; } /** * {@inheritDoc} */ @Override public URL getBaseUrl() { return baseUrl; } private JsonNode resolveReferences(JsonNode baseDocument) throws ResolutionException { // Standard JSON references ReferenceResolver resolver = new ReferenceResolver(baseUrl, authOptions, baseDocument, $REF, referenceRegistry); resolver.resolve(); // Mapping JSON references ReferenceRegistry mappingRefsRegistry = new ReferenceRegistry(baseUrl); MappingReferenceResolver mappingResolver = new MappingReferenceResolver(baseUrl, authOptions, baseDocument, mappingRefsRegistry); mappingResolver.resolve(); referenceRegistry.mergeRefs(mappingRefsRegistry); // Links JSON references ReferenceRegistry operationRefsRegistry = new ReferenceRegistry(baseUrl); ReferenceResolver operationResolver = new ReferenceResolver(baseUrl, authOptions, baseDocument, OPERATION_REF, operationRefsRegistry); operationResolver.resolve(); referenceRegistry.mergeRefs(operationRefsRegistry); return resolver.getBaseDocument(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy