Ответ SOAP Fault от Wiremock не определен как SOAPFault API-Connect 2018 - PullRequest
0 голосов
/ 04 декабря 2018

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

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

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

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

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

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

Я бы добавил его в смоделированный ответ, если бы только знал, каким он должен быть.

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

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

1 Ответ

0 голосов
/ 11 декабря 2018

Была такая же ошибка с WireMock и исправлена ​​с помощью ответов на этот вопрос .В моем случае заголовок 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)
}
...