Memverifikasi atribut XML menggunakan jaminan Jayway

Saya mencoba memverifikasi bahwa xmlns:ns1="http://thomas-bayer.com/blz/" dalam XML berikut menggunakan dukungan 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>

Seperti yang saya pahami,

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

adalah atribut dari

<ns1:getBankResponse

Awalan @ harus mengembalikan atribut yang cocok dengan batang setelah @.

Asumsikan bahwa xmlString sama dengan XML respons SOAP di atas, semua hal berikut ini menghasilkan 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");

Bantuan apa pun akan sangat dihargai.

PS. Saya tahu bahwa yakinlah terutama berkaitan dengan RESTful API tetapi dapat digunakan untuk menguji SOAP.


person MikeJRamsey56    schedule 29.04.2016    source sumber


Jawaban (2)


Di versi REST Assured yang akan datang (mungkin 2.9.1) Anda akan dapat mengonfigurasi XmlPath agar tidak mengetahui namespace. Jadi ini berarti Anda dapat melakukan seperti ini:

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/"));

Anda dapat mencobanya hari ini dengan bergantung pada versi 2.9.1-SNAPSHOT setelah menambahkan repositori Maven berikut:

<repositories>
        <repository>
            <id>sonatype</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
            <snapshots />
        </repository>
</repositories>
person Johan    schedule 30.04.2016
comment
Terima kasih. Hanya apa yang saya cari. - person MikeJRamsey56; 30.04.2016

Sebagian menyelesaikannya dengan cara ini:

 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"));

Saya katakan sebagian karena meskipun hal ini membuktikan bahwa ruang nama ns1 digunakan dan oleh karena itu harus didefinisikan agar valid, hal ini tidak menunjukkan bahwa:

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

karena tesnya tetap lolos jika saya mengubah URI.

Adakah yang punya jawaban lebih baik?

person MikeJRamsey56    schedule 29.04.2016
comment
Tidak ada pilihan yang lebih baik dalam versi yang dirilis saat ini (2.9.0). - person Johan; 30.04.2016