Ответ SOAP Fault от Wiremock не определен как SOAPFault API-Connect 2018
Когда я вызываю реальную службу SOAP (используя Postman и SoapUI) с недопустимым значением параметра, это вызывает ответ SOAP-Fault с HTTP 200 .
Я скопировал тело ответа в файл ответов Wiremock, соответствующий файл сопоставления которого возвращает HTTP 200 .
Когда я использую Postman для вызова службы SOAP и поддельной, "тело" ответов идентично (кроме заголовков, поскольку смоделированный ответ явно не устанавливает их).
Когда мой API вызывает фактическую службу SOAP, SOAPError перехватывается, обработка останавливается, и API обрабатывается, как определено в разделе "catch".
Однако, когда API вызывает поддельную службу SOAP, SOAPError не обнаруживается после 'invoke', обработка продолжается и выдает неправильный ответ.
Это говорит о том, что в реальной ошибке SOAP-службы возвращается что-то "лишнее", которое APIC использует для обнаружения SOAPError. Что это?
Я добавил бы это к издевательскому ответу, если бы я только знал, что это должно быть.
Кстати: заголовки ответа одинаковы как для допустимых параметров, так и для ошибки SOAP для недопустимого.
[править] Спасибо @Джан Папенброк. Добавление "Content-Type = text/xml" разобрало его. Я не знаю, почему я думал, что получаю те же заголовки от реальных и насмешливых ответов - полная чушь! Джон [/edit]
1 ответ
Была та же ошибка с WireMock и исправлена с помощью ответов на этот вопрос. В моем случае Content-Type
заголовок отсутствовал.
Я предлагаю вам попробовать следующее:
- послать
Content-Type: text/xml
в качестве заголовка ответа (или попробуйтеapplication/soap+xml
) - Верните 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)
}