Как предотвратить, чтобы запрос REST Assured POST отбрасывал тег объявления XML при использовании содержимого XML в качестве тела запроса? - PullRequest
0 голосов
/ 20 сентября 2019

Я использую REST Assured для проверки загрузки файла XML в базу данных.Внутренний код хорошо написан и ошибок нет.Я создаю запрос, используя REST Assured следующим образом (метод .body () из класса RequestSpecification REST Assured, который расширяет класс RequestSender).

response = TestSuite.buildRequest()
            .contentType("text/xml")
            .header("header1")
            .accept("application/json")
            .body(uploadPayload)
            .post(uploadPath)

uploadPayload представляет собой содержимое файла XML с XMLтег объявления.Вот пример содержимого файла:

<?xml version="1.0" encoding="UTF-8" ?>
<CATALOG>
    <CD>
        <TITLE>Empire Burlesque</TITLE>
        <ARTIST>Bob Dylan</ARTIST>
        <COUNTRY>USA</COUNTRY>
        <COMPANY>Columbia</COMPANY>
        <PRICE>10.90</PRICE>
        <YEAR>1985</YEAR>
    </CD>
</CATALOG>

Это содержимое читается из файла в каталоге проекта, это метод, который я использую для чтения содержимого этого файла, и он читает весь файл со всем форматированием.

public static String getFileContent(File file) {

    if (file == null) return

    String s = ""

    try {
        FileReader reader = new FileReader(file)
        BufferedReader br = new BufferedReader(reader)

        String line
        while ((line = br.readLine()) != null) {
            s = s + line + "\n"
        }
        return s
    } catch (IOException e) {
        throw new IOException("Error getting file content from file.", e)
    }
}

Я добавляю полученное содержимое файла в качестве тела запроса (переменная uploadPath вышеупомянутого запроса) и отправляю запрос.Но когда тест выполняется, тело отображается в результатах без тега объявления XML.Но когда я печатаю содержимое, тег появляется.Вот как тело отображается в результатах теста (без тега объявления XML).

<CATALOG>
    <CD>
        <TITLE>Empire Burlesque</TITLE>
        <ARTIST>Bob Dylan</ARTIST>
        <COUNTRY>USA</COUNTRY>
        <COMPANY>Columbia</COMPANY>
        <PRICE>10.90</PRICE>
        <YEAR>1985</YEAR>
    </CD>
</CATALOG>

Мне нужно получить все тело (включая тег объявления) для запроса.Но по какой-то причине он отбрасывается при получении его в теле запроса.Может ли кто-нибудь рассказать, почему и как преодолеть эту проблему?Ваше мнение очень ценится.Спасибо.

1 Ответ

0 голосов
/ 22 сентября 2019

Проведя некоторые исследования по этому вопросу, я обнаружил, что тег объявления XML отбрасывается из-за типа содержимого, используемого в запросе (text / xml).Эта ссылка о разнице между application / xml и text / xml объясняет это ясно и просто.

Цитируя ссылку,

"В соответствии со стандартом типы text / * - MIME имеют набор символов us-ascii, если в заголовках HTTP не указано иное. Это фактически означает, что любая кодировка определенав прологе XML игнорируется. Это, конечно, не ожидаемое и не желаемое поведение. "

...