Проверка XML-атрибута с помощью надежной системы Jayway.

Я пытаюсь проверить, что xmlns:ns1="http://thomas-bayer.com/blz/" в следующем XML-коде с помощью Поддержка XML.

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <ns1:getBankResponse xmlns:ns1="http://thomas-bayer.com/blz/">
      <ns1:details>
        <ns1:bezeichnung>ABK-Kreditbank</ns1:bezeichnung>
        <ns1:bic>ABKBDEB1XXX</ns1:bic>
        <ns1:ort>Berlin</ns1:ort>
        <ns1:plz>10789</ns1:plz>
      </ns1:details>
    </ns1:getBankResponse>
  </soapenv:Body>
</soapenv:Envelope>

Как я понимаю,

xmlns:ns1="http://thomas-bayer.com/blz/"

является атрибутом

<ns1:getBankResponse

Префикс @ должен возвращать атрибут, соответствующий основе, следующей за @.

Предположим, что xmlString равен приведенному выше XML-коду ответа SOAP, все следующие действия вернули значение null:

String nameSpace1 = given(xmlString).getString("Envelope.Body.getBankResponse.@xmlns:ns1");
String nameSpace2 = given(xmlString).getString("Envelope.Body.getBankResponse.@ns1");
String nameSpace3 = given(xmlString).getString("Envelope.Body.getBankResponse.@xmlns");
List<String> nameSpace = given(xmlString).get("Envelope.Body.getBankResponse[0].@xmlns:ns1");
List<String> nameSpace = given(xmlString).get("Envelope.Body.getBankResponse[0].@ns1");
List<String> nameSpace = given(xmlString).get("Envelope.Body.getBankResponse[0].@xmlns");

Любая помощь будет принята с благодарностью.

PS. Я знаю, что rest-assured в первую очередь касается API-интерфейсов RESTful, но его можно использовать для тестирования SOAP.


person MikeJRamsey56    schedule 29.04.2016    source источник


Ответы (2)


В следующей версии REST Assured (вероятно, 2.9.1) вы сможете настроить XmlPath так, чтобы он не знал о пространствах имен. Это означает, что вы можете сделать так:

XmlPath xmlPath = new XmlPath(xmlResponse).using(xmlPathConfig().namespaceAware(false));
assertThat(xmlPath.getString("soapenv:Envelope.soapenv:Body.ns1:getBankResponse.@xmlns:ns1"), equalTo("http://thomas-bayer.com/blz/"));

Вы можете попробовать это сегодня, в зависимости от версии 2.9.1-SNAPSHOT после добавления следующего репозитория Maven:

<repositories>
        <repository>
            <id>sonatype</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
            <snapshots />
        </repository>
</repositories>
person Johan    schedule 30.04.2016
comment
Спасибо. Как раз то, что я искал. - person MikeJRamsey56; 30.04.2016

Частично решил так:

 XmlPath xmlPath = new XmlPath(xmlResponse).using(xmlPathConfig().declaredNamespace("ns1", "http://thomas-bayer.com/blz/"));

// Then

 assertThat(xmlPath.getString("Envelope.Body.getBankResponse.ns1:details.ns1:bezeichnung.text()"), equalTo("ABK-Kreditbank"));

Я говорю частично, потому что, хотя это доказывает, что пространство имен ns1 используется и, следовательно, должно быть определено, чтобы быть действительным, это не показывает, что:

xmlns:ns1="http://thomas-bayer.com/blz/"

потому что тест все еще проходит, если я изменю URI.

У кого-нибудь есть лучший ответ?

person MikeJRamsey56    schedule 29.04.2016
comment
В текущей версии (2.9.0) нет лучшего варианта. - person Johan; 30.04.2016