Ответ 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 заголовок отсутствовал.

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

  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)
}
Другие вопросы по тегам