You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WireMock中验证XPath不匹配(不含xmlns属性)

解决WireMock断言XML请求体无xmlns属性的问题

你遇到的equalToXml匹配器通过的原因是它基于XML语义等价性比较,会自动忽略命名空间声明、属性顺序和无关空白,所以即使请求体带xmlns属性也会判定匹配。下面提供两种可行的解决方案:

方法1:使用XPath反向断言

通过matchingXPath结合not()函数,检查根元素不存在xmlns属性:

针对特定根元素(如<customer>)

verify(WireMock.postRequestedFor(urlEqualTo("/otherservice/customers/123"))
    .withRequestBody(matchingXPath("not(/customer/@xmlns)")));

通用匹配任意根元素

如果不需要限定根元素名称,可使用更通用的表达式:

verify(WireMock.postRequestedFor(urlEqualTo("/otherservice/customers/123"))
    .withRequestBody(matchingXPath("not(*[@xmlns])")));

方法2:使用精确字符串匹配

如果需要完全匹配XML的字符串内容(包括无xmlns属性),直接用equalTo匹配器代替equalToXml,它会做严格的字符串对比:

String expectedRequestBody = "<customer><name>Jon Doe</name><age>39</age></customer>";
verify(WireMock.postRequestedFor(urlEqualTo("/otherservice/customers/123"))
    .withRequestBody(equalTo(expectedRequestBody)));

内容的提问来源于stack exchange,提问作者94621

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 11:42:41