Unable to validate query parameters against predefined yaml file using json schema validator

Viewed 44

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:

  1. 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);
                        }
                    }));
    
  2. 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)
    
  3. 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

enter image description here

0 Answers
Related