当我使用无效的参数值调用实际的SOAP服务(使用Postman和SoapUI)时,它会导致SOAP-Fault响应,HTTP200。
我将响应的主体复制到Wiremck响应文件中,其相应的映射文件返回HTTP200。
当我使用Postman调用SOAP服务和模拟服务时,响应的“正文”是相同的(除了标头,因为模拟响应没有显式设置任何内容)。
当我的API调用实际的SOAP服务时,SOAPError被捕获,处理停止,API被处理,如“catch”部分中定义的那样。
但是,当API调用模拟的SOAP服务时,在调用后没有检测到SOAPError,处理继续并产生不正确的响应。
这表明在真正的SOAP服务的故障中返回了一些“额外”的东西,APIC使用它来检测SOAPError。它是什么?
如果我知道它应该是什么,我会把它添加到嘲笑的回应中。
BTW:有效参数的响应标头和无效参数的SOAP Fault相同。
[编辑]谢谢@Jan Papenbrock。添加“Content-Type=text/xml”解决了这个问题。我不知道为什么我认为我收到了来自真实和嘲笑回复的相同标题——完全是垃圾!约翰[/编辑]
WireMock也有同样的错误,并在这个问题的答案的帮助下修复了它。在我的例子中,缺少Content-Type
标头。
我建议您尝试以下操作:
Content-Type: text/xml
作为响应标头(或尝试application/soapxml
)我的存根一代看起来像这样:
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)
}