Wiremock: xpath не работает, если присутствует xmlns - PullRequest
1 голос
/ 26 июня 2019

Я создаю заглушку в wiremock.Если у меня есть xmlns в xml, тогда он не будет соответствовать, однако без этого он будет работать.

Запрос

curl -d '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><a xmlns="http://www.example.com/namespaces/ad"><b>1</b><c>2</c><d>9407339517</d></a>' -i -H "Content-Type: text/xml" -X POST "http://localhost:8080/test"

Stub Json

{
  "request": {
    "method": "POST",
    "url": "/test",
    "headers" : {
      "Content-Type" : {
          "equalTo" : "text/xml"
      }
    },
    "bodyPatterns" : [ {
      "matchesXPath" : "/stuff:a[b='1'][c='2']",
      "xPathNamespaces" : {
        "stuff" : "http://www.example.com/namespaces/ad"
      }
    } ]
   },
  "response": {
    "body": "Hello world!",

    "status": 200
  }

}

Наряду с вышеупомянутымКстати, я тоже пробовал с local-name ().

1 Ответ

1 голос
/ 26 июня 2019

Когда есть пространство имен для (большого) родителя, то (большие) потомки наследуют одно и то же пространство имен. Таким образом, ваши /b и /c должны иметь префикс /stuff:b или /stuff:c

{
  "request": {
    "method": "POST",
    "url": "/test",
    "headers" : {
      "Content-Type" : {
          "equalTo" : "text/xml"
      }
    },
    "bodyPatterns" : [ {
      "matchesXPath" : "/stuff:a[./stuff:b='1'][./stuff:c='2']",
      "xPathNamespaces" : {
        "stuff" : "http://www.example.com/namespaces/ad"
      }
    } ]
   },
  "response": {
    "body": "Hello world!",

    "status": 200
  }

}
...