Разбор ответного сообщения SOAP java

У меня есть следующее ответное сообщение SOAP, в котором мне нужно подтвердить, что код ответа равен 1, если импорт проекта прошел успешно. Как я могу сделать это с помощью RestAssured и Java?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<env:Envelope 
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <env:Header/>

<env:Body>
    <n1:importProjectResponse 
        xmlns:n1=" some text here......" 
        xmlns:n2="..some text here...." 
        xsi:type="n2:ArrayOfProjectImportResultCode">
        <n2:ProjectImportResultCode>
            <n2:code>1</n2:code>
            <n2:message>Project 'test1' import was successful.</n2:message>
        </n2:ProjectImportResultCode>
    </n1:importProjectResponse>
</env:Body></env:Envelope>

Я использую RestAssured для тестирования, и было бы здорово, если бы я мог избежать раздувания кода, воспользовавшись преимуществами RestAssured вместо написания дополнительных классов или методов для выполнения, казалось бы, простой задачи. Любые идеи?

Я пробовал до сих пор, что, конечно, не работает ..

response  = given().
    auth().basic(USER, PASSWORD).
    body(request).
    headers("Content-type", "text/xml").
    expect().
        statusCode(200).
        body("//n2:code/text()", is("1")). // does not match .. hmmm :(
    when().post(URL);

person casper    schedule 02.06.2014    source источник
comment
Итак, вы используете REST и SOAP? Интересный...   -  person Ceiling Gecko    schedule 02.06.2014
comment
Вероятно, вы не зарегистрировали пространство имен. Попробуйте //*[local-name()='code']/text()   -  person helderdarocha    schedule 02.06.2014
comment
Трюк с локальным именем не сработал. Я получаю 'XML-путь //*[local-name()='code']/text() не соответствует.'   -  person casper    schedule 02.06.2014


Ответы (2)


Это должно работать //*[name()='n2:code']/text()

person olyv    schedule 03.06.2014

Итак, на форуме поддержки RestAssured я получил ответ, что вместо xpath я могу попробовать GPath. Это сработало для меня:

response  = given().
auth().basic(USER, PASSWORD).
body(request).
headers("Content-type", "text/xml").
expect().
    statusCode(200).
    body("Envelope.Body.importProjectResponse.ProjectImportResultCode.code[0]", is("1")).
when().post(URL);
person casper    schedule 03.06.2014