Search in sources :

Example 1 with JsonSchemaReader

use of org.leadpony.justify.api.JsonSchemaReader in project selenium_java by sergueik.

the class Validate method validateSchemaAt.

/**
 * Reads and validates a JSON schema.
 *
 * @param location the location of the JSON schema to be read and validated.
 * @return the schema read if successful, or {@code null} if errors occcured.
 */
private JsonSchema validateSchemaAt(Location location) {
    JsonSchemaReaderFactory factory = createSchemaReaderFactory();
    try (JsonSchemaReader reader = factory.createSchemaReader(openSchema(location))) {
        JsonSchema schema = reader.read();
        console.withColor(Color.SUCCESS).print(SCHEMA_VALID, location);
        return schema;
    } catch (JsonValidatingException e) {
        List<Problem> problems = e.getProblems();
        problemPrinter.handleProblems(problems);
        console.withColor(Color.DANGER).print(SCHEMA_INVALID, location, Problems.countLeast(problems));
        setStatus(Status.INVALID);
        return null;
    } catch (JsonParsingException e) {
        console.withColor(Color.DANGER).print(SCHEMA_MALFORMED, e);
        setStatus(Status.INVALID);
        return null;
    } catch (JsonException e) {
        throw new CommandException(e);
    }
}
Also used : JsonValidatingException(org.leadpony.justify.api.JsonValidatingException) JsonException(javax.json.JsonException) JsonSchemaReader(org.leadpony.justify.api.JsonSchemaReader) JsonSchema(org.leadpony.justify.api.JsonSchema) ArrayList(java.util.ArrayList) List(java.util.List) JsonSchemaReaderFactory(org.leadpony.justify.api.JsonSchemaReaderFactory) JsonParsingException(javax.json.stream.JsonParsingException)

Example 2 with JsonSchemaReader

use of org.leadpony.justify.api.JsonSchemaReader in project zilla by aklivity.

the class ConfigureTask method call.

@Override
public Void call() throws Exception {
    String configText;
    if (configURL == null) {
        configText = "{\"name\":\"default\"}";
    } else if ("https".equals(configURL.getProtocol()) || "https".equals(configURL.getProtocol())) {
        HttpClient client = HttpClient.newBuilder().version(HTTP_2).followRedirects(NORMAL).build();
        HttpRequest request = HttpRequest.newBuilder().GET().uri(configURL.toURI()).build();
        HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
        String body = response.body();
        configText = body;
    } else {
        URLConnection connection = configURL.openConnection();
        try (InputStream input = connection.getInputStream()) {
            configText = new String(input.readAllBytes(), UTF_8);
        }
    }
    if (config.configSyntaxMustache()) {
        configText = Mustache.resolve(configText, System::getenv);
    }
    logger.accept(configText);
    List<String> errors = new LinkedList<>();
    parse: try {
        InputStream schemaInput = Engine.class.getResourceAsStream("internal/schema/engine.schema.json");
        JsonProvider schemaProvider = JsonProvider.provider();
        JsonReader schemaReader = schemaProvider.createReader(schemaInput);
        JsonObject schemaObject = schemaReader.readObject();
        for (URL schemaType : schemaTypes) {
            InputStream schemaPatchInput = schemaType.openStream();
            JsonReader schemaPatchReader = schemaProvider.createReader(schemaPatchInput);
            JsonArray schemaPatchArray = schemaPatchReader.readArray();
            JsonPatch schemaPatch = schemaProvider.createPatch(schemaPatchArray);
            schemaObject = schemaPatch.apply(schemaObject);
        }
        JsonParser schemaParser = schemaProvider.createParserFactory(null).createParser(new StringReader(schemaObject.toString()));
        JsonValidationService service = JsonValidationService.newInstance();
        ProblemHandler handler = service.createProblemPrinter(errors::add);
        JsonSchemaReader reader = service.createSchemaReader(schemaParser);
        JsonSchema schema = new UniquePropertyKeysSchema(reader.read());
        JsonProvider provider = service.createJsonProvider(schema, parser -> handler);
        provider.createReader(new StringReader(configText)).read();
        if (!errors.isEmpty()) {
            break parse;
        }
        JsonbConfig config = new JsonbConfig().withAdapters(new NamespaceAdapter());
        Jsonb jsonb = JsonbBuilder.newBuilder().withProvider(provider).withConfig(config).build();
        NamespaceConfig namespace = jsonb.fromJson(configText, NamespaceConfig.class);
        if (!errors.isEmpty()) {
            break parse;
        }
        namespace.id = supplyId.applyAsInt(namespace.name);
        for (BindingConfig binding : namespace.bindings) {
            binding.id = NamespacedId.id(namespace.id, supplyId.applyAsInt(binding.entry));
            if (binding.vault != null) {
                binding.vault.id = NamespacedId.id(supplyId.applyAsInt(ofNullable(binding.vault.namespace).orElse(namespace.name)), supplyId.applyAsInt(binding.vault.name));
            }
            // TODO: consider route exit namespace
            for (RouteConfig route : binding.routes) {
                route.id = NamespacedId.id(namespace.id, supplyId.applyAsInt(route.exit));
            }
            // TODO: consider binding exit namespace
            if (binding.exit != null) {
                binding.exit.id = NamespacedId.id(namespace.id, supplyId.applyAsInt(binding.exit.exit));
            }
            tuning.affinity(binding.id, tuning.affinity(binding.id));
        }
        for (VaultConfig vault : namespace.vaults) {
            vault.id = NamespacedId.id(namespace.id, supplyId.applyAsInt(vault.name));
        }
        CompletableFuture<Void> future = CompletableFuture.completedFuture(null);
        for (DispatchAgent dispatcher : dispatchers) {
            future = CompletableFuture.allOf(future, dispatcher.attach(namespace));
        }
        future.join();
        extensions.forEach(e -> e.onConfigured(context));
    } catch (Throwable ex) {
        errorHandler.onError(ex);
    }
    if (!errors.isEmpty()) {
        errors.forEach(msg -> errorHandler.onError(new JsonException(msg)));
    }
    return null;
}
Also used : JsonSchemaReader(org.leadpony.justify.api.JsonSchemaReader) ErrorHandler(org.agrona.ErrorHandler) BodyHandlers(java.net.http.HttpResponse.BodyHandlers) EngineExtContext(io.aklivity.zilla.runtime.engine.ext.EngineExtContext) URL(java.net.URL) Engine(io.aklivity.zilla.runtime.engine.Engine) NamespaceConfig(io.aklivity.zilla.runtime.engine.config.NamespaceConfig) Callable(java.util.concurrent.Callable) CompletableFuture(java.util.concurrent.CompletableFuture) EngineConfiguration(io.aklivity.zilla.runtime.engine.EngineConfiguration) HttpRequest(java.net.http.HttpRequest) Jsonb(jakarta.json.bind.Jsonb) UniquePropertyKeysSchema(io.aklivity.zilla.runtime.engine.internal.registry.json.UniquePropertyKeysSchema) URLConnection(java.net.URLConnection) RouteConfig(io.aklivity.zilla.runtime.engine.config.RouteConfig) JsonObject(jakarta.json.JsonObject) Mustache(io.aklivity.zilla.runtime.engine.internal.util.Mustache) HttpClient(java.net.http.HttpClient) JsonException(jakarta.json.JsonException) JsonReader(jakarta.json.JsonReader) LinkedList(java.util.LinkedList) JsonSchema(org.leadpony.justify.api.JsonSchema) ProblemHandler(org.leadpony.justify.api.ProblemHandler) HttpResponse(java.net.http.HttpResponse) JsonbBuilder(jakarta.json.bind.JsonbBuilder) JsonbConfig(jakarta.json.bind.JsonbConfig) HTTP_2(java.net.http.HttpClient.Version.HTTP_2) JsonProvider(jakarta.json.spi.JsonProvider) JsonParser(jakarta.json.stream.JsonParser) UTF_8(java.nio.charset.StandardCharsets.UTF_8) Optional.ofNullable(java.util.Optional.ofNullable) Tuning(io.aklivity.zilla.runtime.engine.internal.Tuning) Collection(java.util.Collection) ToIntFunction(java.util.function.ToIntFunction) NORMAL(java.net.http.HttpClient.Redirect.NORMAL) EngineExtSpi(io.aklivity.zilla.runtime.engine.ext.EngineExtSpi) BindingConfig(io.aklivity.zilla.runtime.engine.config.BindingConfig) Consumer(java.util.function.Consumer) List(java.util.List) JsonPatch(jakarta.json.JsonPatch) VaultConfig(io.aklivity.zilla.runtime.engine.config.VaultConfig) StringReader(java.io.StringReader) JsonValidationService(org.leadpony.justify.api.JsonValidationService) NamespaceAdapter(io.aklivity.zilla.runtime.engine.internal.config.NamespaceAdapter) NamespacedId(io.aklivity.zilla.runtime.engine.internal.stream.NamespacedId) JsonArray(jakarta.json.JsonArray) InputStream(java.io.InputStream) NamespaceConfig(io.aklivity.zilla.runtime.engine.config.NamespaceConfig) JsonException(jakarta.json.JsonException) NamespaceAdapter(io.aklivity.zilla.runtime.engine.internal.config.NamespaceAdapter) JsonSchema(org.leadpony.justify.api.JsonSchema) JsonObject(jakarta.json.JsonObject) UniquePropertyKeysSchema(io.aklivity.zilla.runtime.engine.internal.registry.json.UniquePropertyKeysSchema) JsonProvider(jakarta.json.spi.JsonProvider) URL(java.net.URL) VaultConfig(io.aklivity.zilla.runtime.engine.config.VaultConfig) ProblemHandler(org.leadpony.justify.api.ProblemHandler) Jsonb(jakarta.json.bind.Jsonb) CompletableFuture(java.util.concurrent.CompletableFuture) JsonValidationService(org.leadpony.justify.api.JsonValidationService) StringReader(java.io.StringReader) JsonReader(jakarta.json.JsonReader) Engine(io.aklivity.zilla.runtime.engine.Engine) JsonParser(jakarta.json.stream.JsonParser) HttpRequest(java.net.http.HttpRequest) InputStream(java.io.InputStream) HttpResponse(java.net.http.HttpResponse) RouteConfig(io.aklivity.zilla.runtime.engine.config.RouteConfig) JsonPatch(jakarta.json.JsonPatch) URLConnection(java.net.URLConnection) LinkedList(java.util.LinkedList) JsonArray(jakarta.json.JsonArray) JsonbConfig(jakarta.json.bind.JsonbConfig) JsonSchemaReader(org.leadpony.justify.api.JsonSchemaReader) BindingConfig(io.aklivity.zilla.runtime.engine.config.BindingConfig) HttpClient(java.net.http.HttpClient)

Example 3 with JsonSchemaReader

use of org.leadpony.justify.api.JsonSchemaReader in project zilla by aklivity.

the class ConfigSchemaRule method apply.

@Override
public Statement apply(Statement base, Description description) {
    Objects.requireNonNull(schemaName, "schema");
    schemaPatchNames.forEach(n -> Objects.requireNonNull(n, "schemaPatch"));
    Function<String, InputStream> findResource = description.getTestClass().getClassLoader()::getResourceAsStream;
    InputStream schemaInput = findResource.apply(schemaName);
    JsonProvider schemaProvider = JsonProvider.provider();
    JsonReader schemaReader = schemaProvider.createReader(schemaInput);
    JsonObject schemaObject = schemaReader.readObject();
    for (String schemaPatchName : schemaPatchNames) {
        InputStream schemaPatchInput = findResource.apply(schemaPatchName);
        Objects.requireNonNull(schemaPatchInput, "schemaPatch");
        JsonReader schemaPatchReader = schemaProvider.createReader(schemaPatchInput);
        JsonArray schemaPatchArray = schemaPatchReader.readArray();
        JsonPatch schemaPatch = schemaProvider.createPatch(schemaPatchArray);
        schemaObject = schemaPatch.apply(schemaObject);
    }
    JsonParser schemaParser = schemaProvider.createParserFactory(null).createParser(new StringReader(schemaObject.toString()));
    JsonValidationService service = JsonValidationService.newInstance();
    ProblemHandler handler = service.createProblemPrinter(msg -> rethrowUnchecked(new JsonException(msg)));
    JsonSchemaReader reader = service.createSchemaReader(schemaParser);
    JsonSchema schema = reader.read();
    provider = service.createJsonProvider(schema, parser -> handler);
    if (configurationRoot != null) {
        String configFormat = String.format("%s/%%s", configurationRoot);
        findConfig = configName -> findResource.apply(String.format(configFormat, configName));
    } else {
        Class<?> testClass = description.getTestClass();
        String configFormat = String.format("%s-%%s", testClass.getSimpleName());
        findConfig = configName -> testClass.getResourceAsStream(String.format(configFormat, configName));
    }
    return base;
}
Also used : JsonException(jakarta.json.JsonException) Statement(org.junit.runners.model.Statement) JsonSchemaReader(org.leadpony.justify.api.JsonSchemaReader) JsonProvider(jakarta.json.spi.JsonProvider) JsonParser(jakarta.json.stream.JsonParser) LangUtil.rethrowUnchecked(org.agrona.LangUtil.rethrowUnchecked) TestRule(org.junit.rules.TestRule) Description(org.junit.runner.Description) Function(java.util.function.Function) ArrayList(java.util.ArrayList) Objects(java.util.Objects) List(java.util.List) JsonPatch(jakarta.json.JsonPatch) StringReader(java.io.StringReader) JsonObject(jakarta.json.JsonObject) JsonValidationService(org.leadpony.justify.api.JsonValidationService) JsonException(jakarta.json.JsonException) JsonReader(jakarta.json.JsonReader) JsonArray(jakarta.json.JsonArray) JsonSchema(org.leadpony.justify.api.JsonSchema) ProblemHandler(org.leadpony.justify.api.ProblemHandler) InputStream(java.io.InputStream) InputStream(java.io.InputStream) JsonSchema(org.leadpony.justify.api.JsonSchema) JsonObject(jakarta.json.JsonObject) JsonProvider(jakarta.json.spi.JsonProvider) JsonPatch(jakarta.json.JsonPatch) JsonArray(jakarta.json.JsonArray) ProblemHandler(org.leadpony.justify.api.ProblemHandler) JsonValidationService(org.leadpony.justify.api.JsonValidationService) JsonSchemaReader(org.leadpony.justify.api.JsonSchemaReader) StringReader(java.io.StringReader) JsonReader(jakarta.json.JsonReader) JsonParser(jakarta.json.stream.JsonParser)

Aggregations

List (java.util.List)3 JsonSchema (org.leadpony.justify.api.JsonSchema)3 JsonSchemaReader (org.leadpony.justify.api.JsonSchemaReader)3 JsonArray (jakarta.json.JsonArray)2 JsonException (jakarta.json.JsonException)2 JsonObject (jakarta.json.JsonObject)2 JsonPatch (jakarta.json.JsonPatch)2 JsonReader (jakarta.json.JsonReader)2 JsonProvider (jakarta.json.spi.JsonProvider)2 JsonParser (jakarta.json.stream.JsonParser)2 InputStream (java.io.InputStream)2 StringReader (java.io.StringReader)2 ArrayList (java.util.ArrayList)2 JsonValidationService (org.leadpony.justify.api.JsonValidationService)2 ProblemHandler (org.leadpony.justify.api.ProblemHandler)2 Engine (io.aklivity.zilla.runtime.engine.Engine)1 EngineConfiguration (io.aklivity.zilla.runtime.engine.EngineConfiguration)1 BindingConfig (io.aklivity.zilla.runtime.engine.config.BindingConfig)1 NamespaceConfig (io.aklivity.zilla.runtime.engine.config.NamespaceConfig)1 RouteConfig (io.aklivity.zilla.runtime.engine.config.RouteConfig)1