Spring XML与XML签约尝试根据请求指定模拟

问题描述

在大多数情况下,我可以通过元素content-type及其内部的值指定模拟。我正在将它与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.*"))