我一直在尝试使用独立的wiremock 为SOAP 服务创建一个存根系统。我已经准备好response.xml,并且需要根据 SOAP 请求 xml 中的 id 值返回它们。 例如, 肥皂要求:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<AddressType>
<addressId>Q1004DB</addressId>
</AddressType>
</soap:Body>
</soap:Envelope>
正如我之前提到的,我为每个地址 ID 设置了响应 xml。在本例中,我有一个名为 Q1004DB.xml 的响应 xml,它应该作为此请求的响应返回。所以我试图找出一个逻辑来让我能够做到这一点。
如果有人可以帮助我如何在独立的wiremock中实现逻辑,我可以根据输入请求xml中的值返回响应,那就太好了。预先感谢!
作为第一步,我尝试返回 addressId 作为响应。我遵循 StackOverflow 的几个答案并看到了这种格式,但这似乎不起作用。有人可以告诉我这里可能出了什么问题吗?
{
"request": {
"url": "/ws/AddressSoapService",
"method": "POST"
},
"response": {
"body": "{{$.addressType.addressId}}",
"headers": {
"Server": "Microsoft-IIS/8.0",
"Connection": "Keep-Alive",
"Web-Service": "DataFlex 18.1",
"Access-Control-Allow-Headers": "content-type",
"Date": "Tue, 26 Jun 2018 07:45:47 GMT",
"Strict-Transport-Security": "max-age=31536000",
"Cache-Control": "private, max-age=0",
"Content-Type": "application/soap+xml; charset=utf-8"
}
}
}
在这种情况下,您需要使用
xPath
模板助手从请求中提取值。
假设您想要生成如下所示的响应:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<AddressType>
<addressId>Q1004DB</addressId>
</AddressType>
</soap:Body>
</soap:Envelope>
那么你需要一个像这样的存根定义:
{
"name" : "SOAP example",
"request" : {
"url" : "/ws/AddressSoapService",
"method" : "POST"
},
"response" : {
"status" : 200,
"body" : "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n <soap:Body>\n <MyResponse>\n <addressId>{{xPath request.body '//AddressType/addressId/text()'}}</addressId>\n </MyResponse>\n </soap:Body>\n</soap:Envelope>",
"headers" : {
"Content-Type" : "application/xml"
},
"transformers" : [ "response-template" ]
}
}
请注意,主体在这里内联。您还可以将正文放入文件中并引用它,它会以相同的方式工作。