提问者:小点点

来自Wiremck的SOAP故障响应未被API检测为SOAPFault-Connect 2018


当我使用无效的参数值调用实际的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”解决了这个问题。我不知道为什么我认为我收到了来自真实和嘲笑回复的相同标题——完全是垃圾!约翰[/编辑]


共1个答案

匿名用户

WireMock也有同样的错误,并在这个问题的答案的帮助下修复了它。在我的例子中,缺少Content-Type标头。

我建议您尝试以下操作:

  1. 发送Content-Type: text/xml作为响应标头(或尝试application/soapxml
  2. 根据规范HTTP返回SOAP故障响应的状态代码500(注意:状态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)
}