После обновления версии Swagger проверка не работает должным образом. Как исправить эту проблему?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 После обновления версии Swagger проверка не работает должным образом. Как исправить эту проблему?

Сообщение Anonymous »

В моем сервисе в src/test/java есть файл swagger.yaml, файл Utilities.java и файл error.text. В файле POM были следующие зависимости, а версия Java – 17.

Код: Выделить всё


com.intuit.karate
karate-core
1.4.1


com.intuit.karate
karate-junit5
1.4.1
test


org.json
json
20231013



net.masterthought
cucumber-reporting
5.7.4



com.atlassian.oai
swagger-request-validator-core
2.38.0



io.swagger.core.v3
swagger-models
2.2.21



io.swagger.core.v3
swagger-annotations
2.2.21



io.swagger.core.v3
swagger-core
2.2.21



com.fasterxml.jackson.core
jackson-annotations
2.15.4



com.fasterxml.jackson.core
jackson-databind
2.15.4



com.fasterxml.jackson.core
jackson-core
2.15.4


io.swagger.parser.v3
swagger-parser
2.1.19


com.github.java-json-tools
json-schema-validator
2.2.12



Класс Utilities.java:

Код: Выделить всё

import static com.atlassian.oai.validator.schema.SchemaValidator.ADDITIONAL_PROPERTIES_KEY;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import com.atlassian.oai.validator.report.LevelResolver;
import com.atlassian.oai.validator.report.MessageResolver;
import com.atlassian.oai.validator.report.ValidationReport;
import com.atlassian.oai.validator.report.ValidationReport.Message;
import com.atlassian.oai.validator.schema.SchemaValidator;

import io.swagger.parser.OpenAPIParser;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.parser.core.models.SwaggerParseResult;

public class Utilitties {

public static boolean validation(String response, String Name, String swagPath, String errorPath) {
try {
boolean result = false;
SwaggerParseResult parseResult = new OpenAPIParser().readLocation(swagPath, null, null);
System.out.println("parseResult"  + parseResult);
OpenAPI openAPI = parseResult.getOpenAPI();

if (openAPI == null) {
System.err.println("Failed to load OpenAPI specification from " + swagPath);
return false;
}

final SchemaValidator validator = new SchemaValidator(openAPI, new MessageResolver(LevelResolver.create()
.withLevel(ADDITIONAL_PROPERTIES_KEY, ValidationReport.Level.IGNORE).build()));
Schema schema = new Schema();
schema.set$schema(Name);
ValidationReport rep = validator.validate(response, schema, null);

FileWriter file;
File f = new File(errorPath);
String newLine = System.getProperty("line.seperator");
if (f.exists() && !f.isDirectory()) {
f.delete();
}
file = new FileWriter(errorPath);
if (rep.hasErrors()) {
for (Message msg : rep.getMessages()) {
file.write(msg.toString() + newLine);
}
file.close();
} else {
result = true;
}

// System.out.println("openAPI" +openAPI);
return result;
} catch (IOException e) {
return false;
} catch (Exception e) {
return false;
}
}

public static void main(String[] args) {
String swagPath = "C:\\Users\\abc\\Documents\\Workspace\\org\\src\\test\\java\\orgJava\\swagger.yaml";
String errorPath = "C:\\Users\\abc\\Documents\\Workspace\\org\\src\\test\\java\\orgJava\\error.txt";
String response = "{\r\n" + "  \"id\": \"54321\",\r\n" + "  \"name\": \"Emily Johnson\",\r\n"
+ "  \"email\": \"emily.johnson@example.com\",\r\n" + "  \"age\": 28\r\n" + "}";
String Name = "#/definitions/User";

boolean abc = validation(response, Name, swagPath, errorPath);
System.out.println("abc"  + abc);
}

}

Файл Swagger.yaml:

Код: Выделить всё

---
swagger: '2.0'
info:
version: 1.0.0
title: Sample API
description: A simple API for managing users
basePath: /api/v1
schemes:
- http
paths:
/users:
get:
summary: Retrieve a list of users
description: Returns a list of users from the system
produces:
- application/json
responses:
'200':
description: A list of users
schema:
type: array
items:
$ref: '#/definitions/User'
post:
summary: Create a new user
description: Adds a new user to the system
consumes:
- application/json
parameters:
- in: body
name: user
description: The user to be created
required: true
schema:
$ref: '#/definitions/User'
responses:
'201':
description: User created
schema:
$ref: '#/definitions/User'
'400':
description: Invalid input
/users/{userId}:
get:
summary: Retrieve a specific user
description: Returns a single user by ID
parameters:
- in: path
name: userId
description: ID of the user to retrieve
required: true
type: string
produces:
- application/json
responses:
'200':
description: A user object
schema:
$ref: '#/definitions/User'
'404':
description: User not found
put:
summary: Update a specific user
description: Updates the details of an existing user
parameters:
- in: path
name: userId
description: ID of the user to update
required: true
type: string
- in: body
name: user
description: The updated user details
required: true
schema:
$ref: '#/definitions/User'
responses:
'200':
description: User updated
schema:
$ref: '#/definitions/User'
'400':
description: Invalid input
'404':
description: User not found
delete:
summary: Delete a specific user
description: Deletes a user from the system
parameters:
- in: path
name: userId
description: ID of the user to delete
required: true
type: string
responses:
'204':
description: User deleted
'404':
description: User not found
definitions:
User:
type: object
required:
- id
- name
properties:
id:
type: string
example: '12345'
name:
type: string
example: 'John Doe'
email:
type: string
example: 'john.doe@example.com'
age:
type: integer
example: 30

В классе Java, передав ответ Api, имя определения из файла swagger.yaml, мы выполним проверку и проверим правильность получаемого ответа.
Этот код работает, когда мы использовали версию ядра swagger-request-validator 1.5.1, которая является более старой версией, но когда мы обновляем нашу версию до 2.38.0 или последней, вносятся некоторые изменения. с точки зрения кода, я предполагаю, что это вызывает проблемы компиляции в методе проверки, когда мы передаем строку и модель в качестве входных данных, поэтому в соответствии с требованиями мы изменили код и передали значения String, Schema и String в метод проверки.
Но почему-то код не работает, как будто у меня есть 4 сценария, в которых код должен вернуть false.
  • если вы пройдете правильный ответ и неправильное имя определения, которого нет в файле swagger.yaml
  • если вы передаете неправильный ответ или какой-либо несовпадающий ответ с файлом swagger.yaml, соответствующим переданному вами определению.< /li>
    если вы передадите оба ввода как неправильные.
  • Если вы передадите неверный путь к файлу swagger.
Потому что мы выполняем проверку между ответом и соответствующим определением в файле swagger.yaml.
Однако код не работает, даже когда мы передаем неправильные значения, и он возвращает true.
Я попытался внести соответствующие изменения в код, чтобы исправить эту проблему. Каким-то образом ничего не получилось.
Можете ли вы помочь мне решить эту проблему?
Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/788 ... how-to-fix
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»