2015-08-04 2 views
0

Я новичок в Groovy Scripting. Я пытаюсь получить доступ к значению узла Response ниже сценарийответ доступа в SOAP UI в Groovy Script

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context); 
def responseHolder = groovyUtils.getXmlHolder(testRunner.testCase.testSteps["request"].testRequest.response.responseContent); 
responseHolder.namespaces["ns0"]="http://xmlns.int.com/orders/xsd/v1" 
String mySection = responseHolder.getNodeValue["//ns0:MT_OrderCreateDTCFulfillmentResponse/ns0:StatusCode"] ; 
log.info mySection 

секции MySection печатается []

XML Ответ:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header xmlns:v1="http://xmlns.int.com/orders/xsd/v1"/> 
    <soapenv:Body xmlns:v1="http://xmlns.int.com/orders/xsd/v1"> 
     <ns0:MT_OrderCreateDTCFulfillmentResponse xmlns:ns0="http://xmlns.int.com/orders/xsd/v1"> 
     <StatusCode>000</StatusCode> 
     <ReferenceDocNbr>NA</ReferenceDocNbr> 
     <SchemaValidationStatus>Validated</SchemaValidationStatus> 
     <StatusTimestamp>2015-08-03T18:58:01.602</StatusTimestamp> 
     <FaultDetails>Request for customer order number NA received successfully and format validated.</FaultDetails> 
     </ns0:MT_OrderCreateDTCFulfillmentResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 

SOAP Структура UI Project - Я запуск Test_Script. Предложите мне, что я не хватает SOAP UI Project structue

ответ

1

Вы имеете использовать:

responseHolder.getNodeValue("//ns0:MT_OrderCreateDTCFulfillmentResponse/StatusCode");

вместо responseHolder.getNodeValue["//ns0:MT_OrderCreateDTCFulfillmentResponse/ns0:StatusCode"];

Обратите внимание, что я изменить responseHolder.getNodeValue вызов использовать () вместо [], а также изменения ваш xpath, так как в вашем ответе <StatusCode> не определен в xmlns:ns0="http://xmlns.int.com/orders/xsd/v1".

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

responseHolder.getNodeValue("//*:MT_OrderCreateDTCFulfillmentResponse/*:StatusCode");

Кроме того, обратите внимание, что вероятно, вы XML является неправильным, так как я полагаю, что все суб элементы <MT_OrderCreateDTCFulfillmentResponse> сусло принадлежит "http://xmlns.int.com/orders/xsd/v1" имен ... так что вы имеете объявить это как:

<ns0:MT_OrderCreateDTCFulfillmentResponse xmlns:ns0="http://xmlns.int.com/orders/xsd/v1"> 
     <ns0:StatusCode>000</ns0:StatusCode> 
     <ns0:ReferenceDocNbr>NA</ns0:ReferenceDocNbr> 
     <ns0:SchemaValidationStatus>Validated</ns0:SchemaValidationStatus> 
     <ns0:StatusTimestamp>2015-08-03T18:58:01.602</ns0:StatusTimestamp> 
     <ns0:FaultDetails>Request for customer order number NA received successfully and format validated.</ns0:FaultDetails> 
     </ns0:MT_OrderCreateDTCFulfillmentResponse> 

Или, используя по умолчанию для этого тега:

<MT_OrderCreateDTCFulfillmentResponse xmlns="http://xmlns.int.com/orders/xsd/v1"> 
     <StatusCode>000</StatusCode> 
     <ReferenceDocNbr>NA</ReferenceDocNbr> 
     <SchemaValidationStatus>Validated</SchemaValidationStatus> 
     <StatusTimestamp>2015-08-03T18:58:01.602</StatusTimestamp> 
     <FaultDetails>Request for customer order number NA received successfully and format validated.</FaultDetails> 
     </MT_OrderCreateDTCFulfillmentResponse> 

Обратите внимание, что если вы измените вас XM L с указанием вашего первого XPath, это правильно, так как теперь StatusCode принадлежит к вашему пространству имен.

Надеется, что это помогает,

+0

благодаря он работал .. – VamsiKrishna

+0

@VamsiKrishna Вы долгожданная ':'), приятно помочь вам. – albciff