I need to validate query parameter's schema against pre defined yaml file schema, so I using the json schema validator. How ever validation is getting failed.
I am following the below steps:
Populate parameter and corresponding schema.
final List<Parameter> parameters = openAPI.getPaths().get(requestPath).getGet().getParameters() .stream().filter(parameter -> Objects.nonNull(parameter.getIn()) && parameter.getIn().equalsIgnoreCase("query")) .collect(Collectors.toList()); final Map<Parameter, JsonNode> parameterAndSchema = parameters.stream().collect(Collectors.toMap(Function.identity(), parameter -> { JsonNode parameterSchema; try { final Schema schema = parameter.getSchema(); parameterSchema = mapper.readTree(objectWriter.writeValueAsString(schema)); return parameterSchema; } catch (JsonProcessingException e) { throw new RuntimeException(e); } }));create queryParameterSchema to validate query parameter against its corresponding schema prepared at step number 1:
Hard coded query parameters for testing
final Map<String,String> queryParameterMap = Map.of("test-parameter", "testValue1"); JsonNode queryParameterSchema = new ObjectMapper() .readTree(queryParameterMap,JsonNode.class)Convert step 1 schema (prepared from yaml) into JsonSchema as below:
JsonSchemaFactory schemaFactory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V7); SchemaValidatorsConfig config = new SchemaValidatorsConfig(); config.setTypeLoose(true); config.setFailFast(false); JsonSchema jsonSchema = schemaFactory.getSchema(schema, config); processingReport = jsonSchema.validate(queryParameterSchema , queryParameterSchema , at); Sample yaml file: paths: /test-instances: get: tags: - Instances (Store) summary: Test summary operationId: SearchInstances parameters: - name: test-parameter in: query description: Names of the services offered required: false style: form explode: false schema: type: string
However when I am trying to validate queryParameterSchema against this JsonSchema, TypeValidator is invoked and always returning false as my queryParameterSchema populated at step2 always coming as object node with schema type as OBJECT and validator schema type is coming as String (because its defined as String in yaml),
I think I may have to create queryParameterSchema st step 2 differently but not sure how
