API-Connect 2018 年未将来自 Wiremock 的 SOAP 错误响应检测为 SOAPFault
SOAP Fault response from Wiremock not detected as SOAPFault by API-Connect 2018
当我使用无效参数值调用实际的 SOAP 服务(使用 Postman 和 SoapUI)时,它会导致 SOAP-Fault 响应 HTTP 200 。
我将响应的body复制到Wiremock响应文件中,其对应的映射文件returns HTTP 200.
当我使用 Postman 调用 SOAP 服务和模拟服务时,响应的 'Body' 是相同的(除了 headers,因为模拟响应没有明确设置任何内容) .
当我的 API 调用实际的 SOAP 服务时,SOAPError 被捕获,处理停止并且 API 按照 'catch' 部分中的定义进行处理。
但是,当 API 调用模拟 SOAP 服务时,在 'invoke' 之后未检测到 SOAPError,处理继续并产生不正确的响应。
这表明 'extra' 从真正的 SOAP 服务的故障中返回了一些东西,APIC 用来检测 SOAPError。这是什么?
如果我知道它应该是什么,我会把它添加到模拟响应中。
顺便说一句:对于有效参数和无效参数的 SOAP 错误,响应 headers 是相同的。
[编辑]
谢谢@Jan Papenbrock。添加 "Content-Type = text/xml" 解决了这个问题。
我不知道为什么我认为我从真实和模拟的回复中收到了相同的 headers - 完全是垃圾!
约翰
[/编辑]
与 WireMock 有同样的错误,并在 this question 的答案的帮助下修复了它。就我而言,Content-Type
header 丢失了。
我建议您尝试以下操作:
- 发送
Content-Type: text/xml
作为响应 header(或尝试 application/soap+xml
)
- Return SOAP 错误响应的 HTTP 状态代码 500,根据 specification(注意:状态 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)
}
当我使用无效参数值调用实际的 SOAP 服务(使用 Postman 和 SoapUI)时,它会导致 SOAP-Fault 响应 HTTP 200 。
我将响应的body复制到Wiremock响应文件中,其对应的映射文件returns HTTP 200.
当我使用 Postman 调用 SOAP 服务和模拟服务时,响应的 'Body' 是相同的(除了 headers,因为模拟响应没有明确设置任何内容) .
当我的 API 调用实际的 SOAP 服务时,SOAPError 被捕获,处理停止并且 API 按照 'catch' 部分中的定义进行处理。
但是,当 API 调用模拟 SOAP 服务时,在 'invoke' 之后未检测到 SOAPError,处理继续并产生不正确的响应。
这表明 'extra' 从真正的 SOAP 服务的故障中返回了一些东西,APIC 用来检测 SOAPError。这是什么?
如果我知道它应该是什么,我会把它添加到模拟响应中。
顺便说一句:对于有效参数和无效参数的 SOAP 错误,响应 headers 是相同的。
[编辑] 谢谢@Jan Papenbrock。添加 "Content-Type = text/xml" 解决了这个问题。 我不知道为什么我认为我从真实和模拟的回复中收到了相同的 headers - 完全是垃圾! 约翰 [/编辑]
与 WireMock 有同样的错误,并在 this question 的答案的帮助下修复了它。就我而言,Content-Type
header 丢失了。
我建议您尝试以下操作:
- 发送
Content-Type: text/xml
作为响应 header(或尝试application/soap+xml
) - Return SOAP 错误响应的 HTTP 状态代码 500,根据 specification(注意:状态 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)
}