сопоставление xpath не работает для параметров запроса - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь поставить условие И в соответствие xpath для параметров запроса, но это не работает.

Я создаю несколько заглушек, в которых uniqueId может содержать аналогичные цифры 00000 или 11111, но имя serviceName будет другим. Например, в первом запросе uniqueId равен 1000001, а serviceName = 'AB C', во втором запросе uniqueId снова равен 1000001, а serviceName - 'XYZ'. Для обоих ответ будет разным. Я создал три заглушки: одна для службы AB C, вторая для службы XYZ и третья по умолчанию без совпадения с xpath. Когда я вызываю службу с параметром запроса, содержащим uniqueId 1000001 и имя службы AB C или XYZ, каждый раз я получаю ответ заглушки по умолчанию. Передавая xml в параметре запроса

"queryParameters":{
      "xmlreqdoc": {
        "matchesXPath" : "//*[[local-name()='uniqueId'][text()[contains(.,'00000')]] AND //*[local-name()='serviceName'][text() = 'ABCDEFGH']]"
      }
    }

, я создал заглушки с заданным приоритетом ... и кажется, что каждый раз возвращается значение по умолчанию. Ниже приводится запрос xml

<?xml version="1.0" encoding="UTF-8"?>
<service>
<serviceHeader>
<userId>XXXX</userId>
<password>XXXXX</password>
<serviceName>ABCDEFGH</serviceName>
</serviceHeader>
<serviceBody>
<subServiceName>add</subServiceName>
<uniqueId>00000</uniqueId>
</serviceBody>
</service>

Ниже приведено созданное мною отображение заглушки

{
  "priority" : 1,
  "request": {
    "urlPath": "/testMappings",
    "method": "GET",
    "headers": {
      "Content-Type": {
        "equalTo": "application/xml"
      },
      "Accept": {
        "equalTo": "application/xml"
      }
    },
    "queryParameters":{
      "xmlreqdoc": {
        "matchesXPath" : "//*[//[local-name()='uniqueId'][text()[contains(.,'00000')]] AND //*[local-name()='serviceName'][text() = 'ABCDEFGH']]"
      }
    }
  },
  "response": {
    "status": 400,
    "headers": {
      "Content-Type" : "application/xml"
    },
    "fixedDelayMilliseconds": 500,
    "bodyFileName": "ERROR.xml"
  }
}

Любая помощь или указатели будут высоко оценены. Заранее спасибо !!

Ответы [ 2 ]

1 голос
/ 25 мая 2020

Вы сказали нам неправильный синтаксис, который вы пробовали, но вы не сказали нам, чего вы пытаетесь достичь, поэтому мы можем сказать вам, что вы сделали неправильно, но мы не можем сказать вам, как чтобы сделать это правильно.

"//*[//[local-name()='uniqueId'][text()[contains(.,'00000')]] AND //*[local-name()='serviceName'][text() = 'ABCDEFGH']]"

Вещи, которые здесь явно не так:

  • // сразу за которым следует предикат
  • Ненужное сопоставление по локальному имени () при отсутствии задействованных пространств имен
  • Излишнее использование text()
  • Излишнее использование contains (), когда вы могли бы использовать =
  • AND, должно быть and

Возможно вы хотите //uniqueId = '00000' and //serviceName = 'ABCDEFGH'

0 голосов
/ 27 мая 2020
//*[uniqueId[contains(text(),'00000')] and //serviceName='ABCDEFGH']

у меня сработало.

...