Ответ SOAP Fault от Wiremock не обнаружен API-Connect 2018 как SOAPFault

Когда я вызываю фактическую службу SOAP (используя Postman и SoapUI) с недопустимым значением параметра, это вызывает ответ SOAP-Fault с HTTP 200.

Я скопировал тело ответа в файл ответов Wiremock, соответствующий файл сопоставления которого возвращает HTTP 200.

Когда я использую Postman для вызова службы SOAP и имитируемой службы, «тело» ответов идентично (кроме заголовков, поскольку в имитируемом ответе они явно не указаны).

Когда мой API вызывает фактическую службу SOAP, SOAPError перехватывается, обработка останавливается, и API обрабатывается, как определено в разделе «catch».

Однако, когда API вызывает фиктивную службу SOAP, ошибка SOAPError не обнаруживается после «вызова», обработка продолжается и дает неверный ответ.

Это говорит о том, что есть что-то «лишнее», возвращенное при ошибке из реальной службы SOAP, которое APIC использует для обнаружения ошибки SOAPError. Что это?

Я бы добавил это к издевательскому ответу, если бы только знал, что это должно быть.

BTW: заголовки ответа одинаковы как для действительных параметров, так и для ошибки SOAP для недопустимого.

[править] Спасибо @Jan Papenbrock. Добавление «Content-Type = text / xml» решило проблему. Не знаю, почему я думал, что получаю одни и те же заголовки от реальных и выдуманных ответов - полная чушь! Джон [/ edit]


person Hummingtop    schedule 04.12.2018    source источник


Ответы (1)


Была такая же ошибка с WireMock и исправлена ​​с помощью ответов на this вопрос. В моем случае заголовок Content-Type отсутствовал.

Предлагаю вам попробовать следующее:

  1. Отправьте Content-Type: text/xml в качестве заголовка ответа (или попробуйте application/soap+xml)
  2. Возвращать код состояния HTTP 500 для ответа об ошибке SOAP в соответствии со спецификацией (примечание: статус 400 у меня не работал).

Мое поколение заглушек выглядит так:

static ResponseDefinitionBuilder errorInvalidStopResponse() {
    responseWithBodyFile('response-error-invalid-stop.xml')
            .withStatus(500)
}

static ResponseDefinitionBuilder responseWithBodyFile(String responseBodyFileName)   {
    aResponse()
            .withStatus(200)
            .withHeader("Content-Type", "text/xml")
            .withBodyFile(responseBodyFileName)
}
person Jan Papenbrock    schedule 11.12.2018