Spring 与 XML 的云合同。尝试根据请求指定模拟
Spring cloud contract with XML. Trying to specify mock depend on request
在大多数情况下,我可以通过元素内容类型和其中的值来指定 mock。我将它与 xpath 连接起来,一切顺利。但是现在我遇到了一个情况,在 wsdl 中每个 xsd 都有相同的内容类型。我不知道如何制定条件来指定具体模拟。我想这个 url 中每个 xsd 唯一不同的是根元素。你有什么解决办法吗?您认为可以根据请求根元素指定模拟吗?如何指定模拟?这是我的合同示例
Contract.make {
request {
priority(1)
method 'POST'
url '/ws/xxxx/xxx'
body(new MatchingStrategy(anyNonEmptyString(), MatchingStrategy.Type.MATCHING))
bodyMatchers {
xPath("//*[local-name()='Chnl']/text()", new MatchingTypeValue(MatchingType.EQUALITY, "xxx"))
}
headers {
header(contentType(), regex('application/.*xml.*xxxxxxx.*'))
}
}
response {
status 200
body(fileAsBytes("xxxx.xml"))
headers {
contentType(applicationXml())
}
}
}
我通过在 bodyMatcher 中为主 xml 元素添加新的 xpath 条件解决了我的问题。
xPath("//*[local-name()='Body']", new MatchingTypeValue(MatchingType.REGEX, ".*nameOfRootXmlElement.*"))
在大多数情况下,我可以通过元素内容类型和其中的值来指定 mock。我将它与 xpath 连接起来,一切顺利。但是现在我遇到了一个情况,在 wsdl 中每个 xsd 都有相同的内容类型。我不知道如何制定条件来指定具体模拟。我想这个 url 中每个 xsd 唯一不同的是根元素。你有什么解决办法吗?您认为可以根据请求根元素指定模拟吗?如何指定模拟?这是我的合同示例
Contract.make {
request {
priority(1)
method 'POST'
url '/ws/xxxx/xxx'
body(new MatchingStrategy(anyNonEmptyString(), MatchingStrategy.Type.MATCHING))
bodyMatchers {
xPath("//*[local-name()='Chnl']/text()", new MatchingTypeValue(MatchingType.EQUALITY, "xxx"))
}
headers {
header(contentType(), regex('application/.*xml.*xxxxxxx.*'))
}
}
response {
status 200
body(fileAsBytes("xxxx.xml"))
headers {
contentType(applicationXml())
}
}
}
我通过在 bodyMatcher 中为主 xml 元素添加新的 xpath 条件解决了我的问题。
xPath("//*[local-name()='Body']", new MatchingTypeValue(MatchingType.REGEX, ".*nameOfRootXmlElement.*"))