Wiremock 独立 - 从模拟 Soap 服务的请求 xml 中获取值

问题描述 投票:0回答:1

我一直在尝试使用独立的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"
    }
  }
}
soap wiremock wiremock-standalone
1个回答
0
投票

在这种情况下,您需要使用

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" ]
  }
}

请注意,主体在这里内联。您还可以将正文放入文件中并引用它,它会以相同的方式工作。

© www.soinside.com 2019 - 2024. All rights reserved.